mirror of https://github.com/facebook/rocksdb.git
[RocksJava] enable/disable File deletions
This commit is contained in:
parent
9a456fba20
commit
b39006e3db
|
@ -1588,6 +1588,53 @@ public class RocksDB extends RocksObject {
|
|||
columnFamilyHandle.nativeHandle_);
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>The sequence number of the most recent transaction.</p>
|
||||
*
|
||||
* @return sequence number of the most
|
||||
* recent transaction.
|
||||
*/
|
||||
public long getLatestSequenceNumber() {
|
||||
return getLatestSequenceNumber(nativeHandle_);
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Prevent file deletions. Compactions will continue to occur,
|
||||
* but no obsolete files will be deleted. Calling this multiple
|
||||
* times have the same effect as calling it once.</p>
|
||||
*
|
||||
* @throws RocksDBException thrown if operation was not performed
|
||||
* successfully.
|
||||
*/
|
||||
public void disableFileDeletions() throws RocksDBException {
|
||||
disableFileDeletions(nativeHandle_);
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Allow compactions to delete obsolete files.
|
||||
* If force == true, the call to EnableFileDeletions()
|
||||
* will guarantee that file deletions are enabled after
|
||||
* the call, even if DisableFileDeletions() was called
|
||||
* multiple times before.</p>
|
||||
*
|
||||
* <p>If force == false, EnableFileDeletions will only
|
||||
* enable file deletion after it's been called at least
|
||||
* as many times as DisableFileDeletions(), enabling
|
||||
* the two methods to be called by two threads
|
||||
* concurrently without synchronization
|
||||
* -- i.e., file deletions will be enabled only after both
|
||||
* threads call EnableFileDeletions()</p>
|
||||
*
|
||||
* @param force boolean value described above.
|
||||
*
|
||||
* @throws RocksDBException thrown if operation was not performed
|
||||
* successfully.
|
||||
*/
|
||||
public void enableFileDeletions(boolean force)
|
||||
throws RocksDBException {
|
||||
enableFileDeletions(nativeHandle_, force);
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Returns an iterator that is positioned at a write-batch containing
|
||||
* seq_number. If the sequence number is non existent, it returns an iterator
|
||||
|
@ -1753,6 +1800,11 @@ public class RocksDB extends RocksObject {
|
|||
private native void compactRange(long handle, byte[] begin, int beginLen, byte[] end,
|
||||
int endLen, boolean reduce_level, int target_level, int target_path_id,
|
||||
long cfHandle) throws RocksDBException;
|
||||
private native long getLatestSequenceNumber(long handle);
|
||||
private native void disableFileDeletions(long handle)
|
||||
throws RocksDBException;
|
||||
private native void enableFileDeletions(long handle,
|
||||
boolean force) throws RocksDBException;
|
||||
private native long getUpdatesSince(long handle, long sequenceNumber)
|
||||
throws RocksDBException;
|
||||
|
||||
|
|
|
@ -738,4 +738,25 @@ public class RocksDBTest {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void enableDisableFileDeletions() throws RocksDBException {
|
||||
RocksDB db = null;
|
||||
Options options = null;
|
||||
try {
|
||||
options = new Options().setCreateIfMissing(true);
|
||||
db = RocksDB.open(options, dbFolder.getRoot().getAbsolutePath());
|
||||
db.disableFileDeletions();
|
||||
db.enableFileDeletions(false);
|
||||
db.disableFileDeletions();
|
||||
db.enableFileDeletions(true);
|
||||
} finally {
|
||||
if (db != null) {
|
||||
db.close();
|
||||
}
|
||||
if (options != null) {
|
||||
options.dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -57,6 +57,9 @@ public class TransactionLogIteratorTest {
|
|||
String.valueOf(i).getBytes());
|
||||
}
|
||||
db.flush(new FlushOptions().setWaitForFlush(true));
|
||||
|
||||
assertThat(db.getLatestSequenceNumber()).isEqualTo(250);
|
||||
|
||||
transactionLogIterator = db.getUpdatesSince(0);
|
||||
assertThat(transactionLogIterator.isValid()).isTrue();
|
||||
transactionLogIterator.status();
|
||||
|
|
|
@ -1601,6 +1601,51 @@ void Java_org_rocksdb_RocksDB_compactRange__J_3BI_3BIZIIJ(
|
|||
jend, jend_len, jreduce_level, jtarget_level, jtarget_path_id);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// rocksdb::DB::GetLatestSequenceNumber
|
||||
|
||||
/*
|
||||
* Class: org_rocksdb_RocksDB
|
||||
* Method: getLatestSequenceNumber
|
||||
* Signature: (J)V
|
||||
*/
|
||||
jlong Java_org_rocksdb_RocksDB_getLatestSequenceNumber(JNIEnv* env,
|
||||
jobject jdb, jlong jdb_handle) {
|
||||
auto db = reinterpret_cast<rocksdb::DB*>(jdb_handle);
|
||||
return db->GetLatestSequenceNumber();
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// rocksdb::DB enable/disable file deletions
|
||||
|
||||
/*
|
||||
* Class: org_rocksdb_RocksDB
|
||||
* Method: enableFileDeletions
|
||||
* Signature: (J)V
|
||||
*/
|
||||
void Java_org_rocksdb_RocksDB_disableFileDeletions(JNIEnv* env,
|
||||
jobject jdb, jlong jdb_handle) {
|
||||
auto db = reinterpret_cast<rocksdb::DB*>(jdb_handle);
|
||||
rocksdb::Status s = db->DisableFileDeletions();
|
||||
if (!s.ok()) {
|
||||
rocksdb::RocksDBExceptionJni::ThrowNew(env, s);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Class: org_rocksdb_RocksDB
|
||||
* Method: enableFileDeletions
|
||||
* Signature: (JZ)V
|
||||
*/
|
||||
void Java_org_rocksdb_RocksDB_enableFileDeletions(JNIEnv* env,
|
||||
jobject jdb, jlong jdb_handle, jboolean jforce) {
|
||||
auto db = reinterpret_cast<rocksdb::DB*>(jdb_handle);
|
||||
rocksdb::Status s = db->EnableFileDeletions(jforce);
|
||||
if (!s.ok()) {
|
||||
rocksdb::RocksDBExceptionJni::ThrowNew(env, s);
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// rocksdb::DB::GetUpdatesSince
|
||||
|
||||
|
|
Loading…
Reference in New Issue