/** * Makes get {@link BatchRequest BatchRequests}. * * @param paths {@link GcsPath GcsPaths}. * @param results mutable {@link List} for return values. * @return {@link BatchRequest BatchRequests} to execute. * @throws IOException */ @VisibleForTesting List<BatchRequest> makeGetBatches( Collection<GcsPath> paths, List<StorageObjectOrIOException[]> results) throws IOException { List<BatchRequest> batches = new ArrayList<>(); for (List<GcsPath> filesToGet : Lists.partition(Lists.newArrayList(paths), MAX_REQUESTS_PER_BATCH)) { BatchRequest batch = createBatchRequest(); for (GcsPath path : filesToGet) { results.add(enqueueGetFileSize(path, batch)); } batches.add(batch); } return batches; }
List<BatchRequest> makeRemoveBatches(Collection<String> filenames) throws IOException { List<BatchRequest> batches = new ArrayList<>(); for (List<String> filesToDelete : Lists.partition(Lists.newArrayList(filenames), MAX_REQUESTS_PER_BATCH)) { BatchRequest batch = createBatchRequest(); for (String file : filesToDelete) { enqueueDelete(GcsPath.fromUri(file), batch); } batches.add(batch); } return batches; }
List<BatchRequest> makeCopyBatches(Iterable<String> srcFilenames, Iterable<String> destFilenames) throws IOException { List<String> srcList = Lists.newArrayList(srcFilenames); List<String> destList = Lists.newArrayList(destFilenames); checkArgument( srcList.size() == destList.size(), "Number of source files %s must equal number of destination files %s", srcList.size(), destList.size()); List<BatchRequest> batches = new ArrayList<>(); BatchRequest batch = createBatchRequest(); for (int i = 0; i < srcList.size(); i++) { final GcsPath sourcePath = GcsPath.fromUri(srcList.get(i)); final GcsPath destPath = GcsPath.fromUri(destList.get(i)); enqueueCopy(sourcePath, destPath, batch); if (batch.size() >= MAX_REQUESTS_PER_BATCH) { batches.add(batch); batch = createBatchRequest(); } } if (batch.size() > 0) { batches.add(batch); } return batches; }