1 // Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
2 // This source code is licensed under both the GPLv2 (found in the
3 // COPYING file in the root directory) and Apache 2.0 License
4 // (found in the LICENSE.Apache file in the root directory).
6 // This file implements the callback "bridge" between Java and C++ for
7 // rocksdb::WriteBatch::Handler.
9 #ifndef JAVA_ROCKSJNI_WRITEBATCHHANDLERJNICALLBACK_H_
10 #define JAVA_ROCKSJNI_WRITEBATCHHANDLERJNICALLBACK_H_
15 #include "rocksjni/jnicallback.h"
16 #include "rocksdb/write_batch.h"
20 * This class acts as a bridge between C++
21 * and Java. The methods in this class will be
22 * called back from the RocksDB storage engine (C++)
23 * which calls the appropriate Java method.
24 * This enables Write Batch Handlers to be implemented in Java.
26 class WriteBatchHandlerJniCallback
: public JniCallback
, public WriteBatch::Handler
{
28 WriteBatchHandlerJniCallback(
29 JNIEnv
* env
, jobject jWriteBackHandler
);
30 Status
PutCF(uint32_t column_family_id
, const Slice
& key
,
32 void Put(const Slice
& key
, const Slice
& value
);
33 Status
MergeCF(uint32_t column_family_id
, const Slice
& key
,
35 void Merge(const Slice
& key
, const Slice
& value
);
36 Status
DeleteCF(uint32_t column_family_id
, const Slice
& key
);
37 void Delete(const Slice
& key
);
38 Status
SingleDeleteCF(uint32_t column_family_id
, const Slice
& key
);
39 void SingleDelete(const Slice
& key
);
40 Status
DeleteRangeCF(uint32_t column_family_id
, const Slice
& beginKey
,
42 void DeleteRange(const Slice
& beginKey
, const Slice
& endKey
);
43 void LogData(const Slice
& blob
);
44 Status
PutBlobIndexCF(uint32_t column_family_id
, const Slice
& key
,
46 Status
MarkBeginPrepare(bool);
47 Status
MarkEndPrepare(const Slice
& xid
);
48 Status
MarkNoop(bool empty_batch
);
49 Status
MarkRollback(const Slice
& xid
);
50 Status
MarkCommit(const Slice
& xid
);
55 jmethodID m_jPutCfMethodId
;
56 jmethodID m_jPutMethodId
;
57 jmethodID m_jMergeCfMethodId
;
58 jmethodID m_jMergeMethodId
;
59 jmethodID m_jDeleteCfMethodId
;
60 jmethodID m_jDeleteMethodId
;
61 jmethodID m_jSingleDeleteCfMethodId
;
62 jmethodID m_jSingleDeleteMethodId
;
63 jmethodID m_jDeleteRangeCfMethodId
;
64 jmethodID m_jDeleteRangeMethodId
;
65 jmethodID m_jLogDataMethodId
;
66 jmethodID m_jPutBlobIndexCfMethodId
;
67 jmethodID m_jMarkBeginPrepareMethodId
;
68 jmethodID m_jMarkEndPrepareMethodId
;
69 jmethodID m_jMarkNoopMethodId
;
70 jmethodID m_jMarkRollbackMethodId
;
71 jmethodID m_jMarkCommitMethodId
;
72 jmethodID m_jContinueMethodId
;
74 * @return A pointer to a rocksdb::Status or nullptr if an unexpected exception occurred
76 std::unique_ptr
<rocksdb::Status
> kv_op(const Slice
& key
, const Slice
& value
, std::function
<void(jbyteArray
, jbyteArray
)> kvFn
);
78 * @return A pointer to a rocksdb::Status or nullptr if an unexpected exception occurred
80 std::unique_ptr
<rocksdb::Status
> k_op(const Slice
& key
, std::function
<void(jbyteArray
)> kFn
);
82 } // namespace rocksdb
84 #endif // JAVA_ROCKSJNI_WRITEBATCHHANDLERJNICALLBACK_H_