From f241ba9da7c5905a7ee1c64eedd8700b792fd6e5 Mon Sep 17 00:00:00 2001 From: Aggelos Avgerinos Date: Thu, 13 Aug 2020 13:27:30 +0300 Subject: [PATCH] SwiftBlobContainer: Add ability to list child containers These are used to delete unreferenced index directories recursively[1], for details check this commit[2]. [1]: https://github.com/elastic/elasticsearch/pull/42189 [2]: https://github.com/elastic/elasticsearch/commit/2f637d42f1d11c68841524e95a2e3820bec32e14 --- .../blobstore/SwiftBlobContainer.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/main/java/org/wikimedia/elasticsearch/swift/repositories/blobstore/SwiftBlobContainer.java b/src/main/java/org/wikimedia/elasticsearch/swift/repositories/blobstore/SwiftBlobContainer.java index 165305e..d20b313 100644 --- a/src/main/java/org/wikimedia/elasticsearch/swift/repositories/blobstore/SwiftBlobContainer.java +++ b/src/main/java/org/wikimedia/elasticsearch/swift/repositories/blobstore/SwiftBlobContainer.java @@ -19,6 +19,7 @@ import org.elasticsearch.common.Nullable; import org.elasticsearch.common.blobstore.BlobMetaData; import org.elasticsearch.common.blobstore.BlobPath; +import org.elasticsearch.common.blobstore.BlobContainer; import org.elasticsearch.common.blobstore.DeleteResult; import org.elasticsearch.common.blobstore.support.AbstractBlobContainer; import org.elasticsearch.common.blobstore.support.PlainBlobMetaData; @@ -154,6 +155,31 @@ public Map listBlobsByPrefix(@Nullable final String blobNa }); } + @Override + public Map children() throws IOException { + return SwiftPerms.exec(() -> { + MapBuilder blobContainerBuilder = MapBuilder.newMapBuilder(); + String path = path().buildAsString(); + Collection files = blobStore.swift().listDirectory(new Directory(path, '/')); + + if (files != null && !files.isEmpty()) { + for (DirectoryOrObject directory : files) { + String name = directory.getName(); + String indexKey = name.substring(keyPath.length(), name.length() - 1); + + if (! blobContainerBuilder.containsKey(indexKey)) { + BlobPath p = new BlobPath(); + p = p.add(directory.getName()); + blobContainerBuilder.put(indexKey, new SwiftBlobContainer(p, blobStore)); + } + + } + } + + return blobContainerBuilder.immutableMap(); + }); + } + /** * Get all the blobs */