forked from XRPLF/rippled
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request XRPLF#302 from ankgup87/master
[Java] Add rate limiter
- Loading branch information
Showing
7 changed files
with
112 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
// Copyright (c) 2014, Facebook, Inc. All rights reserved. | ||
// This source code is licensed under the BSD-style license found in the | ||
// LICENSE file in the root directory of this source tree. An additional grant | ||
// of patent rights can be found in the PATENTS file in the same directory. | ||
package org.rocksdb; | ||
|
||
/** | ||
* Config for rate limiter, which is used to control write rate of flush and | ||
* compaction. | ||
*/ | ||
public class GenericRateLimiterConfig extends RateLimiterConfig { | ||
private static final long DEFAULT_REFILL_PERIOD_MICROS = (100 * 1000); | ||
private static final int DEFAULT_FAIRNESS = 10; | ||
|
||
public GenericRateLimiterConfig(long rateBytesPerSecond, | ||
long refillPeriodMicros, int fairness) { | ||
rateBytesPerSecond_ = rateBytesPerSecond; | ||
refillPeriodMicros_ = refillPeriodMicros; | ||
fairness_ = fairness; | ||
} | ||
|
||
public GenericRateLimiterConfig(long rateBytesPerSecond) { | ||
this(rateBytesPerSecond, DEFAULT_REFILL_PERIOD_MICROS, DEFAULT_FAIRNESS); | ||
} | ||
|
||
@Override protected long newRateLimiterHandle() { | ||
return newRateLimiterHandle(rateBytesPerSecond_, refillPeriodMicros_, | ||
fairness_); | ||
} | ||
|
||
private native long newRateLimiterHandle(long rateBytesPerSecond, | ||
long refillPeriodMicros, int fairness); | ||
private final long rateBytesPerSecond_; | ||
private final long refillPeriodMicros_; | ||
private final int fairness_; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
// Copyright (c) 2014, Facebook, Inc. All rights reserved. | ||
// This source code is licensed under the BSD-style license found in the | ||
// LICENSE file in the root directory of this source tree. An additional grant | ||
// of patent rights can be found in the PATENTS file in the same directory. | ||
package org.rocksdb; | ||
|
||
/** | ||
* Config for rate limiter, which is used to control write rate of flush and | ||
* compaction. | ||
*/ | ||
public abstract class RateLimiterConfig { | ||
/** | ||
* This function should only be called by Options.setRateLimiter(), | ||
* which will create a c++ shared-pointer to the c++ RateLimiter | ||
* that is associated with the Java RateLimtierConifg. | ||
* | ||
* @see Options.setRateLimiter() | ||
*/ | ||
abstract protected long newRateLimiterHandle(); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
// Copyright (c) 2014, Facebook, Inc. All rights reserved. | ||
// This source code is licensed under the BSD-style license found in the | ||
// LICENSE file in the root directory of this source tree. An additional grant | ||
// of patent rights can be found in the PATENTS file in the same directory. | ||
// | ||
// This file implements the "bridge" between Java and C++ for RateLimiter. | ||
|
||
#include "rocksjni/portal.h" | ||
#include "include/org_rocksdb_GenericRateLimiterConfig.h" | ||
#include "rocksdb/rate_limiter.h" | ||
|
||
/* | ||
* Class: org_rocksdb_GenericRateLimiterConfig | ||
* Method: newRateLimiterHandle | ||
* Signature: (JJI)J | ||
*/ | ||
jlong Java_org_rocksdb_GenericRateLimiterConfig_newRateLimiterHandle( | ||
JNIEnv* env, jobject jobj, jlong jrate_bytes_per_second, | ||
jlong jrefill_period_micros, jint jfairness) { | ||
return reinterpret_cast<jlong>(rocksdb::NewGenericRateLimiter( | ||
rocksdb::jlong_to_size_t(jrate_bytes_per_second), | ||
rocksdb::jlong_to_size_t(jrefill_period_micros), | ||
static_cast<int32_t>(jfairness))); | ||
} |