use of co.cask.cdap.api.dataset.table.Delete in project cdap by caskdata.
the class MetadataDataset method removeMetadata.
/**
* Removes all keys that satisfy a given predicate from the metadata of the specified {@link NamespacedEntityId}.
*
* @param targetId the {@link NamespacedEntityId} for which keys are to be removed
* @param filter the {@link Predicate} that should be satisfied to remove a key
*/
private void removeMetadata(NamespacedEntityId targetId, Predicate<String> filter) {
String targetType = EntityIdKeyHelper.getTargetType(targetId);
MDSKey mdsKey = MdsKey.getMDSValueKey(targetId, null);
byte[] prefix = mdsKey.getKey();
byte[] stopKey = Bytes.stopKeyForPrefix(prefix);
List<String> deletedMetadataKeys = new LinkedList<>();
try (Scanner scan = indexedTable.scan(prefix, stopKey)) {
Row next;
while ((next = scan.next()) != null) {
String value = next.getString(VALUE_COLUMN);
if (value == null) {
continue;
}
String metadataKey = MdsKey.getMetadataKey(targetType, next.getRow());
if (filter.apply(metadataKey)) {
indexedTable.delete(new Delete(next.getRow()));
// store the key to delete its indexes later
deletedMetadataKeys.add(metadataKey);
}
}
}
// delete all the indexes for all deleted metadata key
for (String deletedMetadataKey : deletedMetadataKeys) {
deleteIndexes(targetId, deletedMetadataKey);
}
writeHistory(targetId);
}
use of co.cask.cdap.api.dataset.table.Delete in project cdap by caskdata.
the class MetadataStoreDataset method deleteAll.
public void deleteAll(MDSKey id, @Nullable Predicate<MDSKey> filter) {
byte[] prefix = id.getKey();
byte[] stopKey = Bytes.stopKeyForPrefix(prefix);
try {
try (Scanner scan = table.scan(prefix, stopKey)) {
Row next;
while ((next = scan.next()) != null) {
String columnValue = next.getString(COLUMN);
if (columnValue == null) {
continue;
}
MDSKey key = new MDSKey(next.getRow());
if (filter != null && !filter.test(key)) {
continue;
}
table.delete(new Delete(next.getRow()).add(COLUMN));
}
}
} catch (Exception e) {
throw Throwables.propagate(e);
}
}
Aggregations