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/portal.h"
13 * Class: org_rocksdb_RateLimiter
14 * Method: newRateLimiterHandle
17 jlong
Java_org_rocksdb_RateLimiter_newRateLimiterHandle(
18 JNIEnv
* /*env*/, jclass
/*jclazz*/, jlong jrate_bytes_per_second
,
19 jlong jrefill_period_micros
, jint jfairness
, jbyte jrate_limiter_mode
,
20 jboolean jauto_tune
) {
21 auto rate_limiter_mode
=
22 rocksdb::RateLimiterModeJni::toCppRateLimiterMode(jrate_limiter_mode
);
23 auto* sptr_rate_limiter
=
24 new std::shared_ptr
<rocksdb::RateLimiter
>(rocksdb::NewGenericRateLimiter(
25 static_cast<int64_t>(jrate_bytes_per_second
),
26 static_cast<int64_t>(jrefill_period_micros
),
27 static_cast<int32_t>(jfairness
), rate_limiter_mode
, jauto_tune
));
29 return reinterpret_cast<jlong
>(sptr_rate_limiter
);
33 * Class: org_rocksdb_RateLimiter
34 * Method: disposeInternal
37 void Java_org_rocksdb_RateLimiter_disposeInternal(JNIEnv
* /*env*/,
41 reinterpret_cast<std::shared_ptr
<rocksdb::RateLimiter
>*>(jhandle
);
42 delete handle
; // delete std::shared_ptr
46 * Class: org_rocksdb_RateLimiter
47 * Method: setBytesPerSecond
50 void Java_org_rocksdb_RateLimiter_setBytesPerSecond(JNIEnv
* /*env*/,
53 jlong jbytes_per_second
) {
54 reinterpret_cast<std::shared_ptr
<rocksdb::RateLimiter
>*>(handle
)
56 ->SetBytesPerSecond(jbytes_per_second
);
60 * Class: org_rocksdb_RateLimiter
61 * Method: getBytesPerSecond
64 jlong
Java_org_rocksdb_RateLimiter_getBytesPerSecond(JNIEnv
* /*env*/,
67 return reinterpret_cast<std::shared_ptr
<rocksdb::RateLimiter
>*>(handle
)
69 ->GetBytesPerSecond();
73 * Class: org_rocksdb_RateLimiter
77 void Java_org_rocksdb_RateLimiter_request(JNIEnv
* /*env*/, jobject
/*jobj*/,
78 jlong handle
, jlong jbytes
) {
79 reinterpret_cast<std::shared_ptr
<rocksdb::RateLimiter
>*>(handle
)
81 ->Request(jbytes
, rocksdb::Env::IO_TOTAL
);
85 * Class: org_rocksdb_RateLimiter
86 * Method: getSingleBurstBytes
89 jlong
Java_org_rocksdb_RateLimiter_getSingleBurstBytes(JNIEnv
* /*env*/,
92 return reinterpret_cast<std::shared_ptr
<rocksdb::RateLimiter
>*>(handle
)
94 ->GetSingleBurstBytes();
98 * Class: org_rocksdb_RateLimiter
99 * Method: getTotalBytesThrough
102 jlong
Java_org_rocksdb_RateLimiter_getTotalBytesThrough(JNIEnv
* /*env*/,
105 return reinterpret_cast<std::shared_ptr
<rocksdb::RateLimiter
>*>(handle
)
107 ->GetTotalBytesThrough();
111 * Class: org_rocksdb_RateLimiter
112 * Method: getTotalRequests
115 jlong
Java_org_rocksdb_RateLimiter_getTotalRequests(JNIEnv
* /*env*/,
118 return reinterpret_cast<std::shared_ptr
<rocksdb::RateLimiter
>*>(handle
)
120 ->GetTotalRequests();