concurrent_task_limiter.cc 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. // Copyright (c) Meta Platforms, Inc. and affiliates.
  2. //
  3. // This source code is licensed under both the GPLv2 (found in the
  4. // COPYING file in the root directory) and Apache 2.0 License
  5. // (found in the LICENSE.Apache file in the root directory).
  6. #include "rocksdb/concurrent_task_limiter.h"
  7. #include <jni.h>
  8. #include <memory>
  9. #include <string>
  10. #include "include/org_rocksdb_ConcurrentTaskLimiterImpl.h"
  11. #include "rocksjni/cplusplus_to_java_convert.h"
  12. #include "rocksjni/portal.h"
  13. /*
  14. * Class: org_rocksdb_ConcurrentTaskLimiterImpl
  15. * Method: newConcurrentTaskLimiterImpl0
  16. * Signature: (Ljava/lang/String;I)J
  17. */
  18. jlong Java_org_rocksdb_ConcurrentTaskLimiterImpl_newConcurrentTaskLimiterImpl0(
  19. JNIEnv* env, jclass, jstring jname, jint limit) {
  20. jboolean has_exception = JNI_FALSE;
  21. std::string name =
  22. ROCKSDB_NAMESPACE::JniUtil::copyStdString(env, jname, &has_exception);
  23. if (JNI_TRUE == has_exception) {
  24. return 0;
  25. }
  26. auto* ptr = new std::shared_ptr<ROCKSDB_NAMESPACE::ConcurrentTaskLimiter>(
  27. ROCKSDB_NAMESPACE::NewConcurrentTaskLimiter(name, limit));
  28. return GET_CPLUSPLUS_POINTER(ptr);
  29. }
  30. /*
  31. * Class: org_rocksdb_ConcurrentTaskLimiterImpl
  32. * Method: name
  33. * Signature: (J)Ljava/lang/String;
  34. */
  35. jstring Java_org_rocksdb_ConcurrentTaskLimiterImpl_name(JNIEnv* env, jclass,
  36. jlong handle) {
  37. const auto& limiter = *reinterpret_cast<
  38. std::shared_ptr<ROCKSDB_NAMESPACE::ConcurrentTaskLimiter>*>(handle);
  39. return ROCKSDB_NAMESPACE::JniUtil::toJavaString(env, &limiter->GetName());
  40. }
  41. /*
  42. * Class: org_rocksdb_ConcurrentTaskLimiterImpl
  43. * Method: setMaxOutstandingTask
  44. * Signature: (JI)V
  45. */
  46. void Java_org_rocksdb_ConcurrentTaskLimiterImpl_setMaxOutstandingTask(
  47. JNIEnv*, jclass, jlong handle, jint max_outstanding_task) {
  48. const auto& limiter = *reinterpret_cast<
  49. std::shared_ptr<ROCKSDB_NAMESPACE::ConcurrentTaskLimiter>*>(handle);
  50. limiter->SetMaxOutstandingTask(static_cast<int32_t>(max_outstanding_task));
  51. }
  52. /*
  53. * Class: org_rocksdb_ConcurrentTaskLimiterImpl
  54. * Method: resetMaxOutstandingTask
  55. * Signature: (J)V
  56. */
  57. void Java_org_rocksdb_ConcurrentTaskLimiterImpl_resetMaxOutstandingTask(
  58. JNIEnv*, jclass, jlong handle) {
  59. const auto& limiter = *reinterpret_cast<
  60. std::shared_ptr<ROCKSDB_NAMESPACE::ConcurrentTaskLimiter>*>(handle);
  61. limiter->ResetMaxOutstandingTask();
  62. }
  63. /*
  64. * Class: org_rocksdb_ConcurrentTaskLimiterImpl
  65. * Method: outstandingTask
  66. * Signature: (J)I
  67. */
  68. jint Java_org_rocksdb_ConcurrentTaskLimiterImpl_outstandingTask(JNIEnv*, jclass,
  69. jlong handle) {
  70. const auto& limiter = *reinterpret_cast<
  71. std::shared_ptr<ROCKSDB_NAMESPACE::ConcurrentTaskLimiter>*>(handle);
  72. return static_cast<jint>(limiter->GetOutstandingTask());
  73. }
  74. /*
  75. * Class: org_rocksdb_ConcurrentTaskLimiterImpl
  76. * Method: disposeInternal
  77. * Signature: (J)V
  78. */
  79. void Java_org_rocksdb_ConcurrentTaskLimiterImpl_disposeInternalJni(
  80. JNIEnv*, jclass, jlong jhandle) {
  81. auto* ptr = reinterpret_cast<
  82. std::shared_ptr<ROCKSDB_NAMESPACE::ConcurrentTaskLimiter>*>(jhandle);
  83. delete ptr; // delete std::shared_ptr
  84. }