]> git.proxmox.com Git - ceph.git/blame - ceph/src/rocksdb/java/src/main/java/org/rocksdb/AbstractEventListener.java
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / rocksdb / java / src / main / java / org / rocksdb / AbstractEventListener.java
CommitLineData
20effc67
TL
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
6package org.rocksdb;
7
8import static org.rocksdb.AbstractEventListener.EnabledEventCallback.*;
9
10/**
11 * Base class for Event Listeners.
12 */
13public abstract class AbstractEventListener extends RocksCallbackObject implements EventListener {
14 public enum EnabledEventCallback {
15 ON_FLUSH_COMPLETED((byte) 0x0),
16 ON_FLUSH_BEGIN((byte) 0x1),
17 ON_TABLE_FILE_DELETED((byte) 0x2),
18 ON_COMPACTION_BEGIN((byte) 0x3),
19 ON_COMPACTION_COMPLETED((byte) 0x4),
20 ON_TABLE_FILE_CREATED((byte) 0x5),
21 ON_TABLE_FILE_CREATION_STARTED((byte) 0x6),
22 ON_MEMTABLE_SEALED((byte) 0x7),
23 ON_COLUMN_FAMILY_HANDLE_DELETION_STARTED((byte) 0x8),
24 ON_EXTERNAL_FILE_INGESTED((byte) 0x9),
25 ON_BACKGROUND_ERROR((byte) 0xA),
26 ON_STALL_CONDITIONS_CHANGED((byte) 0xB),
27 ON_FILE_READ_FINISH((byte) 0xC),
28 ON_FILE_WRITE_FINISH((byte) 0xD),
29 ON_FILE_FLUSH_FINISH((byte) 0xE),
30 ON_FILE_SYNC_FINISH((byte) 0xF),
31 ON_FILE_RANGE_SYNC_FINISH((byte) 0x10),
32 ON_FILE_TRUNCATE_FINISH((byte) 0x11),
33 ON_FILE_CLOSE_FINISH((byte) 0x12),
34 SHOULD_BE_NOTIFIED_ON_FILE_IO((byte) 0x13),
35 ON_ERROR_RECOVERY_BEGIN((byte) 0x14),
36 ON_ERROR_RECOVERY_COMPLETED((byte) 0x15);
37
38 private final byte value;
39
40 EnabledEventCallback(final byte value) {
41 this.value = value;
42 }
43
44 /**
45 * Get the internal representation value.
46 *
47 * @return the internal representation value
48 */
49 byte getValue() {
50 return value;
51 }
52
53 /**
54 * Get the EnabledEventCallbacks from the internal representation value.
55 *
56 * @return the enabled event callback.
57 *
58 * @throws IllegalArgumentException if the value is unknown.
59 */
60 static EnabledEventCallback fromValue(final byte value) {
61 for (final EnabledEventCallback enabledEventCallback : EnabledEventCallback.values()) {
62 if (enabledEventCallback.value == value) {
63 return enabledEventCallback;
64 }
65 }
66
67 throw new IllegalArgumentException(
68 "Illegal value provided for EnabledEventCallback: " + value);
69 }
70 }
71
72 /**
73 * Creates an Event Listener that will
74 * received all callbacks from C++.
75 *
76 * If you don't need all callbacks, it is much more efficient to
77 * just register for the ones you need by calling
78 * {@link #AbstractEventListener(EnabledEventCallback...)} instead.
79 */
80 protected AbstractEventListener() {
81 this(ON_FLUSH_COMPLETED, ON_FLUSH_BEGIN, ON_TABLE_FILE_DELETED, ON_COMPACTION_BEGIN,
82 ON_COMPACTION_COMPLETED, ON_TABLE_FILE_CREATED, ON_TABLE_FILE_CREATION_STARTED,
83 ON_MEMTABLE_SEALED, ON_COLUMN_FAMILY_HANDLE_DELETION_STARTED, ON_EXTERNAL_FILE_INGESTED,
84 ON_BACKGROUND_ERROR, ON_STALL_CONDITIONS_CHANGED, ON_FILE_READ_FINISH, ON_FILE_WRITE_FINISH,
85 ON_FILE_FLUSH_FINISH, ON_FILE_SYNC_FINISH, ON_FILE_RANGE_SYNC_FINISH,
86 ON_FILE_TRUNCATE_FINISH, ON_FILE_CLOSE_FINISH, SHOULD_BE_NOTIFIED_ON_FILE_IO,
87 ON_ERROR_RECOVERY_BEGIN, ON_ERROR_RECOVERY_COMPLETED);
88 }
89
90 /**
91 * Creates an Event Listener that will
92 * receive only certain callbacks from C++.
93 *
94 * @param enabledEventCallbacks callbacks to enable in Java.
95 */
96 protected AbstractEventListener(final EnabledEventCallback... enabledEventCallbacks) {
97 super(packToLong(enabledEventCallbacks));
98 }
99
100 /**
101 * Pack EnabledEventCallbacks to a long.
102 *
103 * @param enabledEventCallbacks the flags
104 *
105 * @return a long
106 */
107 private static long packToLong(final EnabledEventCallback... enabledEventCallbacks) {
108 long l = 0;
109 for (int i = 0; i < enabledEventCallbacks.length; i++) {
110 l |= 1 << enabledEventCallbacks[i].getValue();
111 }
112 return l;
113 }
114
115 @Override
116 public void onFlushCompleted(final RocksDB db, final FlushJobInfo flushJobInfo) {
117 // no-op
118 }
119
120 /**
121 * Called from JNI, proxy for
122 * {@link #onFlushCompleted(RocksDB, FlushJobInfo)}.
123 *
124 * @param dbHandle native handle of the database
125 * @param flushJobInfo the flush job info
126 */
127 private void onFlushCompletedProxy(final long dbHandle, final FlushJobInfo flushJobInfo) {
128 final RocksDB db = new RocksDB(dbHandle);
129 db.disOwnNativeHandle(); // we don't own this!
130 onFlushCompleted(db, flushJobInfo);
131 }
132
133 @Override
134 public void onFlushBegin(final RocksDB db, final FlushJobInfo flushJobInfo) {
135 // no-op
136 }
137
138 /**
139 * Called from JNI, proxy for
140 * {@link #onFlushBegin(RocksDB, FlushJobInfo)}.
141 *
142 * @param dbHandle native handle of the database
143 * @param flushJobInfo the flush job info
144 */
145 private void onFlushBeginProxy(final long dbHandle, final FlushJobInfo flushJobInfo) {
146 final RocksDB db = new RocksDB(dbHandle);
147 db.disOwnNativeHandle(); // we don't own this!
148 onFlushBegin(db, flushJobInfo);
149 }
150
151 @Override
152 public void onTableFileDeleted(final TableFileDeletionInfo tableFileDeletionInfo) {
153 // no-op
154 }
155
156 @Override
157 public void onCompactionBegin(final RocksDB db, final CompactionJobInfo compactionJobInfo) {
158 // no-op
159 }
160
161 /**
162 * Called from JNI, proxy for
163 * {@link #onCompactionBegin(RocksDB, CompactionJobInfo)}.
164 *
165 * @param dbHandle native handle of the database
166 * @param compactionJobInfo the flush job info
167 */
168 private void onCompactionBeginProxy(
169 final long dbHandle, final CompactionJobInfo compactionJobInfo) {
170 final RocksDB db = new RocksDB(dbHandle);
171 db.disOwnNativeHandle(); // we don't own this!
172 onCompactionBegin(db, compactionJobInfo);
173 }
174
175 @Override
176 public void onCompactionCompleted(final RocksDB db, final CompactionJobInfo compactionJobInfo) {
177 // no-op
178 }
179
180 /**
181 * Called from JNI, proxy for
182 * {@link #onCompactionCompleted(RocksDB, CompactionJobInfo)}.
183 *
184 * @param dbHandle native handle of the database
185 * @param compactionJobInfo the flush job info
186 */
187 private void onCompactionCompletedProxy(
188 final long dbHandle, final CompactionJobInfo compactionJobInfo) {
189 final RocksDB db = new RocksDB(dbHandle);
190 db.disOwnNativeHandle(); // we don't own this!
191 onCompactionCompleted(db, compactionJobInfo);
192 }
193
194 @Override
195 public void onTableFileCreated(final TableFileCreationInfo tableFileCreationInfo) {
196 // no-op
197 }
198
199 @Override
200 public void onTableFileCreationStarted(
201 final TableFileCreationBriefInfo tableFileCreationBriefInfo) {
202 // no-op
203 }
204
205 @Override
206 public void onMemTableSealed(final MemTableInfo memTableInfo) {
207 // no-op
208 }
209
210 @Override
211 public void onColumnFamilyHandleDeletionStarted(final ColumnFamilyHandle columnFamilyHandle) {
212 // no-op
213 }
214
215 @Override
216 public void onExternalFileIngested(
217 final RocksDB db, final ExternalFileIngestionInfo externalFileIngestionInfo) {
218 // no-op
219 }
220
221 /**
222 * Called from JNI, proxy for
223 * {@link #onExternalFileIngested(RocksDB, ExternalFileIngestionInfo)}.
224 *
225 * @param dbHandle native handle of the database
226 * @param externalFileIngestionInfo the flush job info
227 */
228 private void onExternalFileIngestedProxy(
229 final long dbHandle, final ExternalFileIngestionInfo externalFileIngestionInfo) {
230 final RocksDB db = new RocksDB(dbHandle);
231 db.disOwnNativeHandle(); // we don't own this!
232 onExternalFileIngested(db, externalFileIngestionInfo);
233 }
234
235 @Override
236 public void onBackgroundError(
237 final BackgroundErrorReason backgroundErrorReason, final Status backgroundError) {
238 // no-op
239 }
240
241 /**
242 * Called from JNI, proxy for
243 * {@link #onBackgroundError(BackgroundErrorReason, Status)}.
244 *
245 * @param reasonByte byte value representing error reason
246 * @param backgroundError status with error code
247 */
248 private void onBackgroundErrorProxy(final byte reasonByte, final Status backgroundError) {
249 onBackgroundError(BackgroundErrorReason.fromValue(reasonByte), backgroundError);
250 }
251
252 @Override
253 public void onStallConditionsChanged(final WriteStallInfo writeStallInfo) {
254 // no-op
255 }
256
257 @Override
258 public void onFileReadFinish(final FileOperationInfo fileOperationInfo) {
259 // no-op
260 }
261
262 @Override
263 public void onFileWriteFinish(final FileOperationInfo fileOperationInfo) {
264 // no-op
265 }
266
267 @Override
268 public void onFileFlushFinish(final FileOperationInfo fileOperationInfo) {
269 // no-op
270 }
271
272 @Override
273 public void onFileSyncFinish(final FileOperationInfo fileOperationInfo) {
274 // no-op
275 }
276
277 @Override
278 public void onFileRangeSyncFinish(final FileOperationInfo fileOperationInfo) {
279 // no-op
280 }
281
282 @Override
283 public void onFileTruncateFinish(final FileOperationInfo fileOperationInfo) {
284 // no-op
285 }
286
287 @Override
288 public void onFileCloseFinish(final FileOperationInfo fileOperationInfo) {
289 // no-op
290 }
291
292 @Override
293 public boolean shouldBeNotifiedOnFileIO() {
294 return false;
295 }
296
297 @Override
298 public boolean onErrorRecoveryBegin(
299 final BackgroundErrorReason backgroundErrorReason, final Status backgroundError) {
300 return true;
301 }
302
303 /**
304 * Called from JNI, proxy for
305 * {@link #onErrorRecoveryBegin(BackgroundErrorReason, Status)}.
306 *
307 * @param reasonByte byte value representing error reason
308 * @param backgroundError status with error code
309 */
310 private boolean onErrorRecoveryBeginProxy(final byte reasonByte, final Status backgroundError) {
311 return onErrorRecoveryBegin(BackgroundErrorReason.fromValue(reasonByte), backgroundError);
312 }
313
314 @Override
315 public void onErrorRecoveryCompleted(final Status oldBackgroundError) {
316 // no-op
317 }
318
319 @Override
320 protected long initializeNative(final long... nativeParameterHandles) {
321 return createNewEventListener(nativeParameterHandles[0]);
322 }
323
324 /**
325 * Deletes underlying C++ native callback object pointer
326 */
327 @Override
328 protected void disposeInternal() {
329 disposeInternal(nativeHandle_);
330 }
331
332 private native long createNewEventListener(final long enabledEventCallbackValues);
333 private native void disposeInternal(final long handle);
334}