Author: markt
Date: Fri Sep 25 21:05:53 2015
New Revision: 1705353
URL: http://svn.apache.org/viewvc?rev=1705353&view=rev
Log:
Start thinking about non-blocking reads
Modified:
tomcat/trunk/java/org/apache/coyote/http2/Stream.java
tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.java
Modified: tomcat/trunk/java/org/apache/coyote/http2/Stream.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/Stream.java?rev=1705353&r1=1705352&r2=1705353&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/Stream.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http2/Stream.java Fri Sep 25 21:05:53
2015
@@ -292,6 +292,11 @@ public class Stream extends AbstractStre
}
+ StreamInputBuffer getInputBuffer() {
+ return inputBuffer;
+ }
+
+
StreamOutputBuffer getOutputBuffer() {
return outputBuffer;
}
@@ -473,6 +478,7 @@ public class Stream extends AbstractStre
// This buffer is the destination for incoming data. It is normally is
// 'write mode'.
private volatile ByteBuffer inBuffer;
+ private volatile boolean readInterest;
@Override
public int doRead(ByteChunk chunk) throws IOException {
@@ -519,6 +525,28 @@ public class Stream extends AbstractStre
}
+ boolean isReady() {
+ synchronized (inBuffer) {
+ if (inBuffer.position() == 0) {
+ readInterest = true;
+ return false;
+ } else {
+ return true;
+ }
+ }
+ }
+
+
+ synchronized boolean isRegisteredForRead() {
+ if (readInterest) {
+ readInterest = false;
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+
public ByteBuffer getInBuffer() {
ensureBuffersExist();
return inBuffer;
@@ -526,13 +554,12 @@ public class Stream extends AbstractStre
private void ensureBuffersExist() {
- if (inBuffer != null) {
- return;
- }
- synchronized (this) {
- if (inBuffer == null) {
- inBuffer = ByteBuffer.allocate(16 * 1024);
- outBuffer = new byte[16 * 1024];
+ if (inBuffer == null) {
+ synchronized (this) {
+ if (inBuffer == null) {
+ inBuffer = ByteBuffer.allocate(16 * 1024);
+ outBuffer = new byte[16 * 1024];
+ }
}
}
}
Modified: tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.java?rev=1705353&r1=1705352&r2=1705353&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.java Fri Sep 25
21:05:53 2015
@@ -298,6 +298,11 @@ public class StreamProcessor extends Abs
result.set(stream.isInputFinished());
break;
}
+ case NB_READ_INTEREST: {
+ AtomicBoolean result = (AtomicBoolean) param;
+ result.set(stream.getInputBuffer().isReady());
+ break;
+ }
case NB_WRITE_INTEREST: {
AtomicBoolean result = (AtomicBoolean) param;
result.set(stream.getOutputBuffer().isReady());
@@ -327,7 +332,6 @@ public class StreamProcessor extends Abs
case CLOSE_NOW:
case DISABLE_SWALLOW_INPUT:
case END_REQUEST:
- case NB_READ_INTEREST:
case REQ_SET_BODY_REPLAY:
case RESET:
log.info("TODO: Implement [" + actionCode + "] for HTTP/2");
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]