]> git.proxmox.com Git - ceph.git/blame - ceph/src/rocksdb/java/rocksjni/sst_file_manager.cc
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / rocksdb / java / rocksjni / sst_file_manager.cc
CommitLineData
11fdf7f2
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//
6// This file implements the "bridge" between Java and C++ and enables
f67539c2 7// calling C++ ROCKSDB_NAMESPACE::SstFileManager methods
11fdf7f2
TL
8// from Java side.
9
10#include <jni.h>
11#include <memory>
12
13#include "include/org_rocksdb_SstFileManager.h"
14#include "rocksdb/sst_file_manager.h"
15#include "rocksjni/portal.h"
16
17/*
18 * Class: org_rocksdb_SstFileManager
19 * Method: newSstFileManager
20 * Signature: (JJJDJ)J
21 */
22jlong Java_org_rocksdb_SstFileManager_newSstFileManager(
23 JNIEnv* jnienv, jclass /*jcls*/, jlong jenv_handle, jlong jlogger_handle,
24 jlong jrate_bytes, jdouble jmax_trash_db_ratio,
25 jlong jmax_delete_chunk_bytes) {
f67539c2
TL
26 auto* env = reinterpret_cast<ROCKSDB_NAMESPACE::Env*>(jenv_handle);
27 ROCKSDB_NAMESPACE::Status s;
28 ROCKSDB_NAMESPACE::SstFileManager* sst_file_manager = nullptr;
11fdf7f2
TL
29
30 if (jlogger_handle != 0) {
31 auto* sptr_logger =
f67539c2
TL
32 reinterpret_cast<std::shared_ptr<ROCKSDB_NAMESPACE::Logger>*>(
33 jlogger_handle);
34 sst_file_manager = ROCKSDB_NAMESPACE::NewSstFileManager(
11fdf7f2
TL
35 env, *sptr_logger, "", jrate_bytes, true, &s, jmax_trash_db_ratio,
36 jmax_delete_chunk_bytes);
37 } else {
f67539c2
TL
38 sst_file_manager = ROCKSDB_NAMESPACE::NewSstFileManager(
39 env, nullptr, "", jrate_bytes, true, &s, jmax_trash_db_ratio,
40 jmax_delete_chunk_bytes);
11fdf7f2
TL
41 }
42
43 if (!s.ok()) {
44 if (sst_file_manager != nullptr) {
45 delete sst_file_manager;
46 }
f67539c2 47 ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(jnienv, s);
11fdf7f2
TL
48 }
49 auto* sptr_sst_file_manager =
f67539c2 50 new std::shared_ptr<ROCKSDB_NAMESPACE::SstFileManager>(sst_file_manager);
11fdf7f2
TL
51
52 return reinterpret_cast<jlong>(sptr_sst_file_manager);
53}
54
55/*
56 * Class: org_rocksdb_SstFileManager
57 * Method: setMaxAllowedSpaceUsage
58 * Signature: (JJ)V
59 */
60void Java_org_rocksdb_SstFileManager_setMaxAllowedSpaceUsage(
61 JNIEnv* /*env*/, jobject /*jobj*/, jlong jhandle,
62 jlong jmax_allowed_space) {
63 auto* sptr_sst_file_manager =
f67539c2
TL
64 reinterpret_cast<std::shared_ptr<ROCKSDB_NAMESPACE::SstFileManager>*>(
65 jhandle);
11fdf7f2
TL
66 sptr_sst_file_manager->get()->SetMaxAllowedSpaceUsage(jmax_allowed_space);
67}
68
69/*
70 * Class: org_rocksdb_SstFileManager
71 * Method: setCompactionBufferSize
72 * Signature: (JJ)V
73 */
74void Java_org_rocksdb_SstFileManager_setCompactionBufferSize(
75 JNIEnv* /*env*/, jobject /*jobj*/, jlong jhandle,
76 jlong jcompaction_buffer_size) {
77 auto* sptr_sst_file_manager =
f67539c2
TL
78 reinterpret_cast<std::shared_ptr<ROCKSDB_NAMESPACE::SstFileManager>*>(
79 jhandle);
11fdf7f2
TL
80 sptr_sst_file_manager->get()->SetCompactionBufferSize(
81 jcompaction_buffer_size);
82}
83
84/*
85 * Class: org_rocksdb_SstFileManager
86 * Method: isMaxAllowedSpaceReached
87 * Signature: (J)Z
88 */
89jboolean Java_org_rocksdb_SstFileManager_isMaxAllowedSpaceReached(
90 JNIEnv* /*env*/, jobject /*jobj*/, jlong jhandle) {
91 auto* sptr_sst_file_manager =
f67539c2
TL
92 reinterpret_cast<std::shared_ptr<ROCKSDB_NAMESPACE::SstFileManager>*>(
93 jhandle);
11fdf7f2
TL
94 return sptr_sst_file_manager->get()->IsMaxAllowedSpaceReached();
95}
96
97/*
98 * Class: org_rocksdb_SstFileManager
99 * Method: isMaxAllowedSpaceReachedIncludingCompactions
100 * Signature: (J)Z
101 */
102jboolean
103Java_org_rocksdb_SstFileManager_isMaxAllowedSpaceReachedIncludingCompactions(
104 JNIEnv* /*env*/, jobject /*jobj*/, jlong jhandle) {
105 auto* sptr_sst_file_manager =
f67539c2
TL
106 reinterpret_cast<std::shared_ptr<ROCKSDB_NAMESPACE::SstFileManager>*>(
107 jhandle);
11fdf7f2
TL
108 return sptr_sst_file_manager->get()
109 ->IsMaxAllowedSpaceReachedIncludingCompactions();
110}
111
112/*
113 * Class: org_rocksdb_SstFileManager
114 * Method: getTotalSize
115 * Signature: (J)J
116 */
117jlong Java_org_rocksdb_SstFileManager_getTotalSize(JNIEnv* /*env*/,
118 jobject /*jobj*/,
119 jlong jhandle) {
120 auto* sptr_sst_file_manager =
f67539c2
TL
121 reinterpret_cast<std::shared_ptr<ROCKSDB_NAMESPACE::SstFileManager>*>(
122 jhandle);
11fdf7f2
TL
123 return sptr_sst_file_manager->get()->GetTotalSize();
124}
125
126/*
127 * Class: org_rocksdb_SstFileManager
128 * Method: getTrackedFiles
129 * Signature: (J)Ljava/util/Map;
130 */
131jobject Java_org_rocksdb_SstFileManager_getTrackedFiles(JNIEnv* env,
132 jobject /*jobj*/,
133 jlong jhandle) {
134 auto* sptr_sst_file_manager =
f67539c2
TL
135 reinterpret_cast<std::shared_ptr<ROCKSDB_NAMESPACE::SstFileManager>*>(
136 jhandle);
11fdf7f2
TL
137 auto tracked_files = sptr_sst_file_manager->get()->GetTrackedFiles();
138
f67539c2
TL
139 // TODO(AR) could refactor to share code with
140 // ROCKSDB_NAMESPACE::HashMapJni::fromCppMap(env, tracked_files);
494da23a 141
f67539c2 142 const jobject jtracked_files = ROCKSDB_NAMESPACE::HashMapJni::construct(
11fdf7f2
TL
143 env, static_cast<uint32_t>(tracked_files.size()));
144 if (jtracked_files == nullptr) {
145 // exception occurred
146 return nullptr;
147 }
148
f67539c2
TL
149 const ROCKSDB_NAMESPACE::HashMapJni::FnMapKV<const std::string,
150 const uint64_t, jobject, jobject>
11fdf7f2
TL
151 fn_map_kv =
152 [env](const std::pair<const std::string, const uint64_t>& pair) {
153 const jstring jtracked_file_path =
154 env->NewStringUTF(pair.first.c_str());
155 if (jtracked_file_path == nullptr) {
156 // an error occurred
157 return std::unique_ptr<std::pair<jobject, jobject>>(nullptr);
158 }
159 const jobject jtracked_file_size =
f67539c2 160 ROCKSDB_NAMESPACE::LongJni::valueOf(env, pair.second);
11fdf7f2
TL
161 if (jtracked_file_size == nullptr) {
162 // an error occurred
163 return std::unique_ptr<std::pair<jobject, jobject>>(nullptr);
164 }
165 return std::unique_ptr<std::pair<jobject, jobject>>(
166 new std::pair<jobject, jobject>(jtracked_file_path,
167 jtracked_file_size));
168 };
169
f67539c2
TL
170 if (!ROCKSDB_NAMESPACE::HashMapJni::putAll(env, jtracked_files,
171 tracked_files.begin(),
172 tracked_files.end(), fn_map_kv)) {
11fdf7f2
TL
173 // exception occcurred
174 return nullptr;
175 }
176
177 return jtracked_files;
178}
179
180/*
181 * Class: org_rocksdb_SstFileManager
182 * Method: getDeleteRateBytesPerSecond
183 * Signature: (J)J
184 */
185jlong Java_org_rocksdb_SstFileManager_getDeleteRateBytesPerSecond(
186 JNIEnv* /*env*/, jobject /*jobj*/, jlong jhandle) {
187 auto* sptr_sst_file_manager =
f67539c2
TL
188 reinterpret_cast<std::shared_ptr<ROCKSDB_NAMESPACE::SstFileManager>*>(
189 jhandle);
11fdf7f2
TL
190 return sptr_sst_file_manager->get()->GetDeleteRateBytesPerSecond();
191}
192
193/*
194 * Class: org_rocksdb_SstFileManager
195 * Method: setDeleteRateBytesPerSecond
196 * Signature: (JJ)V
197 */
198void Java_org_rocksdb_SstFileManager_setDeleteRateBytesPerSecond(
199 JNIEnv* /*env*/, jobject /*jobj*/, jlong jhandle, jlong jdelete_rate) {
200 auto* sptr_sst_file_manager =
f67539c2
TL
201 reinterpret_cast<std::shared_ptr<ROCKSDB_NAMESPACE::SstFileManager>*>(
202 jhandle);
11fdf7f2
TL
203 sptr_sst_file_manager->get()->SetDeleteRateBytesPerSecond(jdelete_rate);
204}
205
206/*
207 * Class: org_rocksdb_SstFileManager
208 * Method: getMaxTrashDBRatio
209 * Signature: (J)D
210 */
211jdouble Java_org_rocksdb_SstFileManager_getMaxTrashDBRatio(JNIEnv* /*env*/,
212 jobject /*jobj*/,
213 jlong jhandle) {
214 auto* sptr_sst_file_manager =
f67539c2
TL
215 reinterpret_cast<std::shared_ptr<ROCKSDB_NAMESPACE::SstFileManager>*>(
216 jhandle);
11fdf7f2
TL
217 return sptr_sst_file_manager->get()->GetMaxTrashDBRatio();
218}
219
220/*
221 * Class: org_rocksdb_SstFileManager
222 * Method: setMaxTrashDBRatio
223 * Signature: (JD)V
224 */
225void Java_org_rocksdb_SstFileManager_setMaxTrashDBRatio(JNIEnv* /*env*/,
226 jobject /*jobj*/,
227 jlong jhandle,
228 jdouble jratio) {
229 auto* sptr_sst_file_manager =
f67539c2
TL
230 reinterpret_cast<std::shared_ptr<ROCKSDB_NAMESPACE::SstFileManager>*>(
231 jhandle);
11fdf7f2
TL
232 sptr_sst_file_manager->get()->SetMaxTrashDBRatio(jratio);
233}
234
235/*
236 * Class: org_rocksdb_SstFileManager
237 * Method: disposeInternal
238 * Signature: (J)V
239 */
240void Java_org_rocksdb_SstFileManager_disposeInternal(JNIEnv* /*env*/,
241 jobject /*jobj*/,
242 jlong jhandle) {
243 auto* sptr_sst_file_manager =
f67539c2
TL
244 reinterpret_cast<std::shared_ptr<ROCKSDB_NAMESPACE::SstFileManager>*>(
245 jhandle);
11fdf7f2
TL
246 delete sptr_sst_file_manager;
247}