private BucketingFunction newFunc() { return new BucketingFunction( BUCKET_WIDTH, SIGNIFICANT_BUCKETS, SIGNIFICANT_SAMPLES, SUM); }
/** Remove one sample (from bucket) at {@code timeMsSinceEpoch}. */ public void remove(long timeMsSinceEpoch) { long key = key(timeMsSinceEpoch); Bucket bucket = buckets.get(key); if (bucket == null) { return; } if (bucket.remove()) { buckets.remove(key); } }
@Test public void significantSamples() { BucketingFunction f = newFunc(); assertFalse(f.isSignificant()); for (int i = 0; i < SIGNIFICANT_SAMPLES - 1; i++) { f.add(0, 0); assertFalse(f.isSignificant()); } f.add(0, 0); assertTrue(f.isSignificant()); }
long unreadMin = minUnreadTimestampMsSinceEpoch.get(); if (readMin == Long.MAX_VALUE && unreadMin == Long.MAX_VALUE || minUnreadTimestampMsSinceEpoch.isSignificant()) {
maxReceivedTimestampMsSinceEpoch.add( requestTimeMsSinceEpoch, incomingMessage.timestampMsSinceEpoch); minUnreadTimestampMsSinceEpoch.add( requestTimeMsSinceEpoch, incomingMessage.timestampMsSinceEpoch);
minUnreadTimestampMsSinceEpoch.remove(current.requestTimeMsSinceEpoch); current = null;
@Test public void significantBuckets() { BucketingFunction f = newFunc(); assertFalse(f.isSignificant()); f.add(0, 0); assertFalse(f.isSignificant()); f.add(BUCKET_WIDTH, 0); assertTrue(f.isSignificant()); }
notYetReadBytes = 0; minUnreadTimestampMsSinceEpoch = new BucketingFunction( SAMPLE_UPDATE.getMillis(), MIN_WATERMARK_SPREAD, MIN_WATERMARK_MESSAGES, MIN); minReadTimestampMsSinceEpoch = newFun(MIN);
/** Add one sample of {@code value} (to bucket) at {@code timeMsSinceEpoch}. */ public void add(long timeMsSinceEpoch, long value) { long key = key(timeMsSinceEpoch); Bucket bucket = buckets.computeIfAbsent(key, k -> new Bucket(this)); bucket.add(this, value); }