You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by br...@apache.org on 2010/12/30 12:38:35 UTC
svn commit: r1053857 -
/archiva/trunk/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/DefaultRepositoryStatisticsManager.java
Author: brett
Date: Thu Dec 30 11:38:35 2010
New Revision: 1053857
URL: http://svn.apache.org/viewvc?rev=1053857&view=rev
Log:
[MRM-1443, MRM-1327] change to JSR-170's SQL queries to avoid the problem in JackRabbit 2.2.0 with ISDESCENDANTNODE and a large number of nodes
Modified:
archiva/trunk/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/DefaultRepositoryStatisticsManager.java
Modified: archiva/trunk/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/DefaultRepositoryStatisticsManager.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/DefaultRepositoryStatisticsManager.java?rev=1053857&r1=1053856&r2=1053857&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/DefaultRepositoryStatisticsManager.java (original)
+++ archiva/trunk/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/DefaultRepositoryStatisticsManager.java Thu Dec 30 11:38:35 2010
@@ -162,9 +162,15 @@ public class DefaultRepositoryStatistics
try
{
QueryManager queryManager = session.getWorkspace().getQueryManager();
- String whereClause = "WHERE ISDESCENDANTNODE([/repositories/" + repositoryId + "/content])";
- Query query = queryManager.createQuery( "SELECT size FROM [archiva:artifact] " + whereClause,
- Query.JCR_SQL2 );
+
+ // TODO: JCR-SQL2 query will not complete on a large repo in Jackrabbit 2.2.0 - see JCR-2835
+ // Using the JCR-SQL2 variants gives
+ // "org.apache.lucene.search.BooleanQuery$TooManyClauses: maxClauseCount is set to 1024"
+// String whereClause = "WHERE ISDESCENDANTNODE([/repositories/" + repositoryId + "/content])";
+// Query query = queryManager.createQuery( "SELECT size FROM [archiva:artifact] " + whereClause,
+// Query.JCR_SQL2 );
+ String whereClause = "WHERE jcr:path LIKE '/repositories/" + repositoryId + "/content/%'";
+ Query query = queryManager.createQuery( "SELECT size FROM archiva:artifact " + whereClause, Query.SQL );
QueryResult queryResult = query.execute();
@@ -173,25 +179,22 @@ public class DefaultRepositoryStatistics
for ( Row row : JcrUtils.getRows( queryResult ) )
{
Node n = row.getNode();
-// if ( n.getPath().startsWith( "/repositories/" + repositoryId + "/content/" ) )
- {
- totalSize += row.getValue( "size" ).getLong();
+ totalSize += row.getValue( "size" ).getLong();
- String type;
- if ( n.hasNode( MavenArtifactFacet.FACET_ID ) )
- {
- Node facetNode = n.getNode( MavenArtifactFacet.FACET_ID );
- type = facetNode.getProperty( "type" ).getString();
- }
- else
- {
- type = "Other";
- }
- Integer prev = totalByType.get( type );
- totalByType.put( type, prev != null ? prev + 1 : 1 );
-
- totalArtifacts++;
+ String type;
+ if ( n.hasNode( MavenArtifactFacet.FACET_ID ) )
+ {
+ Node facetNode = n.getNode( MavenArtifactFacet.FACET_ID );
+ type = facetNode.getProperty( "type" ).getString();
}
+ else
+ {
+ type = "Other";
+ }
+ Integer prev = totalByType.get( type );
+ totalByType.put( type, prev != null ? prev + 1 : 1 );
+
+ totalArtifacts++;
}
repositoryStatistics.setTotalArtifactCount( totalArtifacts );
@@ -201,11 +204,17 @@ public class DefaultRepositoryStatistics
repositoryStatistics.setTotalCountForType( entry.getKey(), entry.getValue() );
}
- query = queryManager.createQuery( "SELECT * FROM [archiva:project] " + whereClause, Query.JCR_SQL2 );
+ // The query ordering is a trick to ensure that the size is correct, otherwise due to lazy init it will be -1
+// query = queryManager.createQuery( "SELECT * FROM [archiva:project] " + whereClause, Query.JCR_SQL2 );
+ query = queryManager.createQuery( "SELECT * FROM archiva:project " + whereClause + " ORDER BY jcr:score",
+ Query.SQL );
repositoryStatistics.setTotalProjectCount( query.execute().getRows().getSize() );
+// query = queryManager.createQuery(
+// "SELECT * FROM [archiva:namespace] " + whereClause + " AND namespace IS NOT NULL", Query.JCR_SQL2 );
query = queryManager.createQuery(
- "SELECT * FROM [archiva:namespace] " + whereClause + " AND namespace IS NOT NULL", Query.JCR_SQL2 );
+ "SELECT * FROM archiva:namespace " + whereClause + " AND namespace IS NOT NULL ORDER BY jcr:score",
+ Query.SQL );
repositoryStatistics.setTotalGroupCount( query.execute().getRows().getSize() );
}
catch ( RepositoryException e )