@Override public void addMetadataRecord(InputStream stream, String name) throws DataStoreException { if (delegate instanceof SharedDataStore) { ((SharedDataStore) delegate).addMetadataRecord(stream, name); } }
@Override public void deleteAllMetadataRecords(String prefix) { if (delegate instanceof SharedDataStore) { ((SharedDataStore) delegate).deleteAllMetadataRecords(prefix); } }
@Override public boolean deleteMetadataRecord(String name) { return delegate instanceof SharedDataStore && ((SharedDataStore) delegate).deleteMetadataRecord(name); }
fds.addMetadataRecord(new ByteArrayInputStream(data.getBytes()), recordName); fds.addMetadataRecord(testFile, recordName); assertEquals(count, fds.getAllMetadataRecords(prefix).size()); DataRecord record = fds.getMetadataRecord(entry.getKey()); StringWriter writer = new StringWriter(); IOUtils.copy(record.getStream(), writer); fds.deleteMetadataRecord(entry.getKey()); assertTrue(writer.toString().equals(entry.getValue())); assertEquals(0, fds.getAllMetadataRecords(prefix).size());
@Test public void testBackendDeleteAllMetadataRecordsPrefixMatchesAll() throws DataStoreException { SharedDataStore fds = dataStore; String prefixAll = "prefix1"; String prefixSome = "prefix1.prefix2"; String prefixOne = "prefix1.prefix3"; String prefixNone = "prefix4"; Map<String, Integer> prefixCounts = Maps.newHashMap(); prefixCounts.put(prefixAll, 4); prefixCounts.put(prefixSome, 2); prefixCounts.put(prefixOne, 1); prefixCounts.put(prefixNone, 0); for (Map.Entry<String, Integer> entry : prefixCounts.entrySet()) { fds.addMetadataRecord(randomStream(1, 10), String.format("%s.testRecord1", prefixAll)); fds.addMetadataRecord(randomStream(2, 10), String.format("%s.testRecord2", prefixSome)); fds.addMetadataRecord(randomStream(3, 10), String.format("%s.testRecord3", prefixSome)); fds.addMetadataRecord(randomStream(4, 10), String.format("%s.testRecord4", prefixOne)); int preCount = fds.getAllMetadataRecords("").size(); fds.deleteAllMetadataRecords(entry.getKey()); int deletedCount = preCount - fds.getAllMetadataRecords("").size(); assertEquals(entry.getValue().intValue(), deletedCount); fds.deleteAllMetadataRecords(""); } }
@Test public void testBackendGetMetadataRecordInvalidName() throws DataStoreException { SharedDataStore fds = dataStore; fds.addMetadataRecord(randomStream(0, 10), "testRecord"); assertNull(fds.getMetadataRecord("invalid")); for (String name : Lists.newArrayList("", null)) { try { fds.getMetadataRecord(name); fail("Expect to throw"); } catch(Exception e) {} } fds.deleteMetadataRecord("testRecord"); }
/** * Adds the marked references to the blob store root. Default NOOP * * @param blobStore the blob store * @param fs the fs * @param repoId the repo id * @param uniqueSuffix the unique session suffix * @throws DataStoreException the data store exception * @throws IOException Signals that an I/O exception has occurred. */ @Override void addMarked(GarbageCollectableBlobStore blobStore, GarbageCollectorFileState fs, String repoId, String uniqueSuffix) throws DataStoreException, IOException { boolean exists = ((SharedDataStore) blobStore) .metadataRecordExists(SharedStoreRecordType.REFERENCES.getNameFromId(repoId)); if (exists) { LOG.info("References for repository id {} already exists. Creating a duplicate one. " + "Please check for inadvertent sharing of repository id by different repositories", repoId); } ((SharedDataStore) blobStore).addMetadataRecord(fs.getMarkedRefs(), SharedStoreRecordType.REFERENCES .getNameFromIdPrefix(repoId, uniqueSuffix)); }
@Test public void testBackendDeleteMetadataRecord() throws DataStoreException { SharedDataStore fds = dataStore; fds.addMetadataRecord(randomStream(0, 10), "name"); for (String name : Lists.newArrayList("", null)) { if (Strings.isNullOrEmpty(name)) { try { fds.deleteMetadataRecord(name); } catch (IllegalArgumentException e) { } } else { fds.deleteMetadataRecord(name); fail(); } } assertTrue(fds.deleteMetadataRecord("name")); }
@Override public List<DataRecord> getAllMetadataRecords(String prefix) { if (delegate instanceof SharedDataStore) { return ((SharedDataStore) delegate).getAllMetadataRecords(prefix); } return null; }
LOG.trace("Retrieving all blob id files available form the DataStore"); Iterable<DataRecord> refRecords = datastore.getAllMetadataRecords(fileNamePrefix); datastore.deleteMetadataRecord(rec.getIdentifier().toString()); LOG.debug("Deleted metadata record {}", rec.getIdentifier().toString());
@Test public void testBackendDeleteAllMetadataRecordsNoRecordsNoChange() { SharedDataStore fds = dataStore; assertEquals(0, fds.getAllMetadataRecords("").size()); fds.deleteAllMetadataRecords(""); assertEquals(0, fds.getAllMetadataRecords("").size()); }
@Override public DataRecord getMetadataRecord(String name) { if (delegate instanceof SharedDataStore) { return ((SharedDataStore) delegate).getMetadataRecord(name); } return null; }
@Override public DataRecord getRecordForId(DataIdentifier identifier) throws DataStoreException { if (delegate instanceof SharedDataStore) { return ((SharedDataStore) delegate).getRecordForId(identifier); } return delegate.getRecord(identifier); }
@Override public Iterator<DataRecord> getAllRecords() throws DataStoreException { if (delegate instanceof SharedDataStore) { return ((SharedDataStore) delegate).getAllRecords(); } else { return Iterators.transform(delegate.getAllIdentifiers(), new Function<DataIdentifier, DataRecord>() { @Nullable @Override public DataRecord apply(@Nullable DataIdentifier input) { try { return delegate.getRecord(input); } catch (DataStoreException e) { log.warn("Error occurred while fetching DataRecord for identifier {}", input, e); } return null; } }); } }
@Test public void testBackendGetAllMetadataRecordsPrefixMatchesAll() throws DataStoreException { SharedDataStore fds = dataStore; assertEquals(0, fds.getAllMetadataRecords("").size()); String prefixAll = "prefix1"; String prefixSome = "prefix1.prefix2"; String prefixOne = "prefix1.prefix3"; String prefixNone = "prefix4"; fds.addMetadataRecord(randomStream(1, 10), String.format("%s.testRecord1", prefixAll)); fds.addMetadataRecord(randomStream(2, 10), String.format("%s.testRecord2", prefixSome)); fds.addMetadataRecord(randomStream(3, 10), String.format("%s.testRecord3", prefixSome)); fds.addMetadataRecord(randomStream(4, 10), String.format("%s.testRecord4", prefixOne)); fds.addMetadataRecord(randomStream(5, 10), "prefix5.testRecord5"); assertEquals(5, fds.getAllMetadataRecords("").size()); assertEquals(4, fds.getAllMetadataRecords(prefixAll).size()); assertEquals(2, fds.getAllMetadataRecords(prefixSome).size()); assertEquals(1, fds.getAllMetadataRecords(prefixOne).size()); assertEquals(0, fds.getAllMetadataRecords(prefixNone).size()); fds.deleteAllMetadataRecords(""); assertEquals(0, fds.getAllMetadataRecords("").size()); }
/** * Adds the marked references to the blob store root. Default NOOP * * @param blobStore the blob store * @param fs the fs * @param repoId the repo id * @param uniqueSuffix the unique session suffix * @throws DataStoreException the data store exception * @throws IOException Signals that an I/O exception has occurred. */ @Override void addMarked(GarbageCollectableBlobStore blobStore, GarbageCollectorFileState fs, String repoId, String uniqueSuffix) throws DataStoreException, IOException { boolean exists = ((SharedDataStore) blobStore) .metadataRecordExists(SharedStoreRecordType.REFERENCES.getNameFromId(repoId)); if (exists) { LOG.info("References for repository id {} already exists. Creating a duplicate one. " + "Please check for inadvertent sharing of repository id by different repositories", repoId); } ((SharedDataStore) blobStore).addMetadataRecord(fs.getMarkedRefs(), SharedStoreRecordType.REFERENCES .getNameFromIdPrefix(repoId, uniqueSuffix)); }
@Override public List<DataRecord> getAllMetadataRecords(String prefix) { if (delegate instanceof SharedDataStore) { return ((SharedDataStore) delegate).getAllMetadataRecords(prefix); } return null; }
LOG.trace("Retrieving all blob id files available form the DataStore"); Iterable<DataRecord> refRecords = datastore.getAllMetadataRecords(fileNamePrefix); datastore.deleteMetadataRecord(rec.getIdentifier().toString()); LOG.debug("Deleted metadata record {}", rec.getIdentifier().toString());
@Override public DataRecord getMetadataRecord(String name) { if (delegate instanceof SharedDataStore) { return ((SharedDataStore) delegate).getMetadataRecord(name); } return null; }
@Override public DataRecord getRecordForId(DataIdentifier identifier) throws DataStoreException { if (delegate instanceof SharedDataStore) { return ((SharedDataStore) delegate).getRecordForId(identifier); } return delegate.getRecord(identifier); }