]> git.proxmox.com Git - ceph.git/blob - ceph/src/rocksdb/java/rocksjni/event_listener_jnicallback.h
e3b5d0e940b5027d5a2c93c27222ba3ae21aaec4
[ceph.git] / ceph / src / rocksdb / java / rocksjni / event_listener_jnicallback.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::EventListener.
8
9 #ifndef JAVA_ROCKSJNI_EVENT_LISTENER_JNICALLBACK_H_
10 #define JAVA_ROCKSJNI_EVENT_LISTENER_JNICALLBACK_H_
11
12 #include <jni.h>
13
14 #include <memory>
15 #include <set>
16
17 #include "rocksdb/listener.h"
18 #include "rocksjni/jnicallback.h"
19
20 namespace rocksdb {
21
22 enum EnabledEventCallback {
23 ON_FLUSH_COMPLETED = 0x0,
24 ON_FLUSH_BEGIN = 0x1,
25 ON_TABLE_FILE_DELETED = 0x2,
26 ON_COMPACTION_BEGIN = 0x3,
27 ON_COMPACTION_COMPLETED = 0x4,
28 ON_TABLE_FILE_CREATED = 0x5,
29 ON_TABLE_FILE_CREATION_STARTED = 0x6,
30 ON_MEMTABLE_SEALED = 0x7,
31 ON_COLUMN_FAMILY_HANDLE_DELETION_STARTED = 0x8,
32 ON_EXTERNAL_FILE_INGESTED = 0x9,
33 ON_BACKGROUND_ERROR = 0xA,
34 ON_STALL_CONDITIONS_CHANGED = 0xB,
35 ON_FILE_READ_FINISH = 0xC,
36 ON_FILE_WRITE_FINISH = 0xD,
37 ON_FILE_FLUSH_FINISH = 0xE,
38 ON_FILE_SYNC_FINISH = 0xF,
39 ON_FILE_RANGE_SYNC_FINISH = 0x10,
40 ON_FILE_TRUNCATE_FINISH = 0x11,
41 ON_FILE_CLOSE_FINISH = 0x12,
42 SHOULD_BE_NOTIFIED_ON_FILE_IO = 0x13,
43 ON_ERROR_RECOVERY_BEGIN = 0x14,
44 ON_ERROR_RECOVERY_COMPLETED = 0x15,
45
46 NUM_ENABLED_EVENT_CALLBACK = 0x16,
47 };
48
49 class EventListenerJniCallback : public JniCallback, public EventListener {
50 public:
51 EventListenerJniCallback(
52 JNIEnv* env, jobject jevent_listener,
53 const std::set<EnabledEventCallback>& enabled_event_callbacks);
54 virtual ~EventListenerJniCallback();
55 virtual void OnFlushCompleted(DB* db, const FlushJobInfo& flush_job_info);
56 virtual void OnFlushBegin(DB* db, const FlushJobInfo& flush_job_info);
57 virtual void OnTableFileDeleted(const TableFileDeletionInfo& info);
58 virtual void OnCompactionBegin(DB* db, const CompactionJobInfo& ci);
59 virtual void OnCompactionCompleted(DB* db, const CompactionJobInfo& ci);
60 virtual void OnTableFileCreated(const TableFileCreationInfo& info);
61 virtual void OnTableFileCreationStarted(
62 const TableFileCreationBriefInfo& info);
63 virtual void OnMemTableSealed(const MemTableInfo& info);
64 virtual void OnColumnFamilyHandleDeletionStarted(ColumnFamilyHandle* handle);
65 virtual void OnExternalFileIngested(DB* db,
66 const ExternalFileIngestionInfo& info);
67 virtual void OnBackgroundError(BackgroundErrorReason reason,
68 Status* bg_error);
69 virtual void OnStallConditionsChanged(const WriteStallInfo& info);
70 virtual void OnFileReadFinish(const FileOperationInfo& info);
71 virtual void OnFileWriteFinish(const FileOperationInfo& info);
72 virtual void OnFileFlushFinish(const FileOperationInfo& info);
73 virtual void OnFileSyncFinish(const FileOperationInfo& info);
74 virtual void OnFileRangeSyncFinish(const FileOperationInfo& info);
75 virtual void OnFileTruncateFinish(const FileOperationInfo& info);
76 virtual void OnFileCloseFinish(const FileOperationInfo& info);
77 virtual bool ShouldBeNotifiedOnFileIO();
78 virtual void OnErrorRecoveryBegin(BackgroundErrorReason reason,
79 Status bg_error, bool* auto_recovery);
80 virtual void OnErrorRecoveryCompleted(Status old_bg_error);
81
82 private:
83 inline void InitCallbackMethodId(jmethodID& mid, EnabledEventCallback eec,
84 JNIEnv* env,
85 jmethodID (*get_id)(JNIEnv* env));
86 template <class T>
87 inline jobject SetupCallbackInvocation(
88 JNIEnv*& env, jboolean& attached_thread, const T& cpp_obj,
89 jobject (*convert)(JNIEnv* env, const T* cpp_obj));
90 inline void CleanupCallbackInvocation(JNIEnv* env, jboolean attached_thread,
91 std::initializer_list<jobject*> refs);
92 inline void OnFileOperation(const jmethodID& mid,
93 const FileOperationInfo& info);
94
95 const std::set<EnabledEventCallback> m_enabled_event_callbacks;
96 jmethodID m_on_flush_completed_proxy_mid;
97 jmethodID m_on_flush_begin_proxy_mid;
98 jmethodID m_on_table_file_deleted_mid;
99 jmethodID m_on_compaction_begin_proxy_mid;
100 jmethodID m_on_compaction_completed_proxy_mid;
101 jmethodID m_on_table_file_created_mid;
102 jmethodID m_on_table_file_creation_started_mid;
103 jmethodID m_on_mem_table_sealed_mid;
104 jmethodID m_on_column_family_handle_deletion_started_mid;
105 jmethodID m_on_external_file_ingested_proxy_mid;
106 jmethodID m_on_background_error_proxy_mid;
107 jmethodID m_on_stall_conditions_changed_mid;
108 jmethodID m_on_file_read_finish_mid;
109 jmethodID m_on_file_write_finish_mid;
110 jmethodID m_on_file_flush_finish_mid;
111 jmethodID m_on_file_sync_finish_mid;
112 jmethodID m_on_file_range_sync_finish_mid;
113 jmethodID m_on_file_truncate_finish_mid;
114 jmethodID m_on_file_close_finish_mid;
115 jmethodID m_should_be_notified_on_file_io;
116 jmethodID m_on_error_recovery_begin_proxy_mid;
117 jmethodID m_on_error_recovery_completed_mid;
118 };
119
120 } // namespace rocksdb
121
122 #endif // JAVA_ROCKSJNI_EVENT_LISTENER_JNICALLBACK_H_