Adds trace logging for java non blocking server memory limit
Client: java
Patch: Keith Turner
Co-authored-by: Christopher Tubbs
This closes #3135
diff --git a/lib/java/src/main/java/org/apache/thrift/server/AbstractNonblockingServer.java b/lib/java/src/main/java/org/apache/thrift/server/AbstractNonblockingServer.java
index 2bcd4b2..af2bc63 100644
--- a/lib/java/src/main/java/org/apache/thrift/server/AbstractNonblockingServer.java
+++ b/lib/java/src/main/java/org/apache/thrift/server/AbstractNonblockingServer.java
@@ -319,6 +319,14 @@
}
/**
+ * @return the amount of memory currently used to read data from clients. This information can
+ * be useful for debugging, metrics, and configuring the maximum memory limit.
+ */
+ public final long getReadBufferBytesAllocated() {
+ return readBufferBytesAllocated.get();
+ }
+
+ /**
* Give this FrameBuffer a chance to read. The selector loop should have received a read event
* for this FrameBuffer.
*
@@ -358,7 +366,13 @@
// if this frame will push us over the memory limit, then return.
// with luck, more memory will free up the next time around.
- if (readBufferBytesAllocated.get() + frameSize > MAX_READ_BUFFER_BYTES) {
+ long currentAllocated = getReadBufferBytesAllocated();
+ if (currentAllocated + frameSize > MAX_READ_BUFFER_BYTES) {
+ LOGGER.trace(
+ "Deferring reading frame of size {} because {} is already buffered and {} is the limit.",
+ frameSize,
+ currentAllocated,
+ MAX_READ_BUFFER_BYTES);
return true;
}