use of io.cdap.cdap.data2.dataset2.lib.table.MDSKey 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 io.cdap.cdap.data2.dataset2.lib.table.MDSKey in project cdap by caskdata.
the class UsageDataset method getDatasets.
/**
* Returns datasets used by an application.
* @param applicationId application
* @return datasets used by applicaionId
*/
public Set<DatasetId> getDatasets(ApplicationId applicationId) {
ProgramId programId = ProgramKeyMaker.getProgramId(applicationId);
OrderedPair<ProgramId, DatasetId> orderedPair = orderedPairs.get(PROGRAM, DATASET);
Map<MDSKey, Boolean> datasetKeys = listKV(orderedPair.makeScanKey(programId), Boolean.TYPE);
return orderedPair.getSecond(datasetKeys.keySet());
}
use of io.cdap.cdap.data2.dataset2.lib.table.MDSKey in project cdap by caskdata.
the class UsageDataset method getStreams.
/**
* Returns streams used by an application.
* @param applicationId application
* @return streams used by applicaionId
*/
public Set<StreamId> getStreams(ApplicationId applicationId) {
ProgramId programId = ProgramKeyMaker.getProgramId(applicationId);
OrderedPair<ProgramId, StreamId> orderedPair = orderedPairs.get(PROGRAM, STREAM);
Map<MDSKey, Boolean> datasetKeys = listKV(orderedPair.makeScanKey(programId), Boolean.TYPE);
return orderedPair.getSecond(datasetKeys.keySet());
}
use of io.cdap.cdap.data2.dataset2.lib.table.MDSKey in project cdap by caskdata.
the class LineageDataset method toRelation.
private Relation toRelation(Row row) {
Map<Character, EntityId> rowInfo = new HashMap<>(4);
MDSKey.Splitter splitter = new MDSKey(row.getRow()).split();
char marker = (char) splitter.getInt();
LOG.trace("Got marker {}", marker);
EntityId id1 = toEntityId(splitter, marker);
LOG.trace("Got id1 {}", id1);
rowInfo.put(marker, id1);
// inverted time - not required for relation
splitter.skipLong();
marker = (char) splitter.getInt();
LOG.trace("Got marker {}", marker);
EntityId id2 = toEntityId(splitter, marker);
LOG.trace("Got id2 {}", id1);
rowInfo.put(marker, id2);
RunId runId = RunIds.fromString(splitter.getString());
LOG.trace("Got runId {}", runId);
AccessType accessType = AccessType.fromType((char) splitter.getInt());
LOG.trace("Got access type {}", accessType);
DatasetId datasetInstance = (DatasetId) rowInfo.get(DATASET_MARKER);
LOG.trace("Got datasetInstance {}", datasetInstance);
StreamId stream = (StreamId) rowInfo.get(STREAM_MARKER);
LOG.trace("Got stream {}", stream);
ProgramId program = (ProgramId) rowInfo.get(PROGRAM_MARKER);
LOG.trace("Got program {}", program);
NamespacedEntityId component = toComponent(splitter, program);
LOG.trace("Got component {}", component);
if (stream == null) {
return new Relation(datasetInstance, program, accessType, runId, component == null ? ImmutableSet.<NamespacedEntityId>of() : ImmutableSet.of((NamespacedEntityId) component));
}
return new Relation(stream, program, accessType, runId, component == null ? ImmutableSet.<NamespacedEntityId>of() : ImmutableSet.of((NamespacedEntityId) component));
}
use of io.cdap.cdap.data2.dataset2.lib.table.MDSKey in project cdap by caskdata.
the class MDSNotificationFeedStore method deleteNotificationFeed.
@Override
public NotificationFeedInfo deleteNotificationFeed(final NotificationFeedId feed) {
return Transactionals.execute(transactional, context -> {
MDSKey feedKey = getKey(TYPE_NOTIFICATION_FEED, feed.getNamespace(), feed.getCategory(), feed.getFeed());
MetadataStoreDataset metaStore = getMetadataStore(context);
NotificationFeedInfo existing = metaStore.getFirst(feedKey, NotificationFeedInfo.class);
if (existing != null) {
metaStore.deleteAll(feedKey);
}
return existing;
});
}
Aggregations