@Override public RecordResult readRecord(UUIDKey documentId) throws JasDBStorageException { try { return writer.readRecord(() -> getRecordPointer(documentId)); } catch(RecordNotFoundException e) { return new RecordResultImpl(-1, null, 0, RECORD_FLAG.EMPTY); } }
@Override public RecordWriter<UUIDKey> createWriter(File file) throws JasDBStorageException { return new TransactionalRecordWriter(file); } }
private void loadNextRecord() { try { RecordResultImpl foundRecord; do { foundRecord = recordWriter.readRecord(() -> Optional.of(nextRecordPointer)); nextRecordPointer = nextRecordPointer + foundRecord.getRecordSize(); } while(foundRecord.getRecordFlag() != RECORD_FLAG.ACTIVE && foundRecord.getRecordFlag() != RECORD_FLAG.EMPTY); if(foundRecord.getRecordFlag() == RECORD_FLAG.ACTIVE) { foundRecords++; nextLoadedRecord = foundRecord; } else { nextLoadedRecord = null; } } catch(JasDBStorageException e) { LOG.error("Unable to find next record, error accessing storage", e); } }
@Override public RecordIteratorImpl readAllRecords() throws DatastoreException { return readAllRecords(-1); }
@Override public void removeRecord(UUIDKey documentId) throws JasDBStorageException { writer.removeRecord(() -> getRecordPointer(documentId), p -> { try { index.removeFromIndex(documentId); } catch (JasDBStorageException e) { LOG.error("Unable to remove record from index", e); } }); }
@Override public long addMetadataEntity(Entity entity) throws JasDBStorageException { return writer.writeRecord(SimpleEntity.toJson(entity), null); }
@Override public boolean hasNext() { if(nextLoadedRecord == null) { loadNextRecord(); } return nextLoadedRecord != null && (foundRecords <= limit || limit == -1); }
private void incrementRecordCount() throws DatastoreException { recordCount.incrementAndGet(); writeHeader(); }
@Override public RecordIterator readAllRecords() throws DatastoreException { return readAllRecords(-1); }
@Override public RecordIterator readAllRecords(int limit) throws DatastoreException { return writer.readAllRecords(limit); }
@Override public boolean isOpen() { return this.writer.isOpen(); }
@Override public boolean isRecordFound() { return !isEmpty(); }
@Override public long getDiskSize() throws JasDBStorageException { return this.writer.getDiskSize(); }
@Override public RecordIteratorImpl readAllRecords(int limit) throws DatastoreException { return new RecordIteratorImpl(this, HEADER_SIZE, limit); }
@Override public long getSize() { return this.writer.getSize(); }
@Override public void deleteMetadataEntity(long recordPointer) throws JasDBStorageException { writer.removeRecord(() -> of(recordPointer), null); }
@Override public void closeWriter() throws JasDBStorageException { this.writer.closeWriter(); this.index.close(); }
@Override public RecordResultImpl next() { if(nextLoadedRecord == null) { loadNextRecord(); } RecordResultImpl loadedRecord = nextLoadedRecord; nextLoadedRecord = null; return loadedRecord; }
private void decrementRecordCount() throws DatastoreException { recordCount.decrementAndGet(); writeHeader(); }