You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by am...@apache.org on 2018/09/12 10:25:10 UTC
svn commit: r1840652 - in /jackrabbit/oak/trunk:
oak-blob-cloud-azure/src/main/java/org/apache/jackrabbit/oak/blob/cloud/azure/blobstorage/
oak-blob-cloud-azure/src/test/java/org/apache/jackrabbit/oak/blob/cloud/azure/blobstorage/
oak-blob-cloud/src/ma...
Author: amitj
Date: Wed Sep 12 10:25:09 2018
New Revision: 1840652
URL: http://svn.apache.org/viewvc?rev=1840652&view=rev
Log:
OAK-7738: Add method to check for existence of metadata in SharedDataStore
- Added a new method to the ShareDataStore and implementations
Modified:
jackrabbit/oak/trunk/oak-blob-cloud-azure/src/main/java/org/apache/jackrabbit/oak/blob/cloud/azure/blobstorage/AzureBlobStoreBackend.java
jackrabbit/oak/trunk/oak-blob-cloud-azure/src/test/java/org/apache/jackrabbit/oak/blob/cloud/azure/blobstorage/AzureDataStoreTest.java
jackrabbit/oak/trunk/oak-blob-cloud/src/main/java/org/apache/jackrabbit/oak/blob/cloud/s3/S3Backend.java
jackrabbit/oak/trunk/oak-blob-cloud/src/test/java/org/apache/jackrabbit/oak/blob/cloud/s3/TestS3DataStore.java
jackrabbit/oak/trunk/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/AbstractSharedCachingDataStore.java
jackrabbit/oak/trunk/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/SharedDataStore.java
jackrabbit/oak/trunk/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStore.java
jackrabbit/oak/trunk/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/FSBackend.java
jackrabbit/oak/trunk/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/OakFileDataStore.java
jackrabbit/oak/trunk/oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/AbstractDataStoreCacheTest.java
jackrabbit/oak/trunk/oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/BlobGCTest.java
jackrabbit/oak/trunk/oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/datastore/SharedDataStoreTest.java
jackrabbit/oak/trunk/oak-blob/src/main/java/org/apache/jackrabbit/oak/spi/blob/SharedBackend.java
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/AbstractActiveDeletedBlobTest.java
Modified: jackrabbit/oak/trunk/oak-blob-cloud-azure/src/main/java/org/apache/jackrabbit/oak/blob/cloud/azure/blobstorage/AzureBlobStoreBackend.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-blob-cloud-azure/src/main/java/org/apache/jackrabbit/oak/blob/cloud/azure/blobstorage/AzureBlobStoreBackend.java?rev=1840652&r1=1840651&r2=1840652&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-blob-cloud-azure/src/main/java/org/apache/jackrabbit/oak/blob/cloud/azure/blobstorage/AzureBlobStoreBackend.java (original)
+++ jackrabbit/oak/trunk/oak-blob-cloud-azure/src/main/java/org/apache/jackrabbit/oak/blob/cloud/azure/blobstorage/AzureBlobStoreBackend.java Wed Sep 12 10:25:09 2018
@@ -688,6 +688,28 @@ public class AzureBlobStoreBackend exten
}
}
+ @Override
+ public boolean metadataRecordExists(String name) {
+ long start = System.currentTimeMillis();
+ ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
+ try {
+ Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
+ CloudBlockBlob blob = getAzureContainer().getBlockBlobReference(addMetaKeyPrefix(name));
+ boolean exists = blob.exists();
+ LOG.debug("Metadata record {} exists {}. duration={}", name, exists, (System.currentTimeMillis() - start));
+ return exists;
+ }
+ catch (DataStoreException | StorageException | URISyntaxException e) {
+ LOG.debug("Error checking existence of metadata record = {}", name, e);
+ }
+ finally {
+ if (contextClassLoader != null) {
+ Thread.currentThread().setContextClassLoader(contextClassLoader);
+ }
+ }
+ return false;
+ }
+
/**
* Get key from data identifier. Object is stored with key in ADS.
Modified: jackrabbit/oak/trunk/oak-blob-cloud-azure/src/test/java/org/apache/jackrabbit/oak/blob/cloud/azure/blobstorage/AzureDataStoreTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-blob-cloud-azure/src/test/java/org/apache/jackrabbit/oak/blob/cloud/azure/blobstorage/AzureDataStoreTest.java?rev=1840652&r1=1840651&r2=1840652&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-blob-cloud-azure/src/test/java/org/apache/jackrabbit/oak/blob/cloud/azure/blobstorage/AzureDataStoreTest.java (original)
+++ jackrabbit/oak/trunk/oak-blob-cloud-azure/src/test/java/org/apache/jackrabbit/oak/blob/cloud/azure/blobstorage/AzureDataStoreTest.java Wed Sep 12 10:25:09 2018
@@ -642,6 +642,24 @@ public class AzureDataStoreTest {
assertTrue(backend.deleteMetadataRecord("name"));
}
+ // MetadataRecordExists (Backend)
+ @Test
+ public void testBackendMetadataRecordExists() throws DataStoreException {
+ backend.addMetadataRecord(randomStream(0, 10), "name");
+ for (String name : Lists.newArrayList("invalid", "", null)) {
+ if (Strings.isNullOrEmpty(name)) {
+ try {
+ backend.metadataRecordExists(name);
+ }
+ catch (IllegalArgumentException e) { }
+ }
+ else {
+ assertFalse(backend.metadataRecordExists(name));
+ }
+ }
+ assertTrue(backend.metadataRecordExists("name"));
+ }
+
// DeleteAllMetadataRecords (Backend)
@Test
Modified: jackrabbit/oak/trunk/oak-blob-cloud/src/main/java/org/apache/jackrabbit/oak/blob/cloud/s3/S3Backend.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-blob-cloud/src/main/java/org/apache/jackrabbit/oak/blob/cloud/s3/S3Backend.java?rev=1840652&r1=1840651&r2=1840652&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-blob-cloud/src/main/java/org/apache/jackrabbit/oak/blob/cloud/s3/S3Backend.java (original)
+++ jackrabbit/oak/trunk/oak-blob-cloud/src/main/java/org/apache/jackrabbit/oak/blob/cloud/s3/S3Backend.java Wed Sep 12 10:25:09 2018
@@ -519,11 +519,15 @@ public class S3Backend extends AbstractS
ObjectMetadata meta = s3service.getObjectMetadata(bucket, addMetaKeyPrefix(name));
return new S3DataRecord(this, s3service, bucket, new DataIdentifier(name),
meta.getLastModified().getTime(), meta.getContentLength(), true);
- } finally {
+ } catch(Exception e) {
+ LOG.error("Error getting metadata record for {}", name, e);
+ }
+ finally {
if (contextClassLoader != null) {
Thread.currentThread().setContextClassLoader(contextClassLoader);
}
}
+ return null;
}
@Override
@@ -647,7 +651,7 @@ public class S3Backend extends AbstractS
} else {
byte[] key;
// Try reading from the metadata folder if it exists
- if (metadataExists(REF_KEY)) {
+ if (metadataRecordExists(REF_KEY)) {
key = readMetadataBytes(REF_KEY);
} else {
// Create a new key and then retrieve it to use it
@@ -674,7 +678,8 @@ public class S3Backend extends AbstractS
}
}
- private boolean metadataExists(String name) {
+ @Override
+ public boolean metadataRecordExists(String name) {
ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
try {
Thread.currentThread().setContextClassLoader(
Modified: jackrabbit/oak/trunk/oak-blob-cloud/src/test/java/org/apache/jackrabbit/oak/blob/cloud/s3/TestS3DataStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-blob-cloud/src/test/java/org/apache/jackrabbit/oak/blob/cloud/s3/TestS3DataStore.java?rev=1840652&r1=1840651&r2=1840652&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-blob-cloud/src/test/java/org/apache/jackrabbit/oak/blob/cloud/s3/TestS3DataStore.java (original)
+++ jackrabbit/oak/trunk/oak-blob-cloud/src/test/java/org/apache/jackrabbit/oak/blob/cloud/s3/TestS3DataStore.java Wed Sep 12 10:25:09 2018
@@ -55,6 +55,7 @@ import static org.apache.jackrabbit.oak.
import static org.apache.jackrabbit.oak.blob.cloud.s3.S3DataStoreUtils.isS3Configured;
import static org.apache.jackrabbit.oak.plugins.blob.datastore.DataStoreUtils.randomStream;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
@@ -314,6 +315,27 @@ public class TestS3DataStore {
s3ds.getAllMetadataRecords(null);
}
+ // MetadataRecordExists (Backend)
+ @Test
+ public void testBackendMetadataRecordExists() throws Exception {
+ assumeTrue(isS3Configured());
+ S3DataStore s3ds = getDataStore();
+
+ s3ds.addMetadataRecord(randomStream(0, 10), "name");
+ for (String name : Lists.newArrayList("invalid", "", null)) {
+ if (Strings.isNullOrEmpty(name)) {
+ try {
+ s3ds.metadataRecordExists(name);
+ }
+ catch (IllegalArgumentException e) { }
+ }
+ else {
+ assertFalse(s3ds.metadataRecordExists(name));
+ }
+ }
+ assertTrue(s3ds.metadataRecordExists("name"));
+ }
+
// DeleteMetadataRecord (Backend)
@Test
Modified: jackrabbit/oak/trunk/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/AbstractSharedCachingDataStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/AbstractSharedCachingDataStore.java?rev=1840652&r1=1840651&r2=1840652&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/AbstractSharedCachingDataStore.java (original)
+++ jackrabbit/oak/trunk/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/AbstractSharedCachingDataStore.java Wed Sep 12 10:25:09 2018
@@ -415,6 +415,11 @@ public abstract class AbstractSharedCach
}
@Override
+ public boolean metadataRecordExists(String name) {
+ return backend.metadataRecordExists(name);
+ }
+
+ @Override
public List<DataRecord> getAllMetadataRecords(String prefix) {
return backend.getAllMetadataRecords(prefix);
}
Modified: jackrabbit/oak/trunk/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/SharedDataStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/SharedDataStore.java?rev=1840652&r1=1840651&r2=1840652&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/SharedDataStore.java (original)
+++ jackrabbit/oak/trunk/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/SharedDataStore.java Wed Sep 12 10:25:09 2018
@@ -65,6 +65,14 @@ public interface SharedDataStore {
DataRecord getMetadataRecord(String name);
/**
+ * Checks if the metadata record with the name exists
+ *
+ * @param name
+ * @return
+ */
+ boolean metadataRecordExists(String name);
+
+ /**
* Gets the all root records.
*
* @return the all root records
Modified: jackrabbit/oak/trunk/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStore.java?rev=1840652&r1=1840651&r2=1840652&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStore.java (original)
+++ jackrabbit/oak/trunk/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStore.java Wed Sep 12 10:25:09 2018
@@ -487,6 +487,11 @@ public class DataStoreBlobStore
}
@Override
+ public boolean metadataRecordExists(String name) {
+ return delegate instanceof SharedDataStore && ((SharedDataStore) delegate).metadataRecordExists(name);
+ }
+
+ @Override
public List<DataRecord> getAllMetadataRecords(String prefix) {
if (delegate instanceof SharedDataStore) {
return ((SharedDataStore) delegate).getAllMetadataRecords(prefix);
Modified: jackrabbit/oak/trunk/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/FSBackend.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/FSBackend.java?rev=1840652&r1=1840651&r2=1840652&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/FSBackend.java (original)
+++ jackrabbit/oak/trunk/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/FSBackend.java Wed Sep 12 10:25:09 2018
@@ -270,6 +270,22 @@ public class FSBackend extends AbstractS
}
@Override
+ public boolean metadataRecordExists(String name) {
+ for (File file : FileFilterUtils
+ .filterList(FileFilterUtils.nameFileFilter(name), fsPathDir.listFiles())) {
+ if (!file.isDirectory()) { // skip directories which are actual data store files
+ if (!file.exists()) {
+ LOG.debug("File does not exist {} ",
+ new Object[] {file.getAbsolutePath()});
+ } else {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ @Override
public Iterator<DataRecord> getAllRecords() {
final AbstractSharedBackend backend = this;
return Files.fileTreeTraverser().postOrderTraversal(fsPathDir)
Modified: jackrabbit/oak/trunk/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/OakFileDataStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/OakFileDataStore.java?rev=1840652&r1=1840651&r2=1840652&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/OakFileDataStore.java (original)
+++ jackrabbit/oak/trunk/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/OakFileDataStore.java Wed Sep 12 10:25:09 2018
@@ -194,6 +194,27 @@ public class OakFileDataStore extends Fi
}
@Override
+ public boolean metadataRecordExists(String name) {
+ checkArgument(!Strings.isNullOrEmpty(name), "name should not be empty");
+
+ File root = new File(getPath());
+
+ for (File file : FileFilterUtils.filterList(
+ FileFilterUtils.nameFileFilter(name),
+ root.listFiles())) {
+ if (!file.isDirectory()) { // skip directories which are actual data store files
+ if (!file.exists()) {
+ LOG.debug("File does not exist {} ",
+ new Object[] {file.getAbsolutePath()});
+ } else {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ @Override
public List<DataRecord> getAllMetadataRecords(String prefix) {
checkArgument(null != prefix, "prefix should not be null");
Modified: jackrabbit/oak/trunk/oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/AbstractDataStoreCacheTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/AbstractDataStoreCacheTest.java?rev=1840652&r1=1840651&r2=1840652&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/AbstractDataStoreCacheTest.java (original)
+++ jackrabbit/oak/trunk/oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/AbstractDataStoreCacheTest.java Wed Sep 12 10:25:09 2018
@@ -391,6 +391,10 @@ public class AbstractDataStoreCacheTest
@Override public void deleteAllMetadataRecords(String prefix) {
}
+ @Override public boolean metadataRecordExists(String name) {
+ return false;
+ }
+
@Override public void init() throws DataStoreException {
}
Modified: jackrabbit/oak/trunk/oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/BlobGCTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/BlobGCTest.java?rev=1840652&r1=1840651&r2=1840652&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/BlobGCTest.java (original)
+++ jackrabbit/oak/trunk/oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/BlobGCTest.java Wed Sep 12 10:25:09 2018
@@ -568,6 +568,10 @@ public class BlobGCTest {
return metadata.get(name);
}
+ @Override public boolean metadataRecordExists(String name) {
+ return metadata.containsKey(name);
+ }
+
@Override public List<DataRecord> getAllMetadataRecords(String prefix) {
List<DataRecord> recs = Lists.newArrayList();
Iterator<Map.Entry<String, DataRecord>> iter = metadata.entrySet().iterator();
Modified: jackrabbit/oak/trunk/oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/datastore/SharedDataStoreTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/datastore/SharedDataStoreTest.java?rev=1840652&r1=1840651&r2=1840652&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/datastore/SharedDataStoreTest.java (original)
+++ jackrabbit/oak/trunk/oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/datastore/SharedDataStoreTest.java Wed Sep 12 10:25:09 2018
@@ -61,6 +61,7 @@ import static org.apache.jackrabbit.oak.
import static org.apache.jackrabbit.oak.plugins.blob.datastore.SharedDataStoreTest.FixtureHelper.DATA_STORE.CACHING_FDS;
import static org.apache.jackrabbit.oak.plugins.blob.datastore.SharedDataStoreTest.FixtureHelper.DATA_STORE.FDS;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
@@ -384,4 +385,24 @@ public class SharedDataStoreTest {
SharedDataStore fds = dataStore;
fds.deleteAllMetadataRecords(null);
}
+
+ // MetadataRecordExists (Backend)
+ @Test
+ public void testBackendMetadataRecordExists() throws DataStoreException {
+ SharedDataStore fds = dataStore;
+
+ fds.addMetadataRecord(randomStream(0, 10), "name");
+ for (String name : Lists.newArrayList("invalid", "", null)) {
+ if (Strings.isNullOrEmpty(name)) {
+ try {
+ fds.metadataRecordExists(name);
+ }
+ catch (IllegalArgumentException e) { }
+ }
+ else {
+ assertFalse(fds.metadataRecordExists(name));
+ }
+ }
+ assertTrue(fds.metadataRecordExists("name"));
+ }
}
Modified: jackrabbit/oak/trunk/oak-blob/src/main/java/org/apache/jackrabbit/oak/spi/blob/SharedBackend.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-blob/src/main/java/org/apache/jackrabbit/oak/spi/blob/SharedBackend.java?rev=1840652&r1=1840651&r2=1840652&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-blob/src/main/java/org/apache/jackrabbit/oak/spi/blob/SharedBackend.java (original)
+++ jackrabbit/oak/trunk/oak-blob/src/main/java/org/apache/jackrabbit/oak/spi/blob/SharedBackend.java Wed Sep 12 10:25:09 2018
@@ -156,6 +156,14 @@ public interface SharedBackend {
void deleteAllMetadataRecords(String prefix);
/**
+ * Checks if the metadata record with the specified name exists.
+ *
+ * @param name the name of the record
+ * @return whether record exists
+ */
+ boolean metadataRecordExists(String name);
+
+ /**
* Initialize
*/
void init() throws DataStoreException;
Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/AbstractActiveDeletedBlobTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/AbstractActiveDeletedBlobTest.java?rev=1840652&r1=1840651&r2=1840652&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/AbstractActiveDeletedBlobTest.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/AbstractActiveDeletedBlobTest.java Wed Sep 12 10:25:09 2018
@@ -246,6 +246,13 @@ public abstract class AbstractActiveDele
return null;
}
+ @Override public boolean metadataRecordExists(String name) {
+ if (delegate instanceof BlobTrackingStore) {
+ return ((BlobTrackingStore) delegate).metadataRecordExists(name);
+ }
+ return false;
+ }
+
@Override public List<DataRecord> getAllMetadataRecords(String prefix) {
if (delegate instanceof BlobTrackingStore) {
return ((BlobTrackingStore) delegate).getAllMetadataRecords(prefix);