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++ for RateLimiter.
8 #include "include/org_rocksdb_RateLimiter.h"
9 #include "rocksdb/rate_limiter.h"
10 #include "rocksjni/cplusplus_to_java_convert.h"
11 #include "rocksjni/portal.h"
14 * Class: org_rocksdb_RateLimiter
15 * Method: newRateLimiterHandle
18 jlong
Java_org_rocksdb_RateLimiter_newRateLimiterHandle(
19 JNIEnv
* /*env*/, jclass
/*jclazz*/, jlong jrate_bytes_per_second
,
20 jlong jrefill_period_micros
, jint jfairness
, jbyte jrate_limiter_mode
,
21 jboolean jauto_tune
) {
22 auto rate_limiter_mode
=
23 ROCKSDB_NAMESPACE::RateLimiterModeJni::toCppRateLimiterMode(
25 auto* sptr_rate_limiter
= new std::shared_ptr
<ROCKSDB_NAMESPACE::RateLimiter
>(
26 ROCKSDB_NAMESPACE::NewGenericRateLimiter(
27 static_cast<int64_t>(jrate_bytes_per_second
),
28 static_cast<int64_t>(jrefill_period_micros
),
29 static_cast<int32_t>(jfairness
), rate_limiter_mode
, jauto_tune
));
31 return GET_CPLUSPLUS_POINTER(sptr_rate_limiter
);
35 * Class: org_rocksdb_RateLimiter
36 * Method: disposeInternal
39 void Java_org_rocksdb_RateLimiter_disposeInternal(JNIEnv
* /*env*/,
43 reinterpret_cast<std::shared_ptr
<ROCKSDB_NAMESPACE::RateLimiter
>*>(
45 delete handle
; // delete std::shared_ptr
49 * Class: org_rocksdb_RateLimiter
50 * Method: setBytesPerSecond
53 void Java_org_rocksdb_RateLimiter_setBytesPerSecond(JNIEnv
* /*env*/,
56 jlong jbytes_per_second
) {
57 reinterpret_cast<std::shared_ptr
<ROCKSDB_NAMESPACE::RateLimiter
>*>(handle
)
59 ->SetBytesPerSecond(jbytes_per_second
);
63 * Class: org_rocksdb_RateLimiter
64 * Method: getBytesPerSecond
67 jlong
Java_org_rocksdb_RateLimiter_getBytesPerSecond(JNIEnv
* /*env*/,
70 return reinterpret_cast<std::shared_ptr
<ROCKSDB_NAMESPACE::RateLimiter
>*>(
73 ->GetBytesPerSecond();
77 * Class: org_rocksdb_RateLimiter
81 void Java_org_rocksdb_RateLimiter_request(JNIEnv
* /*env*/, jobject
/*jobj*/,
82 jlong handle
, jlong jbytes
) {
83 reinterpret_cast<std::shared_ptr
<ROCKSDB_NAMESPACE::RateLimiter
>*>(handle
)
85 ->Request(jbytes
, ROCKSDB_NAMESPACE::Env::IO_TOTAL
);
89 * Class: org_rocksdb_RateLimiter
90 * Method: getSingleBurstBytes
93 jlong
Java_org_rocksdb_RateLimiter_getSingleBurstBytes(JNIEnv
* /*env*/,
96 return reinterpret_cast<std::shared_ptr
<ROCKSDB_NAMESPACE::RateLimiter
>*>(
99 ->GetSingleBurstBytes();
103 * Class: org_rocksdb_RateLimiter
104 * Method: getTotalBytesThrough
107 jlong
Java_org_rocksdb_RateLimiter_getTotalBytesThrough(JNIEnv
* /*env*/,
110 return reinterpret_cast<std::shared_ptr
<ROCKSDB_NAMESPACE::RateLimiter
>*>(
113 ->GetTotalBytesThrough();
117 * Class: org_rocksdb_RateLimiter
118 * Method: getTotalRequests
121 jlong
Java_org_rocksdb_RateLimiter_getTotalRequests(JNIEnv
* /*env*/,
124 return reinterpret_cast<std::shared_ptr
<ROCKSDB_NAMESPACE::RateLimiter
>*>(
127 ->GetTotalRequests();