dsmiley commented on a change in pull request #108:
URL: https://github.com/apache/solr/pull/108#discussion_r651431012



##########
File path: 
solr/contrib/blob-directory/src/java/org/apache/solr/blob/BlobStoreConnection.java
##########
@@ -152,11 +180,66 @@ private void createDirectories(URI blobDirUri, String 
blobDirPath) throws IOExce
     }
   }
 
+  private void copyStream(IndexInput input, OutputStream output) throws 
IOException {
+    byte[] buffer = streamBuffers.get();
+    long remaining = input.length();
+    while (remaining > 0) {
+      int length = (int) Math.min(buffer.length, remaining);
+      input.readBytes(buffer, 0, length, false);
+      output.write(buffer, 0, length);
+      remaining -= length;
+    }
+  }
+
   private void deleteFiles(String blobDirPath, Collection<String> fileNames) 
throws IOException {
     URI blobDirUri = repository.resolve(repositoryLocation, blobDirPath);
     repository.delete(blobDirUri, fileNames, true);
   }
 
+  /**
+   * Lists the files in a specific directory of the repository and select them 
with the provided filter.
+   */
+  private List<BlobFile> list(URI blobDirUri, BlobFileFilter fileFilter) 
throws IOException {
+    String[] fileNames = repository.listAll(blobDirUri);
+    List<BlobFile> blobFiles = new ArrayList<>(fileNames.length);
+    for (String fileName : fileNames) {
+      BlobFile blobFile = new BlobFile(fileName, -1, -1);
+      if (fileFilter.accept(blobFile)) {
+        blobFiles.add(blobFile);
+      }
+    }
+    return blobFiles;
+  }
+
+  private List<Callable<Void>> pullFiles(
+      URI blobDirUri,
+      Collection<BlobFile> blobFiles,
+      IOUtils.IOFunction<BlobFile, IndexOutput> outputSupplier) {
+    return blobFiles.stream()
+        .map(
+            (blobFile) ->
+                (Callable<Void>)
+                    () -> {
+                      try (IndexInput in = repository.openInput(blobDirUri, 
blobFile.fileName(), IOContext.READ);
+                           IndexOutput out = outputSupplier.apply(blobFile)) {
+                        copyStream(in, out);
+                      }
+                      return null;
+                    })
+        .collect(Collectors.toList());
+  }
+
+  private void copyStream(IndexInput input, IndexOutput output) throws 
IOException {

Review comment:
       I see.  Ehh; good enough for me.  Maybe a comment.
   
   OH, I see that IndexOutput, which extends from DataOutput has a method 
copyBytes which takes DataInput!  Let's just use that then :-)




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@solr.apache.org
For additional commands, e-mail: issues-h...@solr.apache.org

Reply via email to