This is an automated email from the ASF dual-hosted git repository. afs pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/jena.git
commit 727e351402acfe8c4deef7b1834db86057bac450 Author: Andy Seaborne <[email protected]> AuthorDate: Sun Aug 2 17:26:29 2026 +0100 GH-4084: ByteBufferPool test with Fuseki request --- .../jena/fuseki/main/TestFusekiServerBuild.java | 47 +++++++++++++--------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/jena-fuseki2/jena-fuseki-main/src/test/java/org/apache/jena/fuseki/main/TestFusekiServerBuild.java b/jena-fuseki2/jena-fuseki-main/src/test/java/org/apache/jena/fuseki/main/TestFusekiServerBuild.java index 1cf0eade9f..9be9056ad3 100644 --- a/jena-fuseki2/jena-fuseki-main/src/test/java/org/apache/jena/fuseki/main/TestFusekiServerBuild.java +++ b/jena-fuseki2/jena-fuseki-main/src/test/java/org/apache/jena/fuseki/main/TestFusekiServerBuild.java @@ -25,11 +25,14 @@ import static org.apache.jena.fuseki.main.FusekiTestLib.expect400; import static org.apache.jena.fuseki.main.FusekiTestLib.expect404; import static org.apache.jena.fuseki.main.FusekiTestLib.expectQuery400; import static org.apache.jena.fuseki.main.FusekiTestLib.expectQuery404; +import static org.apache.jena.fuseki.main.sys.FusekiSystemConstants.jettyOutputBufferSize; import static org.junit.jupiter.api.Assertions.*; import java.io.IOException; import java.util.function.Consumer; +import org.junit.jupiter.api.Test; + import jakarta.servlet.ServletContext; import org.apache.jena.atlas.iterator.Iter; import org.apache.jena.atlas.logging.Log; @@ -37,6 +40,7 @@ import org.apache.jena.atlas.logging.LogCtl; import org.apache.jena.atlas.web.TypedInputStream; import org.apache.jena.fuseki.Fuseki; import org.apache.jena.fuseki.FusekiException; +import org.apache.jena.fuseki.main.runner.FusekiRunner; import org.apache.jena.fuseki.server.DataAccessPointRegistry; import org.apache.jena.fuseki.server.DataService; import org.apache.jena.fuseki.server.Operation; @@ -54,13 +58,11 @@ import org.apache.jena.sparql.exec.RowSet; import org.apache.jena.sparql.exec.http.GSP; import org.apache.jena.sparql.exec.http.QueryExecHTTP; import org.apache.jena.sparql.sse.SSE; -import org.apache.jena.fuseki.main.sys.FusekiSystemConstants; import org.apache.jena.system.Txn; import org.apache.jena.update.UpdateExecution; import org.eclipse.jetty.io.ArrayByteBufferPool; import org.eclipse.jetty.io.RetainableByteBuffer; import org.eclipse.jetty.server.Server; -import org.junit.jupiter.api.Test; import org.slf4j.Logger; public class TestFusekiServerBuild { @@ -91,32 +93,39 @@ public class TestFusekiServerBuild { @Test public void fuseki_build_byte_buffer_pool() { FusekiServer server = FusekiServer.create().port(0).build(); + // Not started. Server jettyServer = server.getJettyServer(); ArrayByteBufferPool pool = jettyServer.getBean(ArrayByteBufferPool.class); assertNotNull(pool); - assertTrue(pool.getMaxCapacity() >= FusekiSystemConstants.jettyOutputBufferSize); - } - - @Test public void fuseki_build_byte_buffer_pool_no_bucket_acquire() { - FusekiServer server = FusekiServer.create().port(0).build(); - Server jettyServer = server.getJettyServer(); - ArrayByteBufferPool pool = jettyServer.getBean(ArrayByteBufferPool.class); + assertTrue(pool.getMaxCapacity() >= jettyOutputBufferSize); - int size = FusekiSystemConstants.jettyOutputBufferSize; - RetainableByteBuffer.Mutable buffer = pool.acquire(size, true); + RetainableByteBuffer.Mutable buffer = pool.acquire(jettyOutputBufferSize, true); + assertNotNull(buffer); buffer.release(); - - assertTrue(pool.getNoBucketDirectAcquires().isEmpty()); } - @Test public void byte_buffer_pool_default_capacity_fails_no_bucket_check() { - ArrayByteBufferPool defaultPool = new ArrayByteBufferPool(); - int size = FusekiSystemConstants.jettyOutputBufferSize; + @Test public void fuseki_byte_buffer_pool_request() { + FusekiServer server = FusekiRunner.serverBasic().construct("--port=0", "--mem", "/ds").start(); + try { + String URL = server.datasetURL("/ds"); + + Server jettyServer = server.getJettyServer(); + ArrayByteBufferPool pool = jettyServer.getBean(ArrayByteBufferPool.class); + assertTrue(pool.getMaxCapacity() >= jettyOutputBufferSize); - RetainableByteBuffer.Mutable buffer = defaultPool.acquire(size, true); - buffer.release(); + // Before - nothing in the pool for a Fuseki-sized direct ByteBuffer. + int poolSizeBefore = pool.poolFor(jettyOutputBufferSize, true/*direct*/).size(); + assertEquals(0, poolSizeBefore); - assertFalse(defaultPool.getNoBucketDirectAcquires().isEmpty()); + // The request causes a new ArrayByteBufferPool item which is returned and then pooled. + QueryExec.service(URL).query("ASK{}").ask(); + + // After - one item in the pool + int poolSizeAfter = pool.poolFor(jettyOutputBufferSize, true).size(); + assertEquals(1, poolSizeAfter); + } finally { + server.stop(); + } } // The port in "testing/jetty.xml" is 1077
