Skip to content

Commit 4c15bc1

Browse files
committed
Changed to use StandardCharsets.UTF8.
Fixed potential NaN issue. Changed limiter update logic to account for floating point variance.
1 parent 014c2f0 commit 4c15bc1

File tree

3 files changed

+16
-10
lines changed

3 files changed

+16
-10
lines changed

driver/src/main/java/oracle/nosql/driver/util/RateLimiterMap.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,12 +71,18 @@ public synchronized void update(
7171
RateLimiter wrl = new SimpleRateLimiter(writeUnits, durationSeconds);
7272
limiterMap.put(lowerTable, new Entry(rrl, wrl));
7373
} else {
74-
if (rle.readLimiter.getLimitPerSecond() != readUnits) {
75-
rle.readLimiter.setLimitPerSecond(readUnits);
74+
/*
75+
* Set existing limiters to new values. If the new values result in a
76+
* different rate than previous, reset the limiters.
77+
*/
78+
double prevRUs = rle.readLimiter.getLimitPerSecond();
79+
double prevWUs = rle.writeLimiter.getLimitPerSecond();
80+
rle.readLimiter.setLimitPerSecond(readUnits);
81+
rle.writeLimiter.setLimitPerSecond(writeUnits);
82+
if (rle.readLimiter.getLimitPerSecond() != prevRUs) {
7683
rle.readLimiter.reset();
7784
}
78-
if (rle.writeLimiter.getLimitPerSecond() != writeUnits) {
79-
rle.writeLimiter.setLimitPerSecond(writeUnits);
85+
if (rle.writeLimiter.getLimitPerSecond() != prevWUs) {
8086
rle.writeLimiter.reset();
8187
}
8288
}

driver/src/main/java/oracle/nosql/driver/util/SerializationUtil.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
import java.math.MathContext;
1515
import java.math.RoundingMode;
1616
import java.nio.ByteBuffer;
17-
import java.nio.charset.Charset;
17+
import java.nio.charset.StandardCharsets;
1818

1919
/**
2020
* Utility methods to facilitate serialization/deserialization
@@ -24,9 +24,6 @@
2424
*/
2525
public class SerializationUtil {
2626

27-
/* TODO: Use StandardCharsets version in Java 8 */
28-
private static final Charset utf8 = Charset.forName("UTF-8");
29-
3027
public static final String EMPTY_STRING = new String();
3128

3229
public static final byte[] EMPTY_BYTES = { };
@@ -208,7 +205,7 @@ private static String readStdUTF8String(ByteInputStream in)
208205
}
209206
final byte[] bytes = new byte[length];
210207
in.readFully(bytes);
211-
return utf8.decode(ByteBuffer.wrap(bytes)).toString();
208+
return StandardCharsets.UTF_8.decode(ByteBuffer.wrap(bytes)).toString();
212209
}
213210

214211
/**
@@ -277,7 +274,7 @@ private static int writeStdUTF8String(DataOutput out, String value)
277274
if (value == null) {
278275
return writePackedInt(out, -1);
279276
}
280-
final ByteBuffer buffer = utf8.encode(value);
277+
final ByteBuffer buffer = StandardCharsets.UTF_8.encode(value);
281278
final int length = buffer.limit();
282279
int len = writePackedInt(out, length);
283280
if (length > 0) {

driver/src/main/java/oracle/nosql/driver/util/SimpleRateLimiter.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,9 @@ private void enforceMinimumDuration() {
9898

9999
@Override
100100
public double getLimitPerSecond() {
101+
if (nanosPerUnit == 0) {
102+
return 0.0;
103+
}
101104
return 1_000_000_000.0 / (double)nanosPerUnit;
102105
}
103106

0 commit comments

Comments
 (0)