/** This function may return cached copies of GoogleCloudStorageItemInfo. */ @Override public GoogleCloudStorageItemInfo getItemInfo(StorageResourceId resourceId) throws IOException { // Get the item from cache. GoogleCloudStorageItemInfo item = cache.getItem(resourceId); // If it wasn't in the cache, request it then add it. if (item == null) { item = super.getItemInfo(resourceId); cache.putItem(item); } return item; }
@Override public void close() { super.close(); // Respect close and empty the cache. cache.invalidateAll(); }
@Override public void deleteObjects(List<StorageResourceId> fullObjectNames) throws IOException { super.deleteObjects(fullObjectNames); // Remove the deleted objects from cache. for (StorageResourceId id : fullObjectNames) { cache.removeItem(id); } }
@Override public void deleteBuckets(List<String> bucketNames) throws IOException { super.deleteBuckets(bucketNames); // Remove objects that reside in deleted buckets. for (String bucket : bucketNames) { cache.invalidateBucket(bucket); } }
@Override public GoogleCloudStorageItemInfo composeObjects( List<StorageResourceId> sources, StorageResourceId destination, CreateObjectOptions options) throws IOException { GoogleCloudStorageItemInfo item = super.composeObjects(sources, destination, options); // Cache the composed object. cache.putItem(item); return item; }
@Override public List<GoogleCloudStorageItemInfo> listBucketInfo() throws IOException { List<GoogleCloudStorageItemInfo> result = super.listBucketInfo(); // Add the results to the cache. for (GoogleCloudStorageItemInfo item : result) { cache.putItem(item); } return result; }
@Override public List<GoogleCloudStorageItemInfo> updateItems(List<UpdatableItemInfo> itemInfoList) throws IOException { List<GoogleCloudStorageItemInfo> result = super.updateItems(itemInfoList); // Update the cache with the returned items. This overwrites the originals as the // StorageResourceIds of the items do not change in an update. for (GoogleCloudStorageItemInfo item : result) { cache.putItem(item); } return result; }
/** This function may return cached copies of GoogleCloudStorageItemInfo. */ @Override public List<GoogleCloudStorageItemInfo> getItemInfos(List<StorageResourceId> resourceIds) throws IOException { List<GoogleCloudStorageItemInfo> result = new ArrayList<GoogleCloudStorageItemInfo>(resourceIds.size()); List<StorageResourceId> request = new ArrayList<StorageResourceId>(resourceIds.size()); // Populate the result list with items in the cache, and the request list with resources that // still need to be resolved. Null items are added to the result list to preserve ordering. for (StorageResourceId resourceId : resourceIds) { GoogleCloudStorageItemInfo item = cache.getItem(resourceId); if (item == null) { request.add(resourceId); } result.add(item); } // Resolve all the resources which were not cached, cache them, and add them to the result list. // Null entries in the result list are replaced by the fresh entries from the underlying // GoogleCloudStorage. if (!request.isEmpty()) { List<GoogleCloudStorageItemInfo> response = super.getItemInfos(request); Iterator<GoogleCloudStorageItemInfo> responseIterator = response.iterator(); // Iterate through the result set, replacing the null entries added previously with entries // from the response. for (int i = 0; i < result.size() && responseIterator.hasNext(); i++) { if (result.get(i) == null) { GoogleCloudStorageItemInfo item = responseIterator.next(); cache.putItem(item); result.set(i, item); } } } return result; }
/** This function may return cached copies of GoogleCloudStorageItemInfo. */ @Override public List<GoogleCloudStorageItemInfo> listObjectInfo( String bucketName, String objectNamePrefix, String delimiter, long maxResults) throws IOException { List<GoogleCloudStorageItemInfo> result; if (listCachingEnabled) { result = cache.getList(bucketName, objectNamePrefix); if (result == null) { result = super.listObjectInfo(bucketName, objectNamePrefix, null); cache.putList(bucketName, objectNamePrefix, result); } if (GoogleCloudStorage.PATH_DELIMITER.equals(delimiter)) { filter(result, bucketName, objectNamePrefix, delimiter); } } else { result = super.listObjectInfo(bucketName, objectNamePrefix, null); cache.putList(bucketName, objectNamePrefix, result); } return result; }