mirror of
https://github.com/facebook/rocksdb.git
synced 2024-11-26 16:30:56 +00:00
[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_);
|
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
|
* <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
|
* 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,
|
private native void compactRange(long handle, byte[] begin, int beginLen, byte[] end,
|
||||||
int endLen, boolean reduce_level, int target_level, int target_path_id,
|
int endLen, boolean reduce_level, int target_level, int target_path_id,
|
||||||
long cfHandle) throws RocksDBException;
|
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)
|
private native long getUpdatesSince(long handle, long sequenceNumber)
|
||||||
throws RocksDBException;
|
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());
|
String.valueOf(i).getBytes());
|
||||||
}
|
}
|
||||||
db.flush(new FlushOptions().setWaitForFlush(true));
|
db.flush(new FlushOptions().setWaitForFlush(true));
|
||||||
|
|
||||||
|
assertThat(db.getLatestSequenceNumber()).isEqualTo(250);
|
||||||
|
|
||||||
transactionLogIterator = db.getUpdatesSince(0);
|
transactionLogIterator = db.getUpdatesSince(0);
|
||||||
assertThat(transactionLogIterator.isValid()).isTrue();
|
assertThat(transactionLogIterator.isValid()).isTrue();
|
||||||
transactionLogIterator.status();
|
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);
|
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
|
// rocksdb::DB::GetUpdatesSince
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue