@Override public void removeRecord(Supplier<Optional<Long>> recordPointerSupplier, Consumer<Long> postRemoveAction) throws DatastoreException { lock.lock(); try { long recordPointer = recordPointerSupplier.get().orElseThrow(() -> new RecordNotFoundException("Unable to remove record, could not be found")); ByteBuffer recordHeader = ByteBuffer.allocate(RECORD_HEADER_SIZE); int read = channel.read(recordHeader, recordPointer); if(read != -1) { recordHeader.putInt(HEADER_RECORD_FLAG, RECORD_FLAG.DELETED.getFlag()); recordHeader.flip(); channel.write(recordHeader, recordPointer); LOG.debug("Flagged record: {} for deletion", recordPointer); decrementRecordCount(); } if(postRemoveAction != null) { LOG.debug("Executing post remove action for record: {}", recordPointer); postRemoveAction.accept(recordPointer); } } catch(IOException e) { LOG.error("Unable to remove record from storage", e); } finally { lock.unlock(); } }