private Map<Cell, Value> runReadAndExtractResults( TableReference tableRef, Function<DbReadTable, ClosableIterator<AgnosticLightResultRow>> query) { return runRead(tableRef, table -> extractResults(table, tableRef, query.apply(table))); }
private void putIfNotUpdate( DbReadTable readTable, DbWriteTable writeTable, TableReference tableRef, List<Entry<Cell, Value>> batch, KeyAlreadyExistsException ex) { Map<Cell, Long> timestampByCell = Maps.newHashMap(); for (Entry<Cell, Value> entry : batch) { timestampByCell.put(entry.getKey(), entry.getValue().getTimestamp() + 1); } Map<Cell, Value> results = extractResults(readTable, tableRef, readTable.getLatestCells(timestampByCell, true)); ListIterator<Entry<Cell, Value>> iter = batch.listIterator(); while (iter.hasNext()) { Entry<Cell, Value> entry = iter.next(); Cell key = entry.getKey(); Value value = entry.getValue(); if (results.containsKey(key)) { if (results.get(key).equals(value)) { iter.remove(); } else { throw new KeyAlreadyExistsException( "primary key violation for key " + key + " with value " + value, ex); } } } writeTable.put(batch); }
private Map<Cell, Value> runReadAndExtractResults( TableReference tableRef, Function<DbReadTable, ClosableIterator<AgnosticLightResultRow>> query) { return runRead(tableRef, table -> extractResults(table, tableRef, query.apply(table))); }
private void putIfNotUpdate( DbReadTable readTable, DbWriteTable writeTable, TableReference tableRef, List<Entry<Cell, Value>> batch, KeyAlreadyExistsException ex) { Map<Cell, Long> timestampByCell = Maps.newHashMap(); for (Entry<Cell, Value> entry : batch) { timestampByCell.put(entry.getKey(), entry.getValue().getTimestamp() + 1); } Map<Cell, Value> results = extractResults(readTable, tableRef, readTable.getLatestCells(timestampByCell, true)); ListIterator<Entry<Cell, Value>> iter = batch.listIterator(); while (iter.hasNext()) { Entry<Cell, Value> entry = iter.next(); Cell key = entry.getKey(); Value value = entry.getValue(); if (results.containsKey(key)) { if (results.get(key).equals(value)) { iter.remove(); } else { throw new KeyAlreadyExistsException( "primary key violation for key " + key + " with value " + value, ex); } } } writeTable.put(batch); }