static SnapshotsStreamIdxTable of(Transaction t, Namespace namespace, List<SnapshotsStreamIdxTrigger> triggers) { return new SnapshotsStreamIdxTable(t, namespace, triggers); }
@Override public void touch(Multimap<SnapshotsStreamIdxRow, SnapshotsStreamIdxColumn> values) { Multimap<SnapshotsStreamIdxRow, SnapshotsStreamIdxColumnValue> currentValues = get(values); put(currentValues); Multimap<SnapshotsStreamIdxRow, SnapshotsStreamIdxColumn> toDelete = HashMultimap.create(values); for (Map.Entry<SnapshotsStreamIdxRow, SnapshotsStreamIdxColumnValue> e : currentValues.entries()) { toDelete.remove(e.getKey(), e.getValue().getColumnName()); } delete(toDelete); }
public BatchingVisitableView<SnapshotsStreamIdxRowResult> getAllRowsUnordered() { return getAllRowsUnordered(allColumns); }
@Override public void delete(Iterable<SnapshotsStreamIdxRow> rows) { Multimap<SnapshotsStreamIdxRow, SnapshotsStreamIdxColumn> toRemove = HashMultimap.create(); Multimap<SnapshotsStreamIdxRow, SnapshotsStreamIdxColumnValue> result = getRowsMultimap(rows); for (Entry<SnapshotsStreamIdxRow, SnapshotsStreamIdxColumnValue> e : result.entries()) { toRemove.put(e.getKey(), e.getValue().getColumnName()); } delete(toRemove); }
@Override public Iterator<Map.Entry<SnapshotsStreamIdxRow, SnapshotsStreamIdxColumnValue>> getRowsColumnRange(Iterable<SnapshotsStreamIdxRow> rows, ColumnRangeSelection columnRangeSelection, int batchHint) { Iterator<Map.Entry<Cell, byte[]>> results = t.getRowsColumnRange(getTableRef(), Persistables.persistAll(rows), columnRangeSelection, batchHint); return Iterators.transform(results, e -> { SnapshotsStreamIdxRow row = SnapshotsStreamIdxRow.BYTES_HYDRATOR.hydrateFromBytes(e.getKey().getRowName()); SnapshotsStreamIdxColumn col = SnapshotsStreamIdxColumn.BYTES_HYDRATOR.hydrateFromBytes(e.getKey().getColumnName()); Long val = SnapshotsStreamIdxColumnValue.hydrateValue(e.getValue()); SnapshotsStreamIdxColumnValue colValue = SnapshotsStreamIdxColumnValue.of(col, val); return Maps.immutableEntry(row, colValue); }); }
@Override public void delete(SnapshotsStreamIdxRow row, SnapshotsStreamIdxColumn column) { delete(ImmutableMultimap.of(row, column)); }
private Multimap<SnapshotsStreamIdxRow, SnapshotsStreamIdxColumnValue> getRowsMultimapInternal(Iterable<SnapshotsStreamIdxRow> rows, ColumnSelection columns) { SortedMap<byte[], RowResult<byte[]>> results = t.getRows(tableRef, Persistables.persistAll(rows), columns); return getRowMapFromRowResults(results.values()); }
@Override public List<SnapshotsStreamIdxColumnValue> getRowColumns(SnapshotsStreamIdxRow row) { return getRowColumns(row, allColumns); }
public static ColumnSelection getColumnSelection(SnapshotsStreamIdxColumn... cols) { return getColumnSelection(Arrays.asList(cols)); }
@Override public boolean cellsCleanedUp(Transaction t, Set<Cell> cells) { SnapshotsStreamIdxTable usersIndex = tables.getSnapshotsStreamIdxTable(t); Set<SnapshotsStreamIdxTable.SnapshotsStreamIdxRow> rows = Sets.newHashSetWithExpectedSize(cells.size()); for (Cell cell : cells) { rows.add(SnapshotsStreamIdxTable.SnapshotsStreamIdxRow.BYTES_HYDRATOR.hydrateFromBytes(cell.getRowName())); } BatchColumnRangeSelection oneColumn = BatchColumnRangeSelection.create( PtBytes.EMPTY_BYTE_ARRAY, PtBytes.EMPTY_BYTE_ARRAY, 1); Map<SnapshotsStreamIdxTable.SnapshotsStreamIdxRow, BatchingVisitable<SnapshotsStreamIdxTable.SnapshotsStreamIdxColumnValue>> existentRows = usersIndex.getRowsColumnRange(rows, oneColumn); Set<SnapshotsStreamIdxTable.SnapshotsStreamIdxRow> rowsInDb = Sets.newHashSetWithExpectedSize(cells.size()); for (Map.Entry<SnapshotsStreamIdxTable.SnapshotsStreamIdxRow, BatchingVisitable<SnapshotsStreamIdxTable.SnapshotsStreamIdxColumnValue>> rowVisitable : existentRows.entrySet()) { rowVisitable.getValue().batchAccept(1, columnValues -> { if (!columnValues.isEmpty()) { rowsInDb.add(rowVisitable.getKey()); } return false; }); } Set<Long> toDelete = Sets.newHashSetWithExpectedSize(rows.size() - rowsInDb.size()); for (SnapshotsStreamIdxTable.SnapshotsStreamIdxRow rowToDelete : Sets.difference(rows, rowsInDb)) { toDelete.add(rowToDelete.getId()); } SnapshotsStreamStore.of(tables).deleteStreams(t, toDelete); return false; } }
@Override public void delete(Iterable<SnapshotsStreamIdxRow> rows) { Multimap<SnapshotsStreamIdxRow, SnapshotsStreamIdxColumn> toRemove = HashMultimap.create(); Multimap<SnapshotsStreamIdxRow, SnapshotsStreamIdxColumnValue> result = getRowsMultimap(rows); for (Entry<SnapshotsStreamIdxRow, SnapshotsStreamIdxColumnValue> e : result.entries()) { toRemove.put(e.getKey(), e.getValue().getColumnName()); } delete(toRemove); }
public SweepResults sweepSnapshotIndices() { TodoSchemaTableFactory tableFactory = TodoSchemaTableFactory.of(Namespace.DEFAULT_NAMESPACE); TableReference indexTable = tableFactory.getSnapshotsStreamIdxTable(null).getTableRef(); return sweepTable(indexTable); }
@Override public void unmarkStreamsAsUsed(Transaction t, final Map<Long, byte[]> streamIdsToReference) { if (streamIdsToReference.isEmpty()) { return; } SnapshotsStreamIdxTable index = tables.getSnapshotsStreamIdxTable(t); Multimap<SnapshotsStreamIdxTable.SnapshotsStreamIdxRow, SnapshotsStreamIdxTable.SnapshotsStreamIdxColumn> toDelete = ArrayListMultimap.create(streamIdsToReference.size(), 1); for (Map.Entry<Long, byte[]> entry : streamIdsToReference.entrySet()) { Long streamId = entry.getKey(); byte[] reference = entry.getValue(); SnapshotsStreamIdxTable.SnapshotsStreamIdxColumn col = SnapshotsStreamIdxTable.SnapshotsStreamIdxColumn.of(reference); toDelete.put(SnapshotsStreamIdxTable.SnapshotsStreamIdxRow.of(streamId), col); } index.delete(toDelete); }
private Multimap<SnapshotsStreamIdxRow, SnapshotsStreamIdxColumnValue> getRowsMultimapInternal(Iterable<SnapshotsStreamIdxRow> rows, ColumnSelection columns) { SortedMap<byte[], RowResult<byte[]>> results = t.getRows(tableRef, Persistables.persistAll(rows), columns); return getRowMapFromRowResults(results.values()); }
@Override public List<SnapshotsStreamIdxColumnValue> getRowColumns(SnapshotsStreamIdxRow row) { return getRowColumns(row, allColumns); }
public static ColumnSelection getColumnSelection(SnapshotsStreamIdxColumn... cols) { return getColumnSelection(Arrays.asList(cols)); }
@Override public boolean cellsCleanedUp(Transaction t, Set<Cell> cells) { SnapshotsStreamIdxTable usersIndex = tables.getSnapshotsStreamIdxTable(t); Set<SnapshotsStreamIdxTable.SnapshotsStreamIdxRow> rows = Sets.newHashSetWithExpectedSize(cells.size()); for (Cell cell : cells) { rows.add(SnapshotsStreamIdxTable.SnapshotsStreamIdxRow.BYTES_HYDRATOR.hydrateFromBytes(cell.getRowName())); } BatchColumnRangeSelection oneColumn = BatchColumnRangeSelection.create( PtBytes.EMPTY_BYTE_ARRAY, PtBytes.EMPTY_BYTE_ARRAY, 1); Map<SnapshotsStreamIdxTable.SnapshotsStreamIdxRow, BatchingVisitable<SnapshotsStreamIdxTable.SnapshotsStreamIdxColumnValue>> existentRows = usersIndex.getRowsColumnRange(rows, oneColumn); Set<SnapshotsStreamIdxTable.SnapshotsStreamIdxRow> rowsInDb = Sets.newHashSetWithExpectedSize(cells.size()); for (Map.Entry<SnapshotsStreamIdxTable.SnapshotsStreamIdxRow, BatchingVisitable<SnapshotsStreamIdxTable.SnapshotsStreamIdxColumnValue>> rowVisitable : existentRows.entrySet()) { rowVisitable.getValue().batchAccept(1, columnValues -> { if (!columnValues.isEmpty()) { rowsInDb.add(rowVisitable.getKey()); } return false; }); } Set<Long> toDelete = Sets.newHashSetWithExpectedSize(rows.size() - rowsInDb.size()); for (SnapshotsStreamIdxTable.SnapshotsStreamIdxRow rowToDelete : Sets.difference(rows, rowsInDb)) { toDelete.add(rowToDelete.getId()); } SnapshotsStreamStore.of(tables).deleteStreams(t, toDelete); return false; } }
@Override public void touch(Multimap<SnapshotsStreamIdxRow, SnapshotsStreamIdxColumn> values) { Multimap<SnapshotsStreamIdxRow, SnapshotsStreamIdxColumnValue> currentValues = get(values); put(currentValues); Multimap<SnapshotsStreamIdxRow, SnapshotsStreamIdxColumn> toDelete = HashMultimap.create(values); for (Map.Entry<SnapshotsStreamIdxRow, SnapshotsStreamIdxColumnValue> e : currentValues.entries()) { toDelete.remove(e.getKey(), e.getValue().getColumnName()); } delete(toDelete); }
@Override public Iterator<Map.Entry<SnapshotsStreamIdxRow, SnapshotsStreamIdxColumnValue>> getRowsColumnRange(Iterable<SnapshotsStreamIdxRow> rows, ColumnRangeSelection columnRangeSelection, int batchHint) { Iterator<Map.Entry<Cell, byte[]>> results = t.getRowsColumnRange(getTableRef(), Persistables.persistAll(rows), columnRangeSelection, batchHint); return Iterators.transform(results, e -> { SnapshotsStreamIdxRow row = SnapshotsStreamIdxRow.BYTES_HYDRATOR.hydrateFromBytes(e.getKey().getRowName()); SnapshotsStreamIdxColumn col = SnapshotsStreamIdxColumn.BYTES_HYDRATOR.hydrateFromBytes(e.getKey().getColumnName()); Long val = SnapshotsStreamIdxColumnValue.hydrateValue(e.getValue()); SnapshotsStreamIdxColumnValue colValue = SnapshotsStreamIdxColumnValue.of(col, val); return Maps.immutableEntry(row, colValue); }); }
static SnapshotsStreamIdxTable of(Transaction t, Namespace namespace) { return new SnapshotsStreamIdxTable(t, namespace, ImmutableList.<SnapshotsStreamIdxTrigger>of()); }