org.rocksdb.WalFilter Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of rocksdbjni Show documentation
Show all versions of rocksdbjni Show documentation
RocksDB fat jar that contains .so files for linux32 and linux64 (glibc and musl-libc), jnilib files
for Mac OSX, and a .dll for Windows x64.
The newest version!
// Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
// This source code is licensed under both the GPLv2 (found in the
// COPYING file in the root directory) and Apache 2.0 License
// (found in the LICENSE.Apache file in the root directory).
package org.rocksdb;
import java.util.Map;
/**
* WALFilter allows an application to inspect write-ahead-log (WAL)
* records or modify their processing on recovery.
*/
public interface WalFilter {
/**
* Provide ColumnFamily->LogNumber map to filter
* so that filter can determine whether a log number applies to a given
* column family (i.e. that log hasn't been flushed to SST already for the
* column family).
*
* We also pass in name>id map as only name is known during
* recovery (as handles are opened post-recovery).
* while write batch callbacks happen in terms of column family id.
*
* @param cfLognumber column_family_id to lognumber map
* @param cfNameId column_family_name to column_family_id map
*/
void columnFamilyLogNumberMap(final Map cfLognumber,
final Map cfNameId);
/**
* LogRecord is invoked for each log record encountered for all the logs
* during replay on logs on recovery. This method can be used to:
* * inspect the record (using the batch parameter)
* * ignoring current record
* (by returning WalProcessingOption::kIgnoreCurrentRecord)
* * reporting corrupted record
* (by returning WalProcessingOption::kCorruptedRecord)
* * stop log replay
* (by returning kStop replay) - please note that this implies
* discarding the logs from current record onwards.
*
* @param logNumber log number of the current log.
* Filter might use this to determine if the log
* record is applicable to a certain column family.
* @param logFileName log file name - only for informational purposes
* @param batch batch encountered in the log during recovery
* @param newBatch new batch to populate if filter wants to change
* the batch (for example to filter some records out, or alter some
* records). Please note that the new batch MUST NOT contain
* more records than original, else recovery would be failed.
*
* @return Processing option for the current record.
*/
LogRecordFoundResult logRecordFound(final long logNumber,
final String logFileName, final WriteBatch batch,
final WriteBatch newBatch);
class LogRecordFoundResult {
public static LogRecordFoundResult CONTINUE_UNCHANGED =
new LogRecordFoundResult(WalProcessingOption.CONTINUE_PROCESSING, false);
final WalProcessingOption walProcessingOption;
final boolean batchChanged;
/**
* @param walProcessingOption the processing option
* @param batchChanged Whether batch was changed by the filter.
* It must be set to true if newBatch was populated,
* else newBatch has no effect.
*/
public LogRecordFoundResult(final WalProcessingOption walProcessingOption,
final boolean batchChanged) {
this.walProcessingOption = walProcessingOption;
this.batchChanged = batchChanged;
}
}
/**
* Returns a name that identifies this WAL filter.
* The name will be printed to LOG file on start up for diagnosis.
*
* @return the name
*/
String name();
}