private CloseableIterator<TopicMetadata> scanTopics(@Nullable byte[] startKey, @Nullable byte[] stopKey) throws IOException { final CloseableIterator<Map.Entry<byte[], byte[]>> iterator = new DBScanIterator(levelDB, startKey, stopKey); return new AbstractCloseableIterator<TopicMetadata>() { private boolean closed = false; @Override protected TopicMetadata computeNext() { if (closed || (!iterator.hasNext())) { return endOfData(); } Map.Entry<byte[], byte[]> entry = iterator.next(); TopicId topicId = MessagingUtils.toTopicId(entry.getKey()); Map<String, String> properties = GSON.fromJson(Bytes.toString(entry.getValue()), MAP_TYPE); return new TopicMetadata(topicId, properties); } @Override public void close() { try { iterator.close(); } finally { endOfData(); closed = true; } } }; }
@Override public void close() { try { iterator.close(); } finally { endOfData(); closed = true; } } };
@Override public void close() { try { iterator.close(); } catch (IOException e) { throw Throwables.propagate(e); } finally { endOfData(); closed = true; } } }
@Override protected RawMessageTableEntry computeNext() { if (closed || (!iterator.hasNext())) { return endOfData(); } Map.Entry<byte[], byte[]> row = iterator.next(); Map<String, byte[]> columns = decodeValue(row.getValue()); return tableEntry.set(row.getKey(), columns.get(TX_COL), columns.get(PAYLOAD_COL)); }
@Override protected RawMessageTableEntry computeNext() { if (closed || (!iterator.hasNext())) { return endOfData(); } Map.Entry<byte[], byte[]> row = iterator.next(); Map<String, byte[]> columns = decodeValue(row.getValue()); return tableEntry.set(row.getKey(), columns.get(TX_COL), columns.get(PAYLOAD_COL)); }
private CloseableIterator<TopicMetadata> scanTopics(@Nullable byte[] startKey, @Nullable byte[] stopKey) throws IOException { final CloseableIterator<Map.Entry<byte[], byte[]>> iterator = new DBScanIterator(levelDB, startKey, stopKey); return new AbstractCloseableIterator<TopicMetadata>() { private boolean closed = false; @Override protected TopicMetadata computeNext() { if (closed || (!iterator.hasNext())) { return endOfData(); } Map.Entry<byte[], byte[]> entry = iterator.next(); TopicId topicId = MessagingUtils.toTopicId(entry.getKey()); Map<String, String> properties = GSON.fromJson(Bytes.toString(entry.getValue()), MAP_TYPE); return new TopicMetadata(topicId, properties); } @Override public void close() { try { iterator.close(); } finally { endOfData(); closed = true; } } }; }
@Override public void close() { try { iterator.close(); } finally { endOfData(); closed = true; } } };
@Override public void close() { try { iterator.close(); } catch (IOException e) { throw Throwables.propagate(e); } finally { endOfData(); closed = true; } } }
@Override protected CloseableIterator<RawMessageTableEntry> read(byte[] startRow, byte[] stopRow) throws IOException { final DBScanIterator iterator = new DBScanIterator(levelDB, startRow, stopRow); final RawMessageTableEntry tableEntry = new RawMessageTableEntry(); return new AbstractCloseableIterator<RawMessageTableEntry>() { private boolean closed = false; @Override protected RawMessageTableEntry computeNext() { if (closed || (!iterator.hasNext())) { return endOfData(); } Map.Entry<byte[], byte[]> row = iterator.next(); Map<String, byte[]> columns = decodeValue(row.getValue()); return tableEntry.set(row.getKey(), columns.get(TX_COL), columns.get(PAYLOAD_COL)); } @Override public void close() { try { iterator.close(); } finally { endOfData(); closed = true; } } }; }
@Override public void close() { try { iterator.close(); } finally { endOfData(); closed = true; } } };
@Override protected CloseableIterator<RawMessageTableEntry> read(byte[] startRow, byte[] stopRow) throws IOException { final DBScanIterator iterator = new DBScanIterator(levelDB, startRow, stopRow); final RawMessageTableEntry tableEntry = new RawMessageTableEntry(); return new AbstractCloseableIterator<RawMessageTableEntry>() { private boolean closed = false; @Override protected RawMessageTableEntry computeNext() { if (closed || (!iterator.hasNext())) { return endOfData(); } Map.Entry<byte[], byte[]> row = iterator.next(); Map<String, byte[]> columns = decodeValue(row.getValue()); return tableEntry.set(row.getKey(), columns.get(TX_COL), columns.get(PAYLOAD_COL)); } @Override public void close() { try { iterator.close(); } finally { endOfData(); closed = true; } } }; }
@Override public void close() { try { iterator.close(); } finally { endOfData(); closed = true; } } };
@Override protected CloseableIterator<RawPayloadTableEntry> read(byte[] startRow, byte[] stopRow, final int limit) throws IOException { final DBScanIterator iterator = new DBScanIterator(levelDB, startRow, stopRow); return new AbstractCloseableIterator<RawPayloadTableEntry>() { private final RawPayloadTableEntry tableEntry = new RawPayloadTableEntry(); private boolean closed = false; private int maxLimit = limit; @Override protected RawPayloadTableEntry computeNext() { if (closed || maxLimit <= 0 || (!iterator.hasNext())) { return endOfData(); } Map.Entry<byte[], byte[]> row = iterator.next(); maxLimit--; return tableEntry.set(row.getKey(), row.getValue()); } @Override public void close() { try { iterator.close(); } finally { endOfData(); closed = true; } } }; }
@Override protected CloseableIterator<RawPayloadTableEntry> read(byte[] startRow, byte[] stopRow, final int limit) throws IOException { final DBScanIterator iterator = new DBScanIterator(levelDB, startRow, stopRow); return new AbstractCloseableIterator<RawPayloadTableEntry>() { private final RawPayloadTableEntry tableEntry = new RawPayloadTableEntry(); private boolean closed = false; private int maxLimit = limit; @Override protected RawPayloadTableEntry computeNext() { if (closed || maxLimit <= 0 || (!iterator.hasNext())) { return endOfData(); } Map.Entry<byte[], byte[]> row = iterator.next(); maxLimit--; return tableEntry.set(row.getKey(), row.getValue()); } @Override public void close() { try { iterator.close(); } finally { endOfData(); closed = true; } } }; }
@Override protected void rollback(byte[] startKey, byte[] stopKey, byte[] txWritePtr) throws IOException { WriteBatch writeBatch = levelDB.createWriteBatch(); try (CloseableIterator<Map.Entry<byte[], byte[]>> rowIterator = new DBScanIterator(levelDB, startKey, stopKey)) { while (rowIterator.hasNext()) { Map.Entry<byte[], byte[]> rowValue = rowIterator.next(); byte[] value = rowValue.getValue(); Map<String, byte[]> columns = decodeValue(value); writeBatch.put(rowValue.getKey(), encodeValue(txWritePtr, columns.get(PAYLOAD_COL))); } } try { levelDB.write(writeBatch, WRITE_OPTIONS); } catch (DBException ex) { throw new IOException(ex); } }
@Override protected void rollback(byte[] startKey, byte[] stopKey, byte[] txWritePtr) throws IOException { WriteBatch writeBatch = levelDB.createWriteBatch(); try (CloseableIterator<Map.Entry<byte[], byte[]>> rowIterator = new DBScanIterator(levelDB, startKey, stopKey)) { while (rowIterator.hasNext()) { Map.Entry<byte[], byte[]> rowValue = rowIterator.next(); byte[] value = rowValue.getValue(); Map<String, byte[]> columns = decodeValue(value); writeBatch.put(rowValue.getKey(), encodeValue(txWritePtr, columns.get(PAYLOAD_COL))); } } try { levelDB.write(writeBatch, WRITE_OPTIONS); } catch (DBException ex) { throw new IOException(ex); } }