Source:
<code>public StoreInfo get(List<? extends StoreKey> ids, EnumSet<StoreGetOptions> storeGetOptions) throws StoreException { checkStarted(); if (ids.size() > 1 && ids.size() != new HashSet<>(ids).size()) { throw new IllegalArgumentException("The list of IDs provided contains duplicates"); } List<BlobReadInfo> blobReadInfos = new ArrayList<>(ids.size()); List<MessageInfo> messageInfos = new ArrayList<>(ids.size()); try { List<BlobId> blobIdList = ids.stream().map(key -> (BlobId) key).collect(Collectors.toList()); Map<String, CloudBlobMetadata> cloudBlobMetadataListMap = cloudDestination.getBlobMetadata(blobIdList); if (cloudBlobMetadataListMap.size() < ids.size()) { Set<BlobId> missingBlobs = blobIdList.stream() .filter(blobId -> !cloudBlobMetadataListMap.containsKey(blobId)) .collect(Collectors.toSet()); throw new StoreException("Some of the keys were missing in the cloud metadata store: " + missingBlobs, StoreErrorCodes.IOError); } for (BlobId blobId : blobIdList) { CloudBlobMetadata blobMetadata = cloudBlobMetadataListMap.get(blobId.getID()); MessageInfo messageInfo = new MessageInfo(blobId, blobMetadata.getSize(), blobMetadata.getExpirationTime(), <START> (short) blobMetadata.getAccountId(), (short) blobMetadata.getContainerId(), 0); <END> messageInfos.add(messageInfo); blobReadInfos.add(new BlobReadInfo(blobMetadata, blobId)); } } catch (CloudStorageException e) { throw new StoreException(e, StoreErrorCodes.IOError); } CloudMessageReadSet messageReadSet = new CloudMessageReadSet(blobReadInfos, cloudDestination); return new StoreInfo(messageReadSet, messageInfos); }</code><technical_language>fill in for operationTime, clear what. depends state of blob, uploadTime, creationTime. Also, I getBlobMetadata() return blobs marked for deletion compacted</technical_language>

Target:
public StoreInfo get(List<? extends StoreKey> ids, EnumSet<StoreGetOptions> storeGetOptions) throws StoreException { checkStarted(); checkDuplicates(ids); List<CloudMessageReadSet.BlobReadInfo> blobReadInfos = new ArrayList<>(ids.size()); List<MessageInfo> messageInfos = new ArrayList<>(ids.size()); try { List<BlobId> blobIdList = ids.stream().map(key -> (BlobId) key).collect(Collectors.toList()); Map<String, CloudBlobMetadata> cloudBlobMetadataListMap = cloudDestination.getBlobMetadata(blobIdList); if (cloudBlobMetadataListMap.size() < blobIdList.size()) { Set<BlobId> missingBlobs = blobIdList.stream() .filter(blobId -> !cloudBlobMetadataListMap.containsKey(blobId)) .collect(Collectors.toSet()); throw new StoreException("Some of the keys were missing in the cloud metadata store: " + missingBlobs, StoreErrorCodes.ID_Not_Found); } long currentTimeStamp = System.currentTimeMillis(); validateCloudMetadata(cloudBlobMetadataListMap, storeGetOptions, currentTimeStamp); for (BlobId blobId : blobIdList) { CloudBlobMetadata blobMetadata = cloudBlobMetadataListMap.get(blobId.getID()); MessageInfo messageInfo = new MessageInfo(blobId, blobMetadata.getSize(), blobMetadata.getExpirationTime(), (short) blobMetadata.getAccountId(), (short) blobMetadata.getContainerId(), getOperationTime(blobMetadata, currentTimeStamp)); messageInfos.add(messageInfo); blobReadInfos.add(new CloudMessageReadSet.BlobReadInfo(blobMetadata, blobId)); } } catch (CloudStorageException e) { throw new StoreException(e, StoreErrorCodes.IOError); } CloudMessageReadSet messageReadSet = new CloudMessageReadSet(blobReadInfos, this); return new StoreInfo(messageReadSet, messageInfos); }