From: <dm...@us...> - 2010-11-01 12:32:43
|
Revision: 3851 http://bigdata.svn.sourceforge.net/bigdata/?rev=3851&view=rev Author: dmacgbr Date: 2010-11-01 12:32:36 +0000 (Mon, 01 Nov 2010) Log Message: ----------- Remove the resource leak, i.e. the thread 'com.bigdata.bop.engine.QueryEngine.engineService1', encountered during unit test runs. The problem is caused by the thread being statically cached in QueryEngineFactory using an instance of IIndexManager as a key. Each test typically has a unique IIndexManager. Code has been added to remove the instance in the '__tearDownUnitTest()' method of BigdataSail. Similar code has been added to a number of individual test classes because a) '__tearDownUnitTest ()' is not public, b) interactions with other tear down code. Modified Paths: -------------- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/bop/fed/QueryEngineFactory.java branches/QUADS_QUERY_BRANCH/bigdata-sails/src/java/com/bigdata/rdf/sail/BigdataSail.java branches/QUADS_QUERY_BRANCH/bigdata-sails/src/test/com/bigdata/rdf/sail/tck/BigdataConnectionTest.java branches/QUADS_QUERY_BRANCH/bigdata-sails/src/test/com/bigdata/rdf/sail/tck/BigdataEmbeddedFederationSparqlTest.java branches/QUADS_QUERY_BRANCH/bigdata-sails/src/test/com/bigdata/rdf/sail/tck/BigdataFederationSparqlTest.java branches/QUADS_QUERY_BRANCH/bigdata-sails/src/test/com/bigdata/rdf/sail/tck/BigdataSparqlTest.java branches/QUADS_QUERY_BRANCH/bigdata-sails/src/test/com/bigdata/rdf/sail/tck/BigdataStoreTest.java Modified: branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/bop/fed/QueryEngineFactory.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/bop/fed/QueryEngineFactory.java 2010-10-29 12:22:15 UTC (rev 3850) +++ branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/bop/fed/QueryEngineFactory.java 2010-11-01 12:32:36 UTC (rev 3851) @@ -87,6 +87,22 @@ } /** + * Removes a QueryEngine instance from the cache if it is present, returning it to the caller. This + * method is unlikely to be useful in applications but the unit test framework requires it in order + * to avoid resource starvation as each test typically creates a unique IIndexManager. + * + * @param indexManager the database + * @return the query controller if present, null otherwise. + */ + public static QueryEngine removeQueryController ( final IIndexManager indexManager ) + { + if (indexManager instanceof IBigdataFederation<?>) { + return federationQECache.remove ( ( IBigdataFederation<?> )indexManager ) ; + } + return standaloneQECache.remove ( ( Journal )indexManager ) ; + } + + /** * Singleton factory for standalone. * * @param indexManager Modified: branches/QUADS_QUERY_BRANCH/bigdata-sails/src/java/com/bigdata/rdf/sail/BigdataSail.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata-sails/src/java/com/bigdata/rdf/sail/BigdataSail.java 2010-10-29 12:22:15 UTC (rev 3850) +++ branches/QUADS_QUERY_BRANCH/bigdata-sails/src/java/com/bigdata/rdf/sail/BigdataSail.java 2010-11-01 12:32:36 UTC (rev 3851) @@ -130,6 +130,8 @@ import com.bigdata.rdf.rio.StatementBuffer; import com.bigdata.rdf.rules.BackchainAccessPath; import com.bigdata.rdf.rules.InferenceEngine; +import com.bigdata.rdf.sail.BigdataSail.BigdataSailConnection; +import com.bigdata.rdf.sail.BigdataSail.Options; import com.bigdata.rdf.spo.ExplicitSPOFilter; import com.bigdata.rdf.spo.ISPO; import com.bigdata.rdf.spo.InferredSPOFilter; @@ -1049,7 +1051,9 @@ try { shutDown(); - + QueryEngine qe = QueryEngineFactory.getQueryController(database.getIndexManager()); + if ( null != qe ) + qe.shutdownNow () ; database.__tearDownUnitTest(); } catch (Throwable t) { Modified: branches/QUADS_QUERY_BRANCH/bigdata-sails/src/test/com/bigdata/rdf/sail/tck/BigdataConnectionTest.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata-sails/src/test/com/bigdata/rdf/sail/tck/BigdataConnectionTest.java 2010-10-29 12:22:15 UTC (rev 3850) +++ branches/QUADS_QUERY_BRANCH/bigdata-sails/src/test/com/bigdata/rdf/sail/tck/BigdataConnectionTest.java 2010-11-01 12:32:36 UTC (rev 3851) @@ -35,12 +35,14 @@ import org.openrdf.repository.Repository; import org.openrdf.repository.RepositoryConnectionTest; +import com.bigdata.bop.engine.QueryEngine; +import com.bigdata.bop.fed.QueryEngineFactory; import com.bigdata.btree.keys.CollatorEnum; import com.bigdata.btree.keys.StrengthEnum; import com.bigdata.journal.IIndexManager; import com.bigdata.rdf.sail.BigdataSail; +import com.bigdata.rdf.sail.BigdataSail.Options; import com.bigdata.rdf.sail.BigdataSailRepository; -import com.bigdata.rdf.sail.BigdataSail.Options; import com.bigdata.rdf.store.LocalTripleStore; public class BigdataConnectionTest extends RepositoryConnectionTest { @@ -172,7 +174,12 @@ super.tearDown(); if (backend != null) + { + QueryEngine qe = QueryEngineFactory.removeQueryController ( backend ) ; + if ( null != qe ) + qe.shutdownNow () ; backend.destroy(); + } } Modified: branches/QUADS_QUERY_BRANCH/bigdata-sails/src/test/com/bigdata/rdf/sail/tck/BigdataEmbeddedFederationSparqlTest.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata-sails/src/test/com/bigdata/rdf/sail/tck/BigdataEmbeddedFederationSparqlTest.java 2010-10-29 12:22:15 UTC (rev 3850) +++ branches/QUADS_QUERY_BRANCH/bigdata-sails/src/test/com/bigdata/rdf/sail/tck/BigdataEmbeddedFederationSparqlTest.java 2010-11-01 12:32:36 UTC (rev 3851) @@ -41,11 +41,13 @@ import org.openrdf.repository.RepositoryException; import org.openrdf.repository.dataset.DatasetRepository; +import com.bigdata.bop.engine.QueryEngine; +import com.bigdata.bop.fed.QueryEngineFactory; import com.bigdata.journal.IIndexManager; import com.bigdata.journal.ITx; import com.bigdata.rdf.sail.BigdataSail; +import com.bigdata.rdf.sail.BigdataSail.Options; import com.bigdata.rdf.sail.BigdataSailRepository; -import com.bigdata.rdf.sail.BigdataSail.Options; import com.bigdata.rdf.store.AbstractTripleStore; import com.bigdata.rdf.store.ScaleOutTripleStore; import com.bigdata.resources.ResourceManager; @@ -220,7 +222,10 @@ } protected void tearDownBackend(IIndexManager backend) { - + QueryEngine qe = QueryEngineFactory.removeQueryController ( backend ) ; + if ( null != qe ) + qe.shutdownNow () ; + backend.destroy(); if (client != null) { Modified: branches/QUADS_QUERY_BRANCH/bigdata-sails/src/test/com/bigdata/rdf/sail/tck/BigdataFederationSparqlTest.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata-sails/src/test/com/bigdata/rdf/sail/tck/BigdataFederationSparqlTest.java 2010-10-29 12:22:15 UTC (rev 3850) +++ branches/QUADS_QUERY_BRANCH/bigdata-sails/src/test/com/bigdata/rdf/sail/tck/BigdataFederationSparqlTest.java 2010-11-01 12:32:36 UTC (rev 3851) @@ -38,14 +38,16 @@ import org.openrdf.repository.RepositoryConnection; import org.openrdf.repository.dataset.DatasetRepository; +import com.bigdata.bop.engine.QueryEngine; +import com.bigdata.bop.fed.QueryEngineFactory; import com.bigdata.btree.keys.CollatorEnum; import com.bigdata.btree.keys.KeyBuilder; import com.bigdata.btree.keys.StrengthEnum; import com.bigdata.journal.ITx; import com.bigdata.rdf.sail.BigdataSail; +import com.bigdata.rdf.sail.BigdataSail.Options; import com.bigdata.rdf.sail.BigdataSailRepository; import com.bigdata.rdf.sail.BigdataSailRepositoryConnection; -import com.bigdata.rdf.sail.BigdataSail.Options; import com.bigdata.rdf.store.ScaleOutTripleStore; import com.bigdata.service.jini.JiniClient; import com.bigdata.service.jini.JiniFederation; @@ -128,6 +130,12 @@ throws Exception { super.tearDown () ; + if ( null != _sail ) + { + QueryEngine qe = QueryEngineFactory.removeQueryController ( _sail.getDatabase ().getIndexManager () ) ; + if ( null != qe ) + qe.shutdownNow () ; + } if (_ts != null) { _ts.destroy(); _ts = null; Modified: branches/QUADS_QUERY_BRANCH/bigdata-sails/src/test/com/bigdata/rdf/sail/tck/BigdataSparqlTest.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata-sails/src/test/com/bigdata/rdf/sail/tck/BigdataSparqlTest.java 2010-10-29 12:22:15 UTC (rev 3850) +++ branches/QUADS_QUERY_BRANCH/bigdata-sails/src/test/com/bigdata/rdf/sail/tck/BigdataSparqlTest.java 2010-11-01 12:32:36 UTC (rev 3851) @@ -28,7 +28,6 @@ package com.bigdata.rdf.sail.tck; import info.aduna.io.IOUtil; -import info.aduna.iteration.Iterations; import java.io.InputStream; import java.io.InputStreamReader; @@ -37,38 +36,29 @@ import java.util.Collection; import java.util.Enumeration; import java.util.Properties; -import java.util.Set; import junit.framework.Test; import junit.framework.TestSuite; import org.apache.log4j.Logger; -import org.openrdf.model.Statement; -import org.openrdf.query.BooleanQuery; import org.openrdf.query.Dataset; -import org.openrdf.query.GraphQuery; -import org.openrdf.query.GraphQueryResult; -import org.openrdf.query.Query; -import org.openrdf.query.QueryLanguage; -import org.openrdf.query.TupleQuery; -import org.openrdf.query.TupleQueryResult; import org.openrdf.query.parser.sparql.ManifestTest; import org.openrdf.query.parser.sparql.SPARQLQueryTest; import org.openrdf.repository.Repository; -import org.openrdf.repository.RepositoryConnection; import org.openrdf.repository.RepositoryException; -import org.openrdf.repository.RepositoryResult; import org.openrdf.repository.dataset.DatasetRepository; import org.openrdf.repository.sail.SailRepository; import org.openrdf.sail.memory.MemoryStore; +import com.bigdata.bop.engine.QueryEngine; +import com.bigdata.bop.fed.QueryEngineFactory; import com.bigdata.btree.keys.CollatorEnum; import com.bigdata.btree.keys.StrengthEnum; import com.bigdata.journal.BufferMode; import com.bigdata.journal.IIndexManager; import com.bigdata.rdf.sail.BigdataSail; -import com.bigdata.rdf.sail.BigdataSailRepository; import com.bigdata.rdf.sail.BigdataSail.Options; +import com.bigdata.rdf.sail.BigdataSailRepository; /** * Test harness for running the SPARQL test suites. @@ -426,7 +416,9 @@ protected void tearDownBackend(IIndexManager backend) { backend.destroy(); - + QueryEngine qe = QueryEngineFactory.removeQueryController ( backend ) ; + if ( null != qe ) + qe.shutdownNow () ; } @Override Modified: branches/QUADS_QUERY_BRANCH/bigdata-sails/src/test/com/bigdata/rdf/sail/tck/BigdataStoreTest.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata-sails/src/test/com/bigdata/rdf/sail/tck/BigdataStoreTest.java 2010-10-29 12:22:15 UTC (rev 3850) +++ branches/QUADS_QUERY_BRANCH/bigdata-sails/src/test/com/bigdata/rdf/sail/tck/BigdataStoreTest.java 2010-11-01 12:32:36 UTC (rev 3851) @@ -37,6 +37,8 @@ import org.openrdf.sail.SailConnection; import org.openrdf.sail.SailException; +import com.bigdata.bop.engine.QueryEngine; +import com.bigdata.bop.fed.QueryEngineFactory; import com.bigdata.btree.keys.CollatorEnum; import com.bigdata.btree.keys.StrengthEnum; import com.bigdata.journal.IIndexManager; @@ -123,7 +125,12 @@ super.tearDown(); if (backend != null) + { + QueryEngine qe = QueryEngineFactory.removeQueryController ( backend ) ; + if ( null != qe ) + qe.shutdownNow () ; backend.destroy(); + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |