ratelimiterjni.cc 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  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++ for RateLimiter.
  7. #include "include/org_rocksdb_RateLimiter.h"
  8. #include "rocksdb/rate_limiter.h"
  9. #include "rocksjni/portal.h"
  10. /*
  11. * Class: org_rocksdb_RateLimiter
  12. * Method: newRateLimiterHandle
  13. * Signature: (JJIBZ)J
  14. */
  15. jlong Java_org_rocksdb_RateLimiter_newRateLimiterHandle(
  16. JNIEnv* /*env*/, jclass /*jclazz*/, jlong jrate_bytes_per_second,
  17. jlong jrefill_period_micros, jint jfairness, jbyte jrate_limiter_mode,
  18. jboolean jauto_tune) {
  19. auto rate_limiter_mode =
  20. ROCKSDB_NAMESPACE::RateLimiterModeJni::toCppRateLimiterMode(
  21. jrate_limiter_mode);
  22. auto* sptr_rate_limiter = new std::shared_ptr<ROCKSDB_NAMESPACE::RateLimiter>(
  23. ROCKSDB_NAMESPACE::NewGenericRateLimiter(
  24. static_cast<int64_t>(jrate_bytes_per_second),
  25. static_cast<int64_t>(jrefill_period_micros),
  26. static_cast<int32_t>(jfairness), rate_limiter_mode, jauto_tune));
  27. return reinterpret_cast<jlong>(sptr_rate_limiter);
  28. }
  29. /*
  30. * Class: org_rocksdb_RateLimiter
  31. * Method: disposeInternal
  32. * Signature: (J)V
  33. */
  34. void Java_org_rocksdb_RateLimiter_disposeInternal(JNIEnv* /*env*/,
  35. jobject /*jobj*/,
  36. jlong jhandle) {
  37. auto* handle =
  38. reinterpret_cast<std::shared_ptr<ROCKSDB_NAMESPACE::RateLimiter>*>(
  39. jhandle);
  40. delete handle; // delete std::shared_ptr
  41. }
  42. /*
  43. * Class: org_rocksdb_RateLimiter
  44. * Method: setBytesPerSecond
  45. * Signature: (JJ)V
  46. */
  47. void Java_org_rocksdb_RateLimiter_setBytesPerSecond(JNIEnv* /*env*/,
  48. jobject /*jobj*/,
  49. jlong handle,
  50. jlong jbytes_per_second) {
  51. reinterpret_cast<std::shared_ptr<ROCKSDB_NAMESPACE::RateLimiter>*>(handle)
  52. ->get()
  53. ->SetBytesPerSecond(jbytes_per_second);
  54. }
  55. /*
  56. * Class: org_rocksdb_RateLimiter
  57. * Method: getBytesPerSecond
  58. * Signature: (J)J
  59. */
  60. jlong Java_org_rocksdb_RateLimiter_getBytesPerSecond(JNIEnv* /*env*/,
  61. jobject /*jobj*/,
  62. jlong handle) {
  63. return reinterpret_cast<std::shared_ptr<ROCKSDB_NAMESPACE::RateLimiter>*>(
  64. handle)
  65. ->get()
  66. ->GetBytesPerSecond();
  67. }
  68. /*
  69. * Class: org_rocksdb_RateLimiter
  70. * Method: request
  71. * Signature: (JJ)V
  72. */
  73. void Java_org_rocksdb_RateLimiter_request(JNIEnv* /*env*/, jobject /*jobj*/,
  74. jlong handle, jlong jbytes) {
  75. reinterpret_cast<std::shared_ptr<ROCKSDB_NAMESPACE::RateLimiter>*>(handle)
  76. ->get()
  77. ->Request(jbytes, ROCKSDB_NAMESPACE::Env::IO_TOTAL);
  78. }
  79. /*
  80. * Class: org_rocksdb_RateLimiter
  81. * Method: getSingleBurstBytes
  82. * Signature: (J)J
  83. */
  84. jlong Java_org_rocksdb_RateLimiter_getSingleBurstBytes(JNIEnv* /*env*/,
  85. jobject /*jobj*/,
  86. jlong handle) {
  87. return reinterpret_cast<std::shared_ptr<ROCKSDB_NAMESPACE::RateLimiter>*>(
  88. handle)
  89. ->get()
  90. ->GetSingleBurstBytes();
  91. }
  92. /*
  93. * Class: org_rocksdb_RateLimiter
  94. * Method: getTotalBytesThrough
  95. * Signature: (J)J
  96. */
  97. jlong Java_org_rocksdb_RateLimiter_getTotalBytesThrough(JNIEnv* /*env*/,
  98. jobject /*jobj*/,
  99. jlong handle) {
  100. return reinterpret_cast<std::shared_ptr<ROCKSDB_NAMESPACE::RateLimiter>*>(
  101. handle)
  102. ->get()
  103. ->GetTotalBytesThrough();
  104. }
  105. /*
  106. * Class: org_rocksdb_RateLimiter
  107. * Method: getTotalRequests
  108. * Signature: (J)J
  109. */
  110. jlong Java_org_rocksdb_RateLimiter_getTotalRequests(JNIEnv* /*env*/,
  111. jobject /*jobj*/,
  112. jlong handle) {
  113. return reinterpret_cast<std::shared_ptr<ROCKSDB_NAMESPACE::RateLimiter>*>(
  114. handle)
  115. ->get()
  116. ->GetTotalRequests();
  117. }