/** * @return a set of entities (program and data it accesses) associated with a program run. */ public Set<NamespacedEntityId> getEntitiesForRun(ProgramRunId run) { ImmutableSet.Builder<NamespacedEntityId> recordBuilder = ImmutableSet.builder(); byte[] startKey = getRunScanStartKey(run); try (Scanner scanner = accessRegistryTable.scan(startKey, Bytes.stopKeyForPrefix(startKey))) { Row row; while ((row = scanner.next()) != null) { if (LOG.isTraceEnabled()) { LOG.trace("Got row key = {}", Bytes.toString(row.getRow())); } RowKey rowKey = parseRow(row); if (run.getEntityName().equals(rowKey.getRunId().getId())) { recordBuilder.add(rowKey.getProgram()); recordBuilder.add(rowKey.getData()); } } } return recordBuilder.build(); }
private RowKey parseRow(Row row) { ProgramId program; NamespacedEntityId data; RunId runId; MDSKey.Splitter splitter = new MDSKey(row.getRow()).split(); char marker = (char) splitter.getInt(); LOG.trace("Got marker {}", marker); switch (marker) { case PROGRAM_MARKER: program = (ProgramId) toEntityId(splitter, marker); splitter.skipLong(); // inverted start time marker = (char) splitter.getInt(); data = toEntityId(splitter, marker); // data runId = RunIds.fromString(splitter.getString()); return new RowKey(program, data, runId); case DATASET_MARKER: case STREAM_MARKER: data = toEntityId(splitter, marker); splitter.skipLong(); // inverted start time marker = (char) splitter.getInt(); program = (ProgramId) toEntityId(splitter, marker); // program runId = RunIds.fromString(splitter.getString()); return new RowKey(program, data, runId); default: throw new IllegalStateException("Invalid row with marker " + marker); } }
private RowKey parseRow(Row row) { ProgramId program; NamespacedEntityId data; RunId runId; MDSKey.Splitter splitter = new MDSKey(row.getRow()).split(); char marker = (char) splitter.getInt(); LOG.trace("Got marker {}", marker); switch (marker) { case PROGRAM_MARKER: program = (ProgramId) toEntityId(splitter, marker); splitter.skipLong(); // inverted start time marker = (char) splitter.getInt(); data = toEntityId(splitter, marker); // data runId = RunIds.fromString(splitter.getString()); return new RowKey(program, data, runId); case DATASET_MARKER: data = toEntityId(splitter, marker); splitter.skipLong(); // inverted start time marker = (char) splitter.getInt(); program = (ProgramId) toEntityId(splitter, marker); // program runId = RunIds.fromString(splitter.getString()); return new RowKey(program, data, runId); default: throw new IllegalStateException("Invalid row with marker " + marker); } }
/** * @return a set of entities (program and data it accesses) associated with a program run. */ public Set<NamespacedEntityId> getEntitiesForRun(ProgramRunId run) { ImmutableSet.Builder<NamespacedEntityId> recordBuilder = ImmutableSet.builder(); byte[] startKey = getRunScanStartKey(run); try (Scanner scanner = accessRegistryTable.scan(startKey, Bytes.stopKeyForPrefix(startKey))) { Row row; while ((row = scanner.next()) != null) { if (LOG.isTraceEnabled()) { LOG.trace("Got row key = {}", Bytes.toString(row.getRow())); } RowKey rowKey = parseRow(row); if (run.getEntityName().equals(rowKey.getRunId().getId())) { recordBuilder.add(rowKey.getProgram()); recordBuilder.add(rowKey.getData()); } } } return recordBuilder.build(); }
/** * @return a set of access times (for program and data it accesses) associated with a program run. */ @VisibleForTesting public List<Long> getAccessTimesForRun(ProgramRunId run) { ImmutableList.Builder<Long> recordBuilder = ImmutableList.builder(); byte[] startKey = getRunScanStartKey(run); try (Scanner scanner = accessRegistryTable.scan(startKey, Bytes.stopKeyForPrefix(startKey))) { Row row; while ((row = scanner.next()) != null) { if (LOG.isTraceEnabled()) { LOG.trace("Got row key = {}", Bytes.toString(row.getRow())); } RowKey rowKey = parseRow(row); if (run.getEntityName().equals(rowKey.getRunId().getId())) { recordBuilder.add(Bytes.toLong(row.get(ACCESS_TIME_COLS_BYTE))); } } } return recordBuilder.build(); }
/** * @return a set of access times (for program and data it accesses) associated with a program run. */ @VisibleForTesting public List<Long> getAccessTimesForRun(ProgramRunId run) { ImmutableList.Builder<Long> recordBuilder = ImmutableList.builder(); byte[] startKey = getRunScanStartKey(run); try (Scanner scanner = accessRegistryTable.scan(startKey, Bytes.stopKeyForPrefix(startKey))) { Row row; while ((row = scanner.next()) != null) { if (LOG.isTraceEnabled()) { LOG.trace("Got row key = {}", Bytes.toString(row.getRow())); } RowKey rowKey = parseRow(row); if (run.getEntityName().equals(rowKey.getRunId().getId())) { recordBuilder.add(Bytes.toLong(row.get(ACCESS_TIME_COLS_BYTE))); } } } return recordBuilder.build(); }