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::EventListener.
9 #ifndef JAVA_ROCKSJNI_EVENT_LISTENER_JNICALLBACK_H_
10 #define JAVA_ROCKSJNI_EVENT_LISTENER_JNICALLBACK_H_
17 #include "rocksdb/listener.h"
18 #include "rocksjni/jnicallback.h"
22 enum EnabledEventCallback
{
23 ON_FLUSH_COMPLETED
= 0x0,
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,
46 NUM_ENABLED_EVENT_CALLBACK
= 0x16,
49 class EventListenerJniCallback
: public JniCallback
, public EventListener
{
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
,
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
);
83 inline void InitCallbackMethodId(jmethodID
& mid
, EnabledEventCallback eec
,
85 jmethodID (*get_id
)(JNIEnv
* env
));
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
);
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
;
120 } // namespace rocksdb
122 #endif // JAVA_ROCKSJNI_EVENT_LISTENER_JNICALLBACK_H_