Search in sources :

Example 6 with Delete

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);
}
Also used : Delete(co.cask.cdap.api.dataset.table.Delete) Scanner(co.cask.cdap.api.dataset.table.Scanner) MDSKey(co.cask.cdap.data2.dataset2.lib.table.MDSKey) Row(co.cask.cdap.api.dataset.table.Row) LinkedList(java.util.LinkedList)

Example 7 with Delete

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);
    }
}
Also used : Delete(co.cask.cdap.api.dataset.table.Delete) Scanner(co.cask.cdap.api.dataset.table.Scanner) Row(co.cask.cdap.api.dataset.table.Row)

Aggregations

Delete (co.cask.cdap.api.dataset.table.Delete)7 Row (co.cask.cdap.api.dataset.table.Row)5 Scanner (co.cask.cdap.api.dataset.table.Scanner)4 Get (co.cask.cdap.api.dataset.table.Get)3 Put (co.cask.cdap.api.dataset.table.Put)3 DatasetAdmin (co.cask.cdap.api.dataset.DatasetAdmin)2 Scan (co.cask.cdap.api.dataset.table.Scan)2 Table (co.cask.cdap.api.dataset.table.Table)2 HBaseTable (co.cask.cdap.data2.dataset2.lib.table.hbase.HBaseTable)2 Transaction (org.apache.tephra.Transaction)2 TransactionAware (org.apache.tephra.TransactionAware)2 Test (org.junit.Test)2 ReadWrite (co.cask.cdap.api.annotation.ReadWrite)1 DatasetProperties (co.cask.cdap.api.dataset.DatasetProperties)1 MeteredDataset (co.cask.cdap.api.dataset.metrics.MeteredDataset)1 Increment (co.cask.cdap.api.dataset.table.Increment)1 MetricsCollector (co.cask.cdap.api.metrics.MetricsCollector)1 NotFoundException (co.cask.cdap.common.NotFoundException)1 MDSKey (co.cask.cdap.data2.dataset2.lib.table.MDSKey)1 ScheduleId (co.cask.cdap.proto.id.ScheduleId)1