use of io.cdap.cdap.api.dataset.table.Scanner in project cdap by caskdata.
the class MetadataDataset method deleteIndexes.
/**
* Deletes all indexes associated with a metadata key
*
* @param metadataEntity the {@link MetadataEntity} for which keys are to be removed
* @param metadataKey the key to remove from the metadata of the specified {@link MetadataEntity}
*/
private void deleteIndexes(MetadataEntity metadataEntity, String metadataKey) {
MDSKey mdsKey = MetadataKey.createIndexRowKey(metadataEntity, metadataKey, null);
byte[] startKey = mdsKey.getKey();
byte[] stopKey = Bytes.stopKeyForPrefix(startKey);
try (Scanner scan = indexedTable.scan(startKey, stopKey)) {
Row next;
while ((next = scan.next()) != null) {
deleteIndexRow(next);
}
}
}
use of io.cdap.cdap.api.dataset.table.Scanner in project cdap by caskdata.
the class MetadataDataset method getSnapshotBeforeTime.
private Record getSnapshotBeforeTime(MetadataEntity metadataEntity, long timeMillis) {
byte[] scanStartKey = MetadataHistoryKey.getMDSScanStartKey(metadataEntity, timeMillis).getKey();
byte[] scanEndKey = MetadataHistoryKey.getMDSScanStopKey(metadataEntity).getKey();
// TODO: add limit to scan, we need only one row
try (Scanner scanner = indexedTable.scan(scanStartKey, scanEndKey)) {
Row next = scanner.next();
if (next != null) {
return GSON.fromJson(next.getString(HISTORY_COLUMN), Record.class);
} else {
return new Record(metadataEntity);
}
}
}
use of io.cdap.cdap.api.dataset.table.Scanner in project cdap by caskdata.
the class MetadataStoreDataset method scan.
/**
* Run a scan on MDS for default COLUMN
*
* @param startId scan start key
* @param stopId scan stop key
* @param typeOfT type of value
* @param function function to process each element returned from scan.
* If function.apply returns false then the scan is stopped.
* Also, function.apply should not return null.
* @param <T> type of value
*/
public <T> void scan(MDSKey startId, @Nullable MDSKey stopId, Type typeOfT, Function<KeyValue<T>, Boolean> function) {
byte[] startKey = startId.getKey();
byte[] stopKey = stopId == null ? Bytes.stopKeyForPrefix(startKey) : stopId.getKey();
try (Scanner scan = table.scan(startKey, stopKey)) {
Row next;
while ((next = scan.next()) != null) {
byte[] columnValue = next.get(COLUMN);
if (columnValue == null) {
continue;
}
MDSKey key = new MDSKey(next.getRow());
T value = deserialize(key, columnValue, typeOfT);
// noinspection ConstantConditions
if (!function.apply(new KeyValue<>(key, value))) {
break;
}
}
}
}
use of io.cdap.cdap.api.dataset.table.Scanner in project cdap by caskdata.
the class MetadataStoreDataset method listCombinedFilterKV.
private <T> Map<MDSKey, T> listCombinedFilterKV(Scan runScan, Type typeOfT, int limit, @Nullable Predicate<KeyValue<T>> combinedFilter) {
try {
Map<MDSKey, T> map = Maps.newLinkedHashMap();
try (Scanner scan = table.scan(runScan)) {
Row next;
while ((limit > 0) && (next = scan.next()) != null) {
MDSKey key = new MDSKey(next.getRow());
byte[] columnValue = next.get(COLUMN);
if (columnValue == null) {
continue;
}
T value = deserialize(key, columnValue, typeOfT);
KeyValue<T> kv = new KeyValue<>(key, value);
// Combined Filter doesn't pass
if (combinedFilter != null && !combinedFilter.test(kv)) {
continue;
}
map.put(kv.getKey(), kv.getValue());
limit--;
}
return map;
}
} catch (Exception e) {
throw Throwables.propagate(e);
}
}
use of io.cdap.cdap.api.dataset.table.Scanner in project cdap by caskdata.
the class MetadataStoreDataset method getFirst.
/**
* Get the first element in the row and default COLUMN, of type T
*
* @param id the mds key for the row
* @param typeOfT the type of the result
* @return the deserialized value of the result, null if not exist
*/
@Nullable
public <T> T getFirst(MDSKey id, Type typeOfT) {
try {
try (Scanner scan = table.scan(id.getKey(), Bytes.stopKeyForPrefix(id.getKey()))) {
Row row = scan.next();
if (row == null || row.isEmpty()) {
return null;
}
byte[] value = row.get(COLUMN);
if (value == null) {
return null;
}
return deserialize(id, value, typeOfT);
}
} catch (Exception e) {
throw Throwables.propagate(e);
}
}
Aggregations