]> git.proxmox.com Git - ceph.git/blob - ceph/src/rocksdb/java/rocksjni/writebatchhandlerjnicallback.h
update sources to ceph Nautilus 14.2.1
[ceph.git] / ceph / src / rocksdb / java / rocksjni / writebatchhandlerjnicallback.h
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).
5 //
6 // This file implements the callback "bridge" between Java and C++ for
7 // rocksdb::WriteBatch::Handler.
8
9 #ifndef JAVA_ROCKSJNI_WRITEBATCHHANDLERJNICALLBACK_H_
10 #define JAVA_ROCKSJNI_WRITEBATCHHANDLERJNICALLBACK_H_
11
12 #include <functional>
13 #include <jni.h>
14 #include <memory>
15 #include "rocksjni/jnicallback.h"
16 #include "rocksdb/write_batch.h"
17
18 namespace rocksdb {
19 /**
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.
25 */
26 class WriteBatchHandlerJniCallback : public JniCallback, public WriteBatch::Handler {
27 public:
28 WriteBatchHandlerJniCallback(
29 JNIEnv* env, jobject jWriteBackHandler);
30 Status PutCF(uint32_t column_family_id, const Slice& key,
31 const Slice& value);
32 void Put(const Slice& key, const Slice& value);
33 Status MergeCF(uint32_t column_family_id, const Slice& key,
34 const Slice& value);
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,
41 const Slice& endKey);
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,
45 const Slice& value);
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);
51 bool Continue();
52
53 private:
54 JNIEnv* m_env;
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;
73 /**
74 * @return A pointer to a rocksdb::Status or nullptr if an unexpected exception occurred
75 */
76 std::unique_ptr<rocksdb::Status> kv_op(const Slice& key, const Slice& value, std::function<void(jbyteArray, jbyteArray)> kvFn);
77 /**
78 * @return A pointer to a rocksdb::Status or nullptr if an unexpected exception occurred
79 */
80 std::unique_ptr<rocksdb::Status> k_op(const Slice& key, std::function<void(jbyteArray)> kFn);
81 };
82 } // namespace rocksdb
83
84 #endif // JAVA_ROCKSJNI_WRITEBATCHHANDLERJNICALLBACK_H_