Author: olamy
Date: Wed Dec 19 15:19:53 2012
New Revision: 1423878
URL: http://svn.apache.org/viewvc?rev=1423878&view=rev
Log:
[MRM-1729] add MetadataRepository#hasMetadataFacet to prevent slow startup time.
Modified:
archiva/trunk/archiva-modules/archiva-base/archiva-policies/pom.xml
archiva/trunk/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/main/java/org/apache/archiva/scheduler/repository/DefaultRepositoryArchivaTaskScheduler.java
archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataRepository.java
archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java
archiva/trunk/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java
archiva/trunk/archiva-modules/plugins/metadata-store-jcr/src/test/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepositoryTest.java
archiva/trunk/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/DefaultRepositoryStatisticsManager.java
archiva/trunk/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/RepositoryStatisticsManager.java
archiva/trunk/archiva-modules/plugins/repository-statistics/src/test/java/org/apache/archiva/metadata/repository/stats/JcrRepositoryStatisticsGatheringTest.java
archiva/trunk/pom.xml
Modified: archiva/trunk/archiva-modules/archiva-base/archiva-policies/pom.xml
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-policies/pom.xml?rev=1423878&r1=1423877&r2=1423878&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-base/archiva-policies/pom.xml
(original)
+++ archiva/trunk/archiva-modules/archiva-base/archiva-policies/pom.xml Wed Dec
19 15:19:53 2012
@@ -41,10 +41,6 @@
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
</dependency>
- <!--dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-asm</artifactId>
- </dependency-->
<dependency>
<groupId>org.apache.archiva.redback.components.cache</groupId>
<artifactId>spring-cache-api</artifactId>
Modified:
archiva/trunk/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/main/java/org/apache/archiva/scheduler/repository/DefaultRepositoryArchivaTaskScheduler.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/main/java/org/apache/archiva/scheduler/repository/DefaultRepositoryArchivaTaskScheduler.java?rev=1423878&r1=1423877&r2=1423878&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/main/java/org/apache/archiva/scheduler/repository/DefaultRepositoryArchivaTaskScheduler.java
(original)
+++
archiva/trunk/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/main/java/org/apache/archiva/scheduler/repository/DefaultRepositoryArchivaTaskScheduler.java
Wed Dec 19 15:19:53 2012
@@ -309,6 +309,7 @@ public class DefaultRepositoryArchivaTas
MetadataRepository metadataRepository
)
throws MetadataRepositoryException
{
+
return repositoryStatisticsManager.getLastStatistics(
metadataRepository, repoConfig.getId() ) != null;
}
Modified:
archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataRepository.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataRepository.java?rev=1423878&r1=1423877&r2=1423878&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataRepository.java
(original)
+++
archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataRepository.java
Wed Dec 19 15:19:53 2012
@@ -54,6 +54,17 @@ public interface MetadataRepository
List<String> getMetadataFacets( String repositoryId, String facetId )
throws MetadataRepositoryException;
+ /**
+ *
+ * @param repositoryId
+ * @param facetId
+ * @return true if the repository datas for this facetId
+ * @since 1.4-M4
+ * @throws MetadataRepositoryException
+ */
+ boolean hasMetadataFacet( String repositoryId, String facetId )
+ throws MetadataRepositoryException;
+
MetadataFacet getMetadataFacet( String repositoryId, String facetId,
String name )
throws MetadataRepositoryException;
Modified:
archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java?rev=1423878&r1=1423877&r2=1423878&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java
(original)
+++
archiva/trunk/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java
Wed Dec 19 15:19:53 2012
@@ -40,8 +40,10 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.test.context.ContextConfiguration;
+import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Calendar;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
@@ -49,9 +51,10 @@ import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.TimeZone;
-@RunWith (ArchivaSpringJUnit4ClassRunner.class)
-@ContextConfiguration (locations = {
"classpath*:/META-INF/spring-context.xml", "classpath*:/spring-context.xml" })
+@RunWith( ArchivaSpringJUnit4ClassRunner.class )
+@ContextConfiguration( locations = {
"classpath*:/META-INF/spring-context.xml", "classpath*:/spring-context.xml" } )
public abstract class AbstractMetadataRepositoryTest
extends TestCase
{
@@ -704,6 +707,52 @@ public abstract class AbstractMetadataRe
}
@Test
+ public void hasMetadataFacetStart()
+ throws Exception
+ {
+ assertFalse( repository.hasMetadataFacet( TEST_REPO_ID,
KindOfRepositoryStatistics.class.getName() ) );
+
+ }
+
+ @Test
+ public void hasMetadataFacet()
+ throws Exception
+ {
+
+ assertFalse( repository.hasMetadataFacet( TEST_REPO_ID,
KindOfRepositoryStatistics.class.getName() ) );
+
+ Calendar cal = Calendar.getInstance();
+
+ repository.addMetadataFacet( TEST_REPO_ID, new
KindOfRepositoryStatistics( "first", cal.getTime() ) );
+
+ assertTrue( repository.hasMetadataFacet( TEST_REPO_ID,
KindOfRepositoryStatistics.class.getName() ) );
+
+ cal.add( Calendar.MINUTE, 2 );
+
+ repository.addMetadataFacet( TEST_REPO_ID, new
KindOfRepositoryStatistics( "second", cal.getTime() ) );
+
+ cal.add( Calendar.MINUTE, 2 );
+
+ repository.addMetadataFacet( TEST_REPO_ID, new
KindOfRepositoryStatistics( "third", cal.getTime() ) );
+
+ List<String> facets = repository.getMetadataFacets( TEST_REPO_ID,
KindOfRepositoryStatistics.class.getName() );
+
+ Assertions.assertThat( facets ).isNotNull().isNotEmpty().hasSize( 3 );
+
+ assertTrue( repository.hasMetadataFacet( TEST_REPO_ID,
KindOfRepositoryStatistics.class.getName() ) );
+
+ repository.removeMetadataFacets( TEST_REPO_ID,
KindOfRepositoryStatistics.class.getName() );
+
+ assertFalse( repository.hasMetadataFacet( TEST_REPO_ID,
KindOfRepositoryStatistics.class.getName() ) );
+
+ facets = repository.getMetadataFacets( TEST_REPO_ID,
KindOfRepositoryStatistics.class.getName() );
+
+ Assertions.assertThat( facets ).isNotNull().isEmpty();
+
+ }
+
+
+ @Test
public void testGetArtifacts()
throws Exception
{
@@ -1231,6 +1280,7 @@ public abstract class AbstractMetadataRe
Assertions.assertThat( artifactMetadatas ).isNotNull().isEmpty();
}
+
private static ProjectMetadata createProject()
{
return createProject( TEST_NAMESPACE );
@@ -1274,6 +1324,51 @@ public abstract class AbstractMetadataRe
}
}
+ private static class KindOfRepositoryStatistics
+ implements MetadataFacet
+ {
+ private String value;
+
+ private Date date;
+
+ static final String SCAN_TIMESTAMP_FORMAT = "yyyy/MM/dd/HHmmss.SSS";
+
+ private static final TimeZone UTC_TIME_ZONE = TimeZone.getTimeZone(
"UTC" );
+
+ private KindOfRepositoryStatistics( String value, Date date )
+ {
+ this.value = value;
+ this.date = date;
+ }
+
+ public String getName()
+ {
+ return createNameFormat().format( date );
+ }
+
+ private static SimpleDateFormat createNameFormat()
+ {
+ SimpleDateFormat fmt = new SimpleDateFormat( SCAN_TIMESTAMP_FORMAT
);
+ fmt.setTimeZone( UTC_TIME_ZONE );
+ return fmt;
+ }
+
+ public String getFacetId()
+ {
+ return KindOfRepositoryStatistics.class.getName();
+ }
+
+ public Map<String, String> toProperties()
+ {
+ return Collections.emptyMap();
+ }
+
+ public void fromProperties( Map<String, String> properties )
+ {
+ // no op
+ }
+ }
+
private static class TestMetadataFacet
implements MetadataFacet
{
Modified:
archiva/trunk/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java?rev=1423878&r1=1423877&r2=1423878&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java
(original)
+++
archiva/trunk/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java
Wed Dec 19 15:19:53 2012
@@ -400,6 +400,26 @@ public class JcrMetadataRepository
}
+
+ public boolean hasMetadataFacet( String repositoryId, String facetId )
+ throws MetadataRepositoryException
+ {
+ try
+ {
+ Node node = getJcrSession().getRootNode().getNode( getFacetPath(
repositoryId, facetId ) );
+ return JcrUtils.getChildNodes( node ).iterator().hasNext();
+ }
+ catch ( PathNotFoundException e )
+ {
+ // ignored - the facet doesn't exist, so return false
+ return false;
+ }
+ catch ( RepositoryException e )
+ {
+ throw new MetadataRepositoryException( e.getMessage(), e );
+ }
+ }
+
public List<String> getMetadataFacets( String repositoryId, String facetId
)
throws MetadataRepositoryException
{
Modified:
archiva/trunk/archiva-modules/plugins/metadata-store-jcr/src/test/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepositoryTest.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/metadata-store-jcr/src/test/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepositoryTest.java?rev=1423878&r1=1423877&r2=1423878&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/plugins/metadata-store-jcr/src/test/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepositoryTest.java
(original)
+++
archiva/trunk/archiva-modules/plugins/metadata-store-jcr/src/test/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepositoryTest.java
Wed Dec 19 15:19:53 2012
@@ -24,6 +24,7 @@ import org.apache.archiva.metadata.repos
import org.apache.commons.io.FileUtils;
import org.junit.After;
import org.junit.Before;
+import org.junit.Test;
import org.springframework.context.ApplicationContext;
import java.io.File;
@@ -48,7 +49,7 @@ public class JcrMetadataRepositoryTest
super.setUp();
File directory = new File( "target/test-repositories" );
- if (directory.exists())
+ if ( directory.exists() )
{
FileUtils.deleteDirectory( directory );
}
@@ -86,4 +87,6 @@ public class JcrMetadataRepositoryTest
super.tearDown();
}
+
+
}
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=1423878&r1=1423877&r2=1423878&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
Wed Dec 19 15:19:53 2012
@@ -59,6 +59,12 @@ public class DefaultRepositoryStatistics
private static final TimeZone UTC_TIME_ZONE = TimeZone.getTimeZone( "UTC"
);
+ public boolean hasStatistics( MetadataRepository metadataRepository,
String repositoryId )
+ throws MetadataRepositoryException
+ {
+ return metadataRepository.hasMetadataFacet( repositoryId,
RepositoryStatistics.FACET_ID );
+ }
+
public RepositoryStatistics getLastStatistics( MetadataRepository
metadataRepository, String repositoryId )
throws MetadataRepositoryException
{
Modified:
archiva/trunk/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/RepositoryStatisticsManager.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/RepositoryStatisticsManager.java?rev=1423878&r1=1423877&r2=1423878&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/RepositoryStatisticsManager.java
(original)
+++
archiva/trunk/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/RepositoryStatisticsManager.java
Wed Dec 19 15:19:53 2012
@@ -30,6 +30,9 @@ public interface RepositoryStatisticsMan
RepositoryStatistics getLastStatistics( MetadataRepository
metadataRepository, String repositoryId )
throws MetadataRepositoryException;
+ boolean hasStatistics( MetadataRepository metadataRepository, String
repositoryId )
+ throws MetadataRepositoryException;
+
void addStatisticsAfterScan( MetadataRepository metadataRepository, String
repositoryId, Date startTime,
Date endTime, long totalFiles, long newFiles )
throws MetadataRepositoryException;
Modified:
archiva/trunk/archiva-modules/plugins/repository-statistics/src/test/java/org/apache/archiva/metadata/repository/stats/JcrRepositoryStatisticsGatheringTest.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/repository-statistics/src/test/java/org/apache/archiva/metadata/repository/stats/JcrRepositoryStatisticsGatheringTest.java?rev=1423878&r1=1423877&r2=1423878&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/plugins/repository-statistics/src/test/java/org/apache/archiva/metadata/repository/stats/JcrRepositoryStatisticsGatheringTest.java
(original)
+++
archiva/trunk/archiva-modules/plugins/repository-statistics/src/test/java/org/apache/archiva/metadata/repository/stats/JcrRepositoryStatisticsGatheringTest.java
Wed Dec 19 15:19:53 2012
@@ -21,10 +21,12 @@ package org.apache.archiva.metadata.repo
import junit.framework.TestCase;
import org.apache.archiva.metadata.repository.MetadataRepository;
+import org.apache.archiva.metadata.repository.RepositorySessionFactory;
import org.apache.commons.io.FileUtils;
import org.apache.jackrabbit.commons.JcrUtils;
import org.apache.jackrabbit.core.TransientRepository;
+import javax.inject.Inject;
import javax.jcr.ImportUUIDBehavior;
import javax.jcr.NamespaceRegistry;
import javax.jcr.Node;
@@ -39,6 +41,7 @@ import java.io.IOException;
import java.util.Calendar;
import java.util.Date;
import java.util.zip.GZIPInputStream;
+
import org.apache.archiva.test.utils.ArchivaBlockJUnit4ClassRunner;
import org.junit.After;
import org.junit.Before;
@@ -46,6 +49,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import static org.mockito.Mockito.*;
+
@RunWith( ArchivaBlockJUnit4ClassRunner.class )
public class JcrRepositoryStatisticsGatheringTest
extends TestCase
@@ -60,6 +64,9 @@ public class JcrRepositoryStatisticsGath
private MetadataRepository metadataRepository;
+ @Inject
+ private RepositorySessionFactory repositorySessionFactory;
+
private Session session;
@Override
Modified: archiva/trunk/pom.xml
URL:
http://svn.apache.org/viewvc/archiva/trunk/pom.xml?rev=1423878&r1=1423877&r2=1423878&view=diff
==============================================================================
--- archiva/trunk/pom.xml (original)
+++ archiva/trunk/pom.xml Wed Dec 19 15:19:53 2012
@@ -1357,17 +1357,6 @@
</exclusion>
</exclusions>
</dependency>
- <!--dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-asm</artifactId>
- <version>${spring.version}</version>
- <exclusions>
- <exclusion>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- </exclusion>
- </exclusions>
- </dependency-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>