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 "bridge" between Java and C++ and enables
7 // calling C++ rocksdb::SstFileManager methods
13 #include "include/org_rocksdb_SstFileManager.h"
14 #include "rocksdb/sst_file_manager.h"
15 #include "rocksjni/portal.h"
18 * Class: org_rocksdb_SstFileManager
19 * Method: newSstFileManager
22 jlong
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
) {
26 auto* env
= reinterpret_cast<rocksdb::Env
*>(jenv_handle
);
28 rocksdb::SstFileManager
* sst_file_manager
= nullptr;
30 if (jlogger_handle
!= 0) {
32 reinterpret_cast<std::shared_ptr
<rocksdb::Logger
>*>(jlogger_handle
);
33 sst_file_manager
= rocksdb::NewSstFileManager(
34 env
, *sptr_logger
, "", jrate_bytes
, true, &s
, jmax_trash_db_ratio
,
35 jmax_delete_chunk_bytes
);
37 sst_file_manager
= rocksdb::NewSstFileManager(env
, nullptr, "", jrate_bytes
,
38 true, &s
, jmax_trash_db_ratio
,
39 jmax_delete_chunk_bytes
);
43 if (sst_file_manager
!= nullptr) {
44 delete sst_file_manager
;
46 rocksdb::RocksDBExceptionJni::ThrowNew(jnienv
, s
);
48 auto* sptr_sst_file_manager
=
49 new std::shared_ptr
<rocksdb::SstFileManager
>(sst_file_manager
);
51 return reinterpret_cast<jlong
>(sptr_sst_file_manager
);
55 * Class: org_rocksdb_SstFileManager
56 * Method: setMaxAllowedSpaceUsage
59 void Java_org_rocksdb_SstFileManager_setMaxAllowedSpaceUsage(
60 JNIEnv
* /*env*/, jobject
/*jobj*/, jlong jhandle
,
61 jlong jmax_allowed_space
) {
62 auto* sptr_sst_file_manager
=
63 reinterpret_cast<std::shared_ptr
<rocksdb::SstFileManager
>*>(jhandle
);
64 sptr_sst_file_manager
->get()->SetMaxAllowedSpaceUsage(jmax_allowed_space
);
68 * Class: org_rocksdb_SstFileManager
69 * Method: setCompactionBufferSize
72 void Java_org_rocksdb_SstFileManager_setCompactionBufferSize(
73 JNIEnv
* /*env*/, jobject
/*jobj*/, jlong jhandle
,
74 jlong jcompaction_buffer_size
) {
75 auto* sptr_sst_file_manager
=
76 reinterpret_cast<std::shared_ptr
<rocksdb::SstFileManager
>*>(jhandle
);
77 sptr_sst_file_manager
->get()->SetCompactionBufferSize(
78 jcompaction_buffer_size
);
82 * Class: org_rocksdb_SstFileManager
83 * Method: isMaxAllowedSpaceReached
86 jboolean
Java_org_rocksdb_SstFileManager_isMaxAllowedSpaceReached(
87 JNIEnv
* /*env*/, jobject
/*jobj*/, jlong jhandle
) {
88 auto* sptr_sst_file_manager
=
89 reinterpret_cast<std::shared_ptr
<rocksdb::SstFileManager
>*>(jhandle
);
90 return sptr_sst_file_manager
->get()->IsMaxAllowedSpaceReached();
94 * Class: org_rocksdb_SstFileManager
95 * Method: isMaxAllowedSpaceReachedIncludingCompactions
99 Java_org_rocksdb_SstFileManager_isMaxAllowedSpaceReachedIncludingCompactions(
100 JNIEnv
* /*env*/, jobject
/*jobj*/, jlong jhandle
) {
101 auto* sptr_sst_file_manager
=
102 reinterpret_cast<std::shared_ptr
<rocksdb::SstFileManager
>*>(jhandle
);
103 return sptr_sst_file_manager
->get()
104 ->IsMaxAllowedSpaceReachedIncludingCompactions();
108 * Class: org_rocksdb_SstFileManager
109 * Method: getTotalSize
112 jlong
Java_org_rocksdb_SstFileManager_getTotalSize(JNIEnv
* /*env*/,
115 auto* sptr_sst_file_manager
=
116 reinterpret_cast<std::shared_ptr
<rocksdb::SstFileManager
>*>(jhandle
);
117 return sptr_sst_file_manager
->get()->GetTotalSize();
121 * Class: org_rocksdb_SstFileManager
122 * Method: getTrackedFiles
123 * Signature: (J)Ljava/util/Map;
125 jobject
Java_org_rocksdb_SstFileManager_getTrackedFiles(JNIEnv
* env
,
128 auto* sptr_sst_file_manager
=
129 reinterpret_cast<std::shared_ptr
<rocksdb::SstFileManager
>*>(jhandle
);
130 auto tracked_files
= sptr_sst_file_manager
->get()->GetTrackedFiles();
132 //TODO(AR) could refactor to share code with rocksdb::HashMapJni::fromCppMap(env, tracked_files);
134 const jobject jtracked_files
= rocksdb::HashMapJni::construct(
135 env
, static_cast<uint32_t>(tracked_files
.size()));
136 if (jtracked_files
== nullptr) {
137 // exception occurred
141 const rocksdb::HashMapJni::FnMapKV
<const std::string
, const uint64_t, jobject
, jobject
>
143 [env
](const std::pair
<const std::string
, const uint64_t>& pair
) {
144 const jstring jtracked_file_path
=
145 env
->NewStringUTF(pair
.first
.c_str());
146 if (jtracked_file_path
== nullptr) {
148 return std::unique_ptr
<std::pair
<jobject
, jobject
>>(nullptr);
150 const jobject jtracked_file_size
=
151 rocksdb::LongJni::valueOf(env
, pair
.second
);
152 if (jtracked_file_size
== nullptr) {
154 return std::unique_ptr
<std::pair
<jobject
, jobject
>>(nullptr);
156 return std::unique_ptr
<std::pair
<jobject
, jobject
>>(
157 new std::pair
<jobject
, jobject
>(jtracked_file_path
,
158 jtracked_file_size
));
161 if (!rocksdb::HashMapJni::putAll(env
, jtracked_files
, tracked_files
.begin(),
162 tracked_files
.end(), fn_map_kv
)) {
163 // exception occcurred
167 return jtracked_files
;
171 * Class: org_rocksdb_SstFileManager
172 * Method: getDeleteRateBytesPerSecond
175 jlong
Java_org_rocksdb_SstFileManager_getDeleteRateBytesPerSecond(
176 JNIEnv
* /*env*/, jobject
/*jobj*/, jlong jhandle
) {
177 auto* sptr_sst_file_manager
=
178 reinterpret_cast<std::shared_ptr
<rocksdb::SstFileManager
>*>(jhandle
);
179 return sptr_sst_file_manager
->get()->GetDeleteRateBytesPerSecond();
183 * Class: org_rocksdb_SstFileManager
184 * Method: setDeleteRateBytesPerSecond
187 void Java_org_rocksdb_SstFileManager_setDeleteRateBytesPerSecond(
188 JNIEnv
* /*env*/, jobject
/*jobj*/, jlong jhandle
, jlong jdelete_rate
) {
189 auto* sptr_sst_file_manager
=
190 reinterpret_cast<std::shared_ptr
<rocksdb::SstFileManager
>*>(jhandle
);
191 sptr_sst_file_manager
->get()->SetDeleteRateBytesPerSecond(jdelete_rate
);
195 * Class: org_rocksdb_SstFileManager
196 * Method: getMaxTrashDBRatio
199 jdouble
Java_org_rocksdb_SstFileManager_getMaxTrashDBRatio(JNIEnv
* /*env*/,
202 auto* sptr_sst_file_manager
=
203 reinterpret_cast<std::shared_ptr
<rocksdb::SstFileManager
>*>(jhandle
);
204 return sptr_sst_file_manager
->get()->GetMaxTrashDBRatio();
208 * Class: org_rocksdb_SstFileManager
209 * Method: setMaxTrashDBRatio
212 void Java_org_rocksdb_SstFileManager_setMaxTrashDBRatio(JNIEnv
* /*env*/,
216 auto* sptr_sst_file_manager
=
217 reinterpret_cast<std::shared_ptr
<rocksdb::SstFileManager
>*>(jhandle
);
218 sptr_sst_file_manager
->get()->SetMaxTrashDBRatio(jratio
);
222 * Class: org_rocksdb_SstFileManager
223 * Method: disposeInternal
226 void Java_org_rocksdb_SstFileManager_disposeInternal(JNIEnv
* /*env*/,
229 auto* sptr_sst_file_manager
=
230 reinterpret_cast<std::shared_ptr
<rocksdb::SstFileManager
>*>(jhandle
);
231 delete sptr_sst_file_manager
;