ratelimiterjni.cc 4.4 KB

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