Skip to content

Commit b4eeba8

Browse files
committed
Rename LatencyRecorder to MetricsRecorder and add counter for object leaks
1 parent 4590b6c commit b4eeba8

13 files changed

+130
-101
lines changed

src/main/java/stormpot/BAllocThread.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ class BAllocThread<T extends Poolable> extends Thread {
3535
private final BlockingQueue<BSlot<T>> dead;
3636
private final Reallocator<T> allocator;
3737
private final BSlot<T> poisonPill;
38-
private final LatencyRecorder latencyRecorder;
38+
private final MetricsRecorder metricsRecorder;
3939

4040
// Single reader: this. Many writers.
4141
private volatile int targetSize;
@@ -55,7 +55,7 @@ public BAllocThread(
5555
this.targetSize = config.getSize();
5656
completionLatch = new CountDownLatch(1);
5757
this.allocator = config.getAdaptedReallocator();
58-
this.latencyRecorder = config.getLatencyRecorder();
58+
this.metricsRecorder = config.getMetricsRecorder();
5959
this.size = 0;
6060
this.live = live;
6161
this.dead = dead;
@@ -234,8 +234,8 @@ private void realloc(BSlot<T> slot) {
234234
}
235235

236236
private void recordObjectLifetimeSample(long milliseconds) {
237-
if (latencyRecorder != null) {
238-
latencyRecorder.recordObjectLifetimeSampleMillis(milliseconds);
237+
if (metricsRecorder != null) {
238+
metricsRecorder.recordObjectLifetimeSampleMillis(milliseconds);
239239
}
240240
}
241241

src/main/java/stormpot/BlazePool.java

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public Throwable fillInStackTrace() {
5151
private final BlockingQueue<BSlot<T>> dead;
5252
private final BAllocThread<T> allocThread;
5353
private final Expiration<? super T> deallocRule;
54-
private final LatencyRecorder latencyRecorder;
54+
private final MetricsRecorder metricsRecorder;
5555

5656
/**
5757
* Special slot used to signal that the pool has been shut down.
@@ -76,7 +76,7 @@ public BlazePool(Config<T> config) {
7676
config.validate();
7777
allocThread = new BAllocThread<T>(live, dead, config, poisonPill);
7878
deallocRule = config.getExpiration();
79-
latencyRecorder = config.getLatencyRecorder();
79+
metricsRecorder = config.getMetricsRecorder();
8080
}
8181
allocThread.start();
8282
}
@@ -281,49 +281,54 @@ public boolean isShutDown() {
281281

282282
@Override
283283
public double getObjectLifetimePercentile(double percentile) {
284-
if (latencyRecorder == null) {
284+
if (metricsRecorder == null) {
285285
return Double.NaN;
286286
}
287-
return latencyRecorder.getObjectLifetimePercentile(percentile);
287+
return metricsRecorder.getObjectLifetimePercentile(percentile);
288288
}
289289

290290
@Override
291291
public double getAllocationLatencyPercentile(double percentile) {
292-
if (latencyRecorder == null) {
292+
if (metricsRecorder == null) {
293293
return Double.NaN;
294294
}
295-
return latencyRecorder.getAllocationLatencyPercentile(percentile);
295+
return metricsRecorder.getAllocationLatencyPercentile(percentile);
296296
}
297297

298298
@Override
299299
public double getAllocationFailureLatencyPercentile(double percentile) {
300-
if (latencyRecorder == null) {
300+
if (metricsRecorder == null) {
301301
return Double.NaN;
302302
}
303-
return latencyRecorder.getAllocationFailureLatencyPercentile(percentile);
303+
return metricsRecorder.getAllocationFailureLatencyPercentile(percentile);
304304
}
305305

306306
@Override
307307
public double getReallocationLatencyPercentile(double percentile) {
308-
if (latencyRecorder == null) {
308+
if (metricsRecorder == null) {
309309
return Double.NaN;
310310
}
311-
return latencyRecorder.getReallocationLatencyPercentile(percentile);
311+
return metricsRecorder.getReallocationLatencyPercentile(percentile);
312312
}
313313

314314
@Override
315315
public double getReallocationFailureLatencyPercentile(double percentile) {
316-
if (latencyRecorder == null) {
316+
if (metricsRecorder == null) {
317317
return Double.NaN;
318318
}
319-
return latencyRecorder.getReallocationFailurePercentile(percentile);
319+
return metricsRecorder.getReallocationFailurePercentile(percentile);
320320
}
321321

322322
@Override
323323
public double getDeallocationLatencyPercentile(double percentile) {
324-
if (latencyRecorder == null) {
324+
if (metricsRecorder == null) {
325325
return Double.NaN;
326326
}
327-
return latencyRecorder.getDeallocationLatencyPercentile(percentile);
327+
return metricsRecorder.getDeallocationLatencyPercentile(percentile);
328+
}
329+
330+
@Override
331+
public long getLeakedObjectsCount() {
332+
return metricsRecorder.getLeakedObjectsCount();
328333
}
329334
}

src/main/java/stormpot/Config.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public class Config<T extends Poolable> {
5555
private Expiration<? super T> expiration =
5656
new TimeSpreadExpiration(480000, 600000, TimeUnit.MILLISECONDS); // 8 to 10 minutes
5757
private Allocator<?> allocator;
58-
private LatencyRecorder latencyRecorder;
58+
private MetricsRecorder metricsRecorder;
5959

6060
/**
6161
* Build a new empty Config object. Most settings have reasonable default
@@ -167,13 +167,13 @@ public synchronized Expiration<? super T> getExpiration() {
167167
return expiration;
168168
}
169169

170-
public synchronized Config<T> setLatencyRecorder(LatencyRecorder latencyRecorder) {
171-
this.latencyRecorder = latencyRecorder;
170+
public synchronized Config<T> setMetricsRecorder(MetricsRecorder metricsRecorder) {
171+
this.metricsRecorder = metricsRecorder;
172172
return this;
173173
}
174174

175-
public synchronized LatencyRecorder getLatencyRecorder() {
176-
return latencyRecorder;
175+
public synchronized MetricsRecorder getMetricsRecorder() {
176+
return metricsRecorder;
177177
}
178178

179179
/**
@@ -202,18 +202,18 @@ Reallocator<T> getAdaptedReallocator() {
202202
if (allocator == null) {
203203
return null;
204204
}
205-
if (latencyRecorder == null) {
205+
if (metricsRecorder == null) {
206206
if (allocator instanceof Reallocator) {
207207
return (Reallocator<T>) allocator;
208208
}
209209
return new ReallocatingAdaptor<T>((Allocator<T>) allocator);
210210
} else {
211211
if (allocator instanceof Reallocator) {
212212
return new TimingReallocatorAdaptor<T>(
213-
(Reallocator<T>) allocator, latencyRecorder);
213+
(Reallocator<T>) allocator, metricsRecorder);
214214
}
215215
return new TimingReallocatingAdaptor<T>(
216-
(Allocator<T>) allocator, latencyRecorder);
216+
(Allocator<T>) allocator, metricsRecorder);
217217
}
218218
}
219219
}

src/main/java/stormpot/ManagedPool.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,4 +83,6 @@ public interface ManagedPool {
8383
double getReallocationFailureLatencyPercentile(double percentile);
8484

8585
double getDeallocationLatencyPercentile(double percentile);
86+
87+
long getLeakedObjectsCount();
8688
}

src/main/java/stormpot/LatencyRecorder.java renamed to src/main/java/stormpot/MetricsRecorder.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
*/
1616
package stormpot;
1717

18-
public interface LatencyRecorder {
18+
public interface MetricsRecorder {
1919

2020
void recordAllocationLatencySampleMillis(long milliseconds);
2121

@@ -40,4 +40,6 @@ public interface LatencyRecorder {
4040
public double getReallocationFailurePercentile(double percentile);
4141

4242
public double getObjectLifetimePercentile(double percentile);
43+
44+
long getLeakedObjectsCount();
4345
}

src/main/java/stormpot/QAllocThread.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class QAllocThread<T extends Poolable> extends Thread {
3434
private final BlockingQueue<QSlot<T>> dead;
3535
private final Reallocator<T> allocator;
3636
private final QSlot<T> poisonPill;
37-
private final LatencyRecorder latencyRecorder;
37+
private final MetricsRecorder metricsRecorder;
3838

3939
// Single reader: this. Many writers.
4040
private volatile int targetSize;
@@ -52,8 +52,8 @@ public QAllocThread(
5252
BlockingQueue<QSlot<T>> dead,
5353
Config<T> config,
5454
QSlot<T> poisonPill,
55-
LatencyRecorder latencyRecorder) {
56-
this.latencyRecorder = latencyRecorder;
55+
MetricsRecorder metricsRecorder) {
56+
this.metricsRecorder = metricsRecorder;
5757
this.targetSize = config.getSize();
5858
completionLatch = new CountDownLatch(1);
5959
this.allocator = config.getAdaptedReallocator();
@@ -201,8 +201,8 @@ private void realloc(QSlot<T> slot) {
201201
}
202202

203203
private void recordObjectLifetimeSample(long milliseconds) {
204-
if (latencyRecorder != null) {
205-
latencyRecorder.recordObjectLifetimeSampleMillis(milliseconds);
204+
if (metricsRecorder != null) {
205+
metricsRecorder.recordObjectLifetimeSampleMillis(milliseconds);
206206
}
207207
}
208208

src/main/java/stormpot/QueuePool.java

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public class QueuePool<T extends Poolable>
4444
private final BlockingQueue<QSlot<T>> dead;
4545
private final QAllocThread<T> allocThread;
4646
private final Expiration<? super T> deallocRule;
47-
private final LatencyRecorder latencyRecorder;
47+
private final MetricsRecorder metricsRecorder;
4848
private volatile boolean shutdown = false;
4949

5050
/**
@@ -61,9 +61,9 @@ public QueuePool(Config<T> config) {
6161
dead = QueueFactory.createUnboundedBlockingQueue();
6262
synchronized (config) {
6363
config.validate();
64-
latencyRecorder = config.getLatencyRecorder();
64+
metricsRecorder = config.getMetricsRecorder();
6565
allocThread = new QAllocThread<T>(
66-
live, dead, config, poisonPill, latencyRecorder);
66+
live, dead, config, poisonPill, metricsRecorder);
6767
deallocRule = config.getExpiration();
6868
}
6969
allocThread.start();
@@ -166,49 +166,54 @@ public boolean isShutDown() {
166166

167167
@Override
168168
public double getObjectLifetimePercentile(double percentile) {
169-
if (latencyRecorder == null) {
169+
if (metricsRecorder == null) {
170170
return Double.NaN;
171171
}
172-
return latencyRecorder.getObjectLifetimePercentile(percentile);
172+
return metricsRecorder.getObjectLifetimePercentile(percentile);
173173
}
174174

175175
@Override
176176
public double getAllocationLatencyPercentile(double percentile) {
177-
if (latencyRecorder == null) {
177+
if (metricsRecorder == null) {
178178
return Double.NaN;
179179
}
180-
return latencyRecorder.getAllocationLatencyPercentile(percentile);
180+
return metricsRecorder.getAllocationLatencyPercentile(percentile);
181181
}
182182

183183
@Override
184184
public double getAllocationFailureLatencyPercentile(double percentile) {
185-
if (latencyRecorder == null) {
185+
if (metricsRecorder == null) {
186186
return Double.NaN;
187187
}
188-
return latencyRecorder.getAllocationFailureLatencyPercentile(percentile);
188+
return metricsRecorder.getAllocationFailureLatencyPercentile(percentile);
189189
}
190190

191191
@Override
192192
public double getReallocationLatencyPercentile(double percentile) {
193-
if (latencyRecorder == null) {
193+
if (metricsRecorder == null) {
194194
return Double.NaN;
195195
}
196-
return latencyRecorder.getReallocationLatencyPercentile(percentile);
196+
return metricsRecorder.getReallocationLatencyPercentile(percentile);
197197
}
198198

199199
@Override
200200
public double getReallocationFailureLatencyPercentile(double percentile) {
201-
if (latencyRecorder == null) {
201+
if (metricsRecorder == null) {
202202
return Double.NaN;
203203
}
204-
return latencyRecorder.getReallocationFailurePercentile(percentile);
204+
return metricsRecorder.getReallocationFailurePercentile(percentile);
205205
}
206206

207207
@Override
208208
public double getDeallocationLatencyPercentile(double percentile) {
209-
if (latencyRecorder == null) {
209+
if (metricsRecorder == null) {
210210
return Double.NaN;
211211
}
212-
return latencyRecorder.getDeallocationLatencyPercentile(percentile);
212+
return metricsRecorder.getDeallocationLatencyPercentile(percentile);
213+
}
214+
215+
@Override
216+
public long getLeakedObjectsCount() {
217+
return metricsRecorder.getLeakedObjectsCount();
213218
}
214219
}

src/main/java/stormpot/TimingReallocatingAdaptor.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@ class TimingReallocatingAdaptor<T extends Poolable>
1919
extends ReallocatingAdaptor<T>
2020
implements Reallocator<T> {
2121

22-
protected final LatencyRecorder latencyRecorder;
22+
protected final MetricsRecorder metricsRecorder;
2323

2424
public TimingReallocatingAdaptor(
2525
Allocator<T> allocator,
26-
LatencyRecorder latencyRecorder) {
26+
MetricsRecorder metricsRecorder) {
2727
super(allocator);
28-
this.latencyRecorder = latencyRecorder;
28+
this.metricsRecorder = metricsRecorder;
2929
}
3030

3131
@Override
@@ -34,11 +34,11 @@ public T allocate(Slot slot) throws Exception {
3434
try {
3535
T obj = super.allocate(slot);
3636
long elapsed = System.currentTimeMillis() - start;
37-
latencyRecorder.recordAllocationLatencySampleMillis(elapsed);
37+
metricsRecorder.recordAllocationLatencySampleMillis(elapsed);
3838
return obj;
3939
} catch (Exception e) {
4040
long elapsed = System.currentTimeMillis() - start;
41-
latencyRecorder.recordAllocationFailureLatencySampleMillis(elapsed);
41+
metricsRecorder.recordAllocationFailureLatencySampleMillis(elapsed);
4242
throw e;
4343
}
4444
}
@@ -50,7 +50,7 @@ public void deallocate(T poolable) throws Exception {
5050
super.deallocate(poolable);
5151
} finally {
5252
long elapsed = System.currentTimeMillis() - start;
53-
latencyRecorder.recordDeallocationLatencySampleMillis(elapsed);
53+
metricsRecorder.recordDeallocationLatencySampleMillis(elapsed);
5454
}
5555
}
5656
}

src/main/java/stormpot/TimingReallocatorAdaptor.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ class TimingReallocatorAdaptor<T extends Poolable>
1919
extends TimingReallocatingAdaptor<T>
2020
implements Reallocator<T> {
2121
public TimingReallocatorAdaptor(
22-
Reallocator<T> allocator, LatencyRecorder latencyRecorder) {
23-
super(allocator, latencyRecorder);
22+
Reallocator<T> allocator, MetricsRecorder metricsRecorder) {
23+
super(allocator, metricsRecorder);
2424
}
2525

2626
@Override
@@ -29,11 +29,11 @@ public T reallocate(Slot slot, T poolable) throws Exception {
2929
try {
3030
T obj = ((Reallocator<T>) allocator).reallocate(slot, poolable);
3131
long elapsed = System.currentTimeMillis() - start;
32-
latencyRecorder.recordReallocationLatencySampleMillis(elapsed);
32+
metricsRecorder.recordReallocationLatencySampleMillis(elapsed);
3333
return obj;
3434
} catch (Exception e) {
3535
long elapsed = System.currentTimeMillis() - start;
36-
latencyRecorder.recordReallocationFailureLatencySampleMillis(elapsed);
36+
metricsRecorder.recordReallocationFailureLatencySampleMillis(elapsed);
3737
throw e;
3838
}
3939
}

0 commit comments

Comments
 (0)