Merge branch 'feature/jcr_oak'
Project: http://git-wip-us.apache.org/repos/asf/archiva/repo Commit: http://git-wip-us.apache.org/repos/asf/archiva/commit/7a2710ec Tree: http://git-wip-us.apache.org/repos/asf/archiva/tree/7a2710ec Diff: http://git-wip-us.apache.org/repos/asf/archiva/diff/7a2710ec Branch: refs/heads/master Commit: 7a2710ec0a566f44a1f135b71176addfdd7047e7 Parents: f93a787 8838508 Author: olivier lamy <ol...@apache.org> Authored: Sat Aug 19 21:37:35 2017 +1000 Committer: olivier lamy <ol...@apache.org> Committed: Sat Aug 19 21:37:35 2017 +1000 ---------------------------------------------------------------------- .../archiva-consumer-archetype/pom.xml | 20 ++ .../core/AbstractArtifactConsumerTest.java | 3 +- .../repository/AbstractRepositoryPurgeTest.java | 3 +- .../archiva-lucene-consumers/pom.xml | 36 +- .../consumers/lucene/NexusIndexerConsumer.java | 15 +- .../lucene/NexusIndexerConsumerTest.java | 20 +- .../src/test/resources/spring-context.xml | 3 +- .../src/test/resources/log4j2-test.xml | 14 +- .../archiva-base/archiva-indexer/pom.xml | 23 +- .../indexer/merger/DefaultIndexMerger.java | 33 +- .../merger/TemporaryGroupIndexCleaner.java | 26 +- .../indexer/search/MavenRepositorySearch.java | 160 ++++----- .../search/NoClassifierArtifactInfoFilter.java | 2 +- .../search/AbstractMavenRepositorySearch.java | 44 +-- .../search/MavenRepositorySearchTest.java | 25 +- .../src/test/repo-release/.index/_7.fdt | Bin 358889 -> 0 bytes .../src/test/repo-release/.index/_7.fdx | Bin 3324 -> 0 bytes .../src/test/repo-release/.index/_7.fnm | 5 - .../src/test/repo-release/.index/_7.frq | 262 -------------- .../src/test/repo-release/.index/_7.nrm | 1 - .../src/test/repo-release/.index/_7.prx | Bin 48973 -> 0 bytes .../src/test/repo-release/.index/_7.tii | Bin 852 -> 0 bytes .../src/test/repo-release/.index/_7.tis | Bin 67003 -> 0 bytes .../src/test/repo-release/.index/_8.fdt | Bin 0 -> 86211 bytes .../src/test/repo-release/.index/_8.fdx | Bin 0 -> 114 bytes .../src/test/repo-release/.index/_8.fnm | Bin 0 -> 2157 bytes .../src/test/repo-release/.index/_8.nvd | Bin 0 -> 2330 bytes .../src/test/repo-release/.index/_8.nvm | Bin 0 -> 261 bytes .../src/test/repo-release/.index/_8.si | Bin 0 -> 371 bytes .../test/repo-release/.index/_8_Lucene41_0.doc | Bin 0 -> 21619 bytes .../test/repo-release/.index/_8_Lucene41_0.pos | Bin 0 -> 40037 bytes .../test/repo-release/.index/_8_Lucene41_0.tim | Bin 0 -> 91607 bytes .../test/repo-release/.index/_8_Lucene41_0.tip | Bin 0 -> 1250 bytes .../src/test/repo-release/.index/segments.gen | Bin 20 -> 36 bytes .../src/test/repo-release/.index/segments_8 | Bin 279 -> 0 bytes .../src/test/repo-release/.index/segments_9 | Bin 0 -> 102 bytes .../mock/MockRepositorySessionFactory.java | 6 + .../archiva-base/archiva-plexus-bridge/pom.xml | 1 + .../common/plexusbridge/MavenIndexerUtils.java | 87 ----- .../main/resources/META-INF/spring-context.xml | 39 ++- .../archiva-base/archiva-proxy-common/pom.xml | 4 + .../main/resources/META-INF/spring-context.xml | 4 +- .../test/resources/META-INF/spring-context.xml | 5 +- .../archiva/proxy/AbstractProxyTestCase.java | 3 +- .../archiva-repository-admin-api/pom.xml | 9 + .../archiva-repository-admin-default/pom.xml | 15 +- .../managed/DefaultManagedRepositoryAdmin.java | 92 ++--- .../remote/DefaultRemoteRepositoryAdmin.java | 55 ++- .../main/resources/META-INF/spring-context.xml | 9 +- .../src/test/resources/spring-context.xml | 9 +- .../archiva-scheduler-indexing/pom.xml | 1 + .../indexing/ArchivaIndexingTaskExecutor.java | 70 ++-- .../indexing/ArtifactIndexingTask.java | 8 +- .../DefaultDownloadRemoteIndexScheduler.java | 32 +- .../indexing/DefaultIndexUpdateSideEffect.java | 47 +++ .../indexing/DownloadRemoteIndexTask.java | 27 +- .../ArchivaIndexingTaskExecutorTest.java | 123 +++---- .../indexing/DownloadRemoteIndexTaskTest.java | 8 +- .../default-repository/.indexer/_0.cfe | Bin 0 -> 299 bytes .../default-repository/.indexer/_0.cfs | Bin 0 -> 1053 bytes .../default-repository/.indexer/_0.si | Bin 0 -> 364 bytes .../default-repository/.indexer/segments_2 | Bin 0 -> 136 bytes .../default-repository/.indexer/write.lock | 0 .../archiva-rest/archiva-rest-services/pom.xml | 19 +- .../services/DefaultRepositoriesService.java | 6 +- .../rest/services/AbstractArchivaRestTest.java | 3 + .../services/utils/MavenIndexerCleaner.java | 3 +- .../resources/META-INF/spring-context-test.xml | 2 + .../archiva-web/archiva-web-common/pom.xml | 18 +- .../archiva/web/startup/ArchivaStartup.java | 12 +- .../TestRepositorySessionFactoryBean.java | 6 + .../memory/TestRepositorySessionFactory.java | 6 + .../resources/spring-context-test-common.xml | 2 + .../test/resources/spring-context-with-jcr.xml | 7 +- .../archiva-web/archiva-webapp/pom.xml | 36 +- .../main/resources/META-INF/spring-context.xml | 3 +- .../src/main/resources/log4j2.xml | 6 - .../src/test/auto-admin-creation.properties | 22 ++ .../archiva-webapp/src/test/jetty-env.xml | 48 +++ .../archiva-webapp/src/test/jetty/jetty-env.xml | 48 --- .../archiva-webapp/src/test/log4j2-test.xml | 101 ++++++ .../test/tomcat/auto-admin-creation.properties | 22 -- .../src/test/tomcat/log4j2-test.xml | 101 ------ .../archiva-web/archiva-webdav/pom.xml | 20 +- .../webdav/util/MavenIndexerCleaner.java | 14 +- .../repository/RepositorySessionFactory.java | 2 + .../AbstractMetadataRepositoryTest.java | 9 +- .../plugins/maven2-repository/pom.xml | 2 +- .../CassandraRepositorySessionFactory.java | 6 + .../file/FileRepositorySessionFactory.java | 15 +- .../plugins/metadata-store-jcr/pom.xml | 95 ++++- .../jcr/ArchivaJcrRepositoryConfig.java | 64 ---- .../repository/jcr/JcrMetadataRepository.java | 22 +- .../jcr/JcrRepositorySessionFactory.java | 28 +- .../repository/jcr/RepositoryFactory.java | 350 +++++++++++++++++++ .../META-INF/spring-context.xml | 8 +- .../jcr/JcrMetadataRepositoryTest.java | 32 +- .../JcrRepositoryStatisticsGatheringTest.java | 41 ++- .../src/test/resources/log4j2-test.xml | 37 ++ archiva-modules/plugins/problem-reports/pom.xml | 2 +- .../plugins/repository-statistics/pom.xml | 16 + .../plugins/stage-repository-merge/pom.xml | 2 +- pom.xml | 108 ++++-- 103 files changed, 1377 insertions(+), 1316 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/archiva/blob/7a2710ec/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/AbstractRepositoryPurgeTest.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/archiva/blob/7a2710ec/archiva-modules/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/archiva/consumers/lucene/NexusIndexerConsumer.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/archiva/blob/7a2710ec/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/pom.xml ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/archiva/blob/7a2710ec/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/managed/DefaultManagedRepositoryAdmin.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/archiva/blob/7a2710ec/archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/ArchivaIndexingTaskExecutor.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/archiva/blob/7a2710ec/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/archiva/blob/7a2710ec/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/archiva/blob/7a2710ec/archiva-modules/plugins/metadata-store-jcr/pom.xml ---------------------------------------------------------------------- diff --cc archiva-modules/plugins/metadata-store-jcr/pom.xml index 8e71c4c,43522a0..6090113 --- a/archiva-modules/plugins/metadata-store-jcr/pom.xml +++ b/archiva-modules/plugins/metadata-store-jcr/pom.xml @@@ -143,6 -205,6 +213,15 @@@ </instructions> </configuration> </plugin> ++ <plugin> ++ <groupId>org.apache.maven.plugins</groupId> ++ <artifactId>maven-surefire-plugin</artifactId> ++ <configuration> ++ <systemPropertyVariables> ++ <appserver.base>${project.build.directory}/jcr/repo</appserver.base> ++ </systemPropertyVariables> ++ </configuration> ++ </plugin> </plugins> </build> </project> http://git-wip-us.apache.org/repos/asf/archiva/blob/7a2710ec/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java ---------------------------------------------------------------------- diff --cc archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java index f8393b8,2bf9406..9fca6b8 --- a/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java +++ b/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java @@@ -36,10 -35,10 +36,12 @@@ import org.apache.archiva.metadata.mode import org.apache.archiva.metadata.repository.MetadataRepository; import org.apache.archiva.metadata.repository.MetadataRepositoryException; import org.apache.archiva.metadata.repository.MetadataResolutionException; +import org.apache.archiva.metadata.repository.stats.model.RepositoryStatistics; +import org.apache.archiva.metadata.repository.stats.model.RepositoryStatisticsProvider; import org.apache.commons.lang.StringUtils; import org.apache.jackrabbit.commons.JcrUtils; + import org.apache.jackrabbit.oak.plugins.index.IndexUtils; + import org.apache.jackrabbit.oak.spi.state.NodeBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; http://git-wip-us.apache.org/repos/asf/archiva/blob/7a2710ec/archiva-modules/plugins/metadata-store-jcr/src/test/java/org/apache/archiva/metadata/repository/stats/JcrRepositoryStatisticsGatheringTest.java ---------------------------------------------------------------------- diff --cc archiva-modules/plugins/metadata-store-jcr/src/test/java/org/apache/archiva/metadata/repository/stats/JcrRepositoryStatisticsGatheringTest.java index 63bfffb,0000000..be07e2e mode 100644,000000..100644 --- a/archiva-modules/plugins/metadata-store-jcr/src/test/java/org/apache/archiva/metadata/repository/stats/JcrRepositoryStatisticsGatheringTest.java +++ b/archiva-modules/plugins/metadata-store-jcr/src/test/java/org/apache/archiva/metadata/repository/stats/JcrRepositoryStatisticsGatheringTest.java @@@ -1,220 -1,0 +1,219 @@@ +package org.apache.archiva.metadata.repository.stats; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import junit.framework.TestCase; +import org.apache.archiva.metadata.model.MetadataFacetFactory; +import org.apache.archiva.metadata.repository.AbstractMetadataRepositoryTest; +import org.apache.archiva.metadata.repository.RepositorySessionFactory; +import org.apache.archiva.metadata.repository.jcr.JcrMetadataRepository; ++import org.apache.archiva.metadata.repository.jcr.RepositoryFactory; +import org.apache.archiva.metadata.repository.stats.model.DefaultRepositoryStatistics; - import org.apache.archiva.test.utils.ArchivaBlockJUnit4ClassRunner; +import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner; +import org.apache.commons.io.FileUtils; +import org.apache.jackrabbit.commons.JcrUtils; - import org.apache.jackrabbit.core.TransientRepository; - import org.apache.jackrabbit.core.config.RepositoryConfig; - import org.apache.regexp.RE; ++import org.apache.jackrabbit.oak.segment.file.InvalidFileStoreVersionException; +import org.junit.After; - import org.junit.Assert; +import org.junit.Before; ++import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.context.ApplicationContext; +import org.springframework.test.context.ContextConfiguration; + +import javax.inject.Inject; - import javax.inject.Named; +import javax.jcr.ImportUUIDBehavior; - import javax.jcr.NamespaceRegistry; +import javax.jcr.Node; +import javax.jcr.Repository; +import javax.jcr.RepositoryException; +import javax.jcr.Session; - import javax.jcr.SimpleCredentials; - import javax.jcr.Workspace; +import javax.jcr.nodetype.NodeTypeManager; +import javax.jcr.nodetype.NodeTypeTemplate; +import java.io.File; +import java.io.IOException; +import java.util.Calendar; +import java.util.Date; +import java.util.Map; +import java.util.zip.GZIPInputStream; + - import static org.junit.Assert.assertEquals; - +@RunWith( ArchivaSpringJUnit4ClassRunner.class ) +@ContextConfiguration( locations = { "classpath*:/META-INF/spring-context.xml", "classpath*:/spring-context.xml" } ) +public class JcrRepositoryStatisticsGatheringTest extends TestCase - +{ + private static final int TOTAL_FILE_COUNT = 1000; + + private static final int NEW_FILE_COUNT = 500; + + private static final String TEST_REPO = "test-repo"; + + JcrMetadataRepository repository; + + @Inject + private RepositorySessionFactory repositorySessionFactory; + + @Inject + private ApplicationContext applicationContext; + - @Inject - @Named("repository") - Repository jcrRepository; - + Session session; + + ++ private static Repository jcrRepository; + - - @Before - public void setUp() - throws Exception ++ @BeforeClass ++ public static void setupSpec() throws IOException, InvalidFileStoreVersionException + { - + File directory = new File( "target/test-repositories" ); + if ( directory.exists() ) + { + FileUtils.deleteDirectory( directory ); + } ++ RepositoryFactory factory = new RepositoryFactory(); ++ factory.setRepositoryPath( directory.getPath() ); ++ factory.setStoreType( RepositoryFactory.StoreType.IN_MEMORY_TYPE ); ++ jcrRepository = factory.createRepository(); ++ } ++ ++ ++ @Before ++ public void setUp() ++ throws Exception ++ { + + Map<String, MetadataFacetFactory> factories = AbstractMetadataRepositoryTest.createTestMetadataFacetFactories(); + + assertNotNull( jcrRepository ); + // TODO: probably don't need to use Spring for this + JcrMetadataRepository jcrMetadataRepository = new JcrMetadataRepository( factories, jcrRepository ); + ++ ++ session = jcrMetadataRepository.getJcrSession(); ++ + try + { + session = jcrMetadataRepository.getJcrSession(); + + // set up namespaces, etc. + JcrMetadataRepository.initialize( session ); + + // removing content is faster than deleting and re-copying the files from target/jcr + session.getRootNode().getNode( "repositories" ).remove(); + } + catch ( RepositoryException e ) + { + // ignore + } + + this.repository = jcrMetadataRepository; + } + + private static void registerMixinNodeType( NodeTypeManager nodeTypeManager, String type ) + throws RepositoryException + { + NodeTypeTemplate nodeType = nodeTypeManager.createNodeTypeTemplate(); + nodeType.setMixin( true ); + nodeType.setName( type ); + nodeTypeManager.registerNodeType( nodeType, false ); + } + + @After + public void tearDown() + throws Exception + { + if (repository!=null) + { + repository.close( ); + } + + } + + @Test + public void testJcrStatisticsQuery() + throws Exception + { + Calendar cal = Calendar.getInstance(); + Date endTime = cal.getTime(); + cal.add( Calendar.HOUR, -1 ); + Date startTime = cal.getTime(); + + loadContentIntoRepo( TEST_REPO ); + loadContentIntoRepo( "another-repo" ); + + DefaultRepositoryStatistics testedStatistics = new DefaultRepositoryStatistics(); + testedStatistics.setNewFileCount( NEW_FILE_COUNT ); + testedStatistics.setTotalFileCount( TOTAL_FILE_COUNT ); + testedStatistics.setScanStartTime( startTime ); + testedStatistics.setScanEndTime( endTime ); + + repository.populateStatistics( repository, TEST_REPO, testedStatistics ); + + DefaultRepositoryStatistics expectedStatistics = new DefaultRepositoryStatistics(); + expectedStatistics.setNewFileCount( NEW_FILE_COUNT ); + expectedStatistics.setTotalFileCount( TOTAL_FILE_COUNT ); + expectedStatistics.setScanEndTime( endTime ); + expectedStatistics.setScanStartTime( startTime ); + expectedStatistics.setTotalArtifactFileSize( 95954585 ); + expectedStatistics.setTotalArtifactCount( 269 ); + expectedStatistics.setTotalGroupCount( 1 ); + expectedStatistics.setTotalProjectCount( 43 ); + expectedStatistics.setTotalCountForType( "zip", 1 ); + expectedStatistics.setTotalCountForType( "gz", 1 ); // FIXME: should be tar.gz + expectedStatistics.setTotalCountForType( "java-source", 10 ); + expectedStatistics.setTotalCountForType( "jar", 108 ); + expectedStatistics.setTotalCountForType( "xml", 3 ); + expectedStatistics.setTotalCountForType( "war", 2 ); + expectedStatistics.setTotalCountForType( "pom", 144 ); + expectedStatistics.setRepositoryId( TEST_REPO ); + + System.out.println(testedStatistics.getTotalCountForType()); + + assertEquals( NEW_FILE_COUNT, testedStatistics.getNewFileCount()); + assertEquals( TOTAL_FILE_COUNT, testedStatistics.getTotalFileCount() ); + assertEquals( endTime, testedStatistics.getScanEndTime() ); + assertEquals( startTime, testedStatistics.getScanStartTime() ); + assertEquals( 95954585, testedStatistics.getTotalArtifactFileSize() ); + assertEquals( 269, testedStatistics.getTotalArtifactCount() ); + assertEquals( 1, testedStatistics.getTotalGroupCount() ); + assertEquals( 43, testedStatistics.getTotalProjectCount() ); + assertEquals( 1, testedStatistics.getTotalCountForType( "zip" ) ); + assertEquals( 1, testedStatistics.getTotalCountForType( "gz" ) ); + assertEquals( 10, testedStatistics.getTotalCountForType( "java-source" ) ); + assertEquals( 108, testedStatistics.getTotalCountForType( "jar" ) ); + assertEquals( 3, testedStatistics.getTotalCountForType( "xml" ) ); + assertEquals( 2, testedStatistics.getTotalCountForType( "war" ) ); + assertEquals( 144, testedStatistics.getTotalCountForType( "pom" ) ); + assertEquals( 10, testedStatistics.getTotalCountForType( "java-source" ) ); + + + } + + private void loadContentIntoRepo( String repoId ) + throws RepositoryException, IOException + { + Node n = JcrUtils.getOrAddNode( session.getRootNode(), "repositories" ); + n = JcrUtils.getOrAddNode( n, repoId ); + n = JcrUtils.getOrAddNode( n, "content" ); + n = JcrUtils.getOrAddNode( n, "org" ); + n = JcrUtils.getOrAddNode( n, "apache" ); + + GZIPInputStream inputStream = new GZIPInputStream( getClass().getResourceAsStream( "/artifacts.xml.gz" ) ); + session.importXML( n.getPath(), inputStream, ImportUUIDBehavior.IMPORT_UUID_CREATE_NEW ); + session.save(); + } +} http://git-wip-us.apache.org/repos/asf/archiva/blob/7a2710ec/archiva-modules/plugins/repository-statistics/pom.xml ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/archiva/blob/7a2710ec/pom.xml ----------------------------------------------------------------------