File: writebatchhandlerjnicallback.h

package info (click to toggle)
rocksdb 5.17.2-3
  • links: PTS
  • area: main
  • in suites: buster
  • size: 21,164 kB
  • sloc: cpp: 253,035; java: 24,114; perl: 5,769; python: 4,093; ansic: 4,092; sh: 3,861; makefile: 1,754; asm: 547; php: 254; xml: 30
file content (84 lines) | stat: -rw-r--r-- 3,334 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
// 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).
//
// This file implements the callback "bridge" between Java and C++ for
// rocksdb::WriteBatch::Handler.

#ifndef JAVA_ROCKSJNI_WRITEBATCHHANDLERJNICALLBACK_H_
#define JAVA_ROCKSJNI_WRITEBATCHHANDLERJNICALLBACK_H_

#include <functional>
#include <jni.h>
#include <memory>
#include "rocksjni/jnicallback.h"
#include "rocksdb/write_batch.h"

namespace rocksdb {
/**
 * This class acts as a bridge between C++
 * and Java. The methods in this class will be
 * called back from the RocksDB storage engine (C++)
 * which calls the appropriate Java method.
 * This enables Write Batch Handlers to be implemented in Java.
 */
class WriteBatchHandlerJniCallback : public JniCallback, public WriteBatch::Handler {
 public:
    WriteBatchHandlerJniCallback(
      JNIEnv* env, jobject jWriteBackHandler);
    Status PutCF(uint32_t column_family_id, const Slice& key,
        const Slice& value);
    void Put(const Slice& key, const Slice& value);
    Status MergeCF(uint32_t column_family_id, const Slice& key,
        const Slice& value);
    void Merge(const Slice& key, const Slice& value);
    Status DeleteCF(uint32_t column_family_id, const Slice& key);
    void Delete(const Slice& key);
    Status SingleDeleteCF(uint32_t column_family_id, const Slice& key);
    void SingleDelete(const Slice& key);
    Status DeleteRangeCF(uint32_t column_family_id, const Slice& beginKey,
        const Slice& endKey);
    void DeleteRange(const Slice& beginKey, const Slice& endKey);
    void LogData(const Slice& blob);
    Status PutBlobIndexCF(uint32_t column_family_id, const Slice& key,
                          const Slice& value);
    Status MarkBeginPrepare(bool);
    Status MarkEndPrepare(const Slice& xid);
    Status MarkNoop(bool empty_batch);
    Status MarkRollback(const Slice& xid);
    Status MarkCommit(const Slice& xid);
    bool Continue();

 private:
    JNIEnv* m_env;
    jmethodID m_jPutCfMethodId;
    jmethodID m_jPutMethodId;
    jmethodID m_jMergeCfMethodId;
    jmethodID m_jMergeMethodId;
    jmethodID m_jDeleteCfMethodId;
    jmethodID m_jDeleteMethodId;
    jmethodID m_jSingleDeleteCfMethodId;
    jmethodID m_jSingleDeleteMethodId;
    jmethodID m_jDeleteRangeCfMethodId;
    jmethodID m_jDeleteRangeMethodId;
    jmethodID m_jLogDataMethodId;
    jmethodID m_jPutBlobIndexCfMethodId;
    jmethodID m_jMarkBeginPrepareMethodId;
    jmethodID m_jMarkEndPrepareMethodId;
    jmethodID m_jMarkNoopMethodId;
    jmethodID m_jMarkRollbackMethodId;
    jmethodID m_jMarkCommitMethodId;
    jmethodID m_jContinueMethodId;
    /**
     * @return A pointer to a rocksdb::Status or nullptr if an unexpected exception occurred
     */
    std::unique_ptr<rocksdb::Status> kv_op(const Slice& key, const Slice& value, std::function<void(jbyteArray, jbyteArray)> kvFn);
    /**
     * @return A pointer to a rocksdb::Status or nullptr if an unexpected exception occurred
     */
    std::unique_ptr<rocksdb::Status> k_op(const Slice& key, std::function<void(jbyteArray)> kFn);
};
}  // namespace rocksdb

#endif  // JAVA_ROCKSJNI_WRITEBATCHHANDLERJNICALLBACK_H_