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 2011/03/26 12:54:11 UTC

svn commit: r1085704 - in /archiva: sandbox/populate-jcr-repo/src/main/ trunk/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/ trunk/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apac...

Author: brett
Date: Sat Mar 26 11:54:11 2011
New Revision: 1085704

URL: http://svn.apache.org/viewvc?rev=1085704&view=rev
Log:
[MRM-1327] use nodes for dependencies, make several notes about fixes required to properly isolate maven2 pieces

Modified:
    archiva/sandbox/populate-jcr-repo/src/main/repository.xml
    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

Modified: archiva/sandbox/populate-jcr-repo/src/main/repository.xml
URL: http://svn.apache.org/viewvc/archiva/sandbox/populate-jcr-repo/src/main/repository.xml?rev=1085704&r1=1085703&r2=1085704&view=diff
==============================================================================
--- archiva/sandbox/populate-jcr-repo/src/main/repository.xml (original)
+++ archiva/sandbox/populate-jcr-repo/src/main/repository.xml Sat Mar 26 11:54:11 2011
@@ -46,5 +46,23 @@
     </FileSystem>
     <PersistenceManager class="org.apache.jackrabbit.core.persistence.bundle.H2PersistenceManager"/>
     <!--<PersistenceManager class="org.apache.jackrabbit.core.persistence.bundle.BundleFsPersistenceManager"/>-->
+
+    <!--
+    Note about choice of persistence manager: aside from the potential integrity issues listed for the
+    BundleFsPersistenceManager, it is inefficient on storage. Processing 272 files from org/apache/archiva creates
+    the following number of files:
+     - 919 (5m) when using properties to represent dependencies
+     - 6402 (27m) when using a node for each level of a dependency
+     - 3494 (15m) when only using node levels of group ID & artifact name
+     - 2513 (11m) when group ID & artifact name are one node per dependency
+
+    This compares to the following for H2:
+     - 29 (3m) when using properties to represent dependencies
+     - 36 (5m) when using a node for each level of a dependency
+     - 32 (4m) when only using node levels of group ID & artifact name
+     - 28 (3m) when group ID & artifact name are one node per dependency
+
+     It is 190 files (1m) for the FileMetadataRepository.
+    -->
   </Versioning>
 </Repository>

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=1085704&r1=1085703&r2=1085704&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 Sat Mar 26 11:54:11 2011
@@ -261,6 +261,7 @@ public abstract class AbstractMetadataRe
         d.setSystemPath( "system path" );
         d.setType( "type" );
         d.setVersion( "version" );
+        d.setOptional( true );
         metadata.addDependency( d );
 
         repository.updateProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
@@ -303,6 +304,7 @@ public abstract class AbstractMetadataRe
         assertEquals( "system path", d.getSystemPath() );
         assertEquals( "type", d.getType() );
         assertEquals( "version", d.getVersion() );
+        assertTrue( d.isOptional() );
     }
 
     public void testUpdateProjectReference()

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=1085704&r1=1085703&r2=1085704&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 Sat Mar 26 11:54:11 2011
@@ -85,6 +85,8 @@ public class JcrMetadataRepository
 
     static final String FACET_NODE_TYPE = "archiva:facet";
 
+    private static final String DEPENDENCY_NODE_TYPE = "archiva:dependency";
+
     private final Map<String, MetadataFacetFactory> metadataFacetFactories;
 
     private static final Logger log = LoggerFactory.getLogger( JcrMetadataRepository.class );
@@ -126,6 +128,7 @@ public class JcrMetadataRepository
         registerMixinNodeType( nodeTypeManager, JcrMetadataRepository.PROJECT_VERSION_NODE_TYPE );
         registerMixinNodeType( nodeTypeManager, JcrMetadataRepository.ARTIFACT_NODE_TYPE );
         registerMixinNodeType( nodeTypeManager, JcrMetadataRepository.FACET_NODE_TYPE );
+        registerMixinNodeType( nodeTypeManager, JcrMetadataRepository.DEPENDENCY_NODE_TYPE );
     }
 
     private static void registerMixinNodeType( NodeTypeManager nodeTypeManager, String name )
@@ -269,17 +272,55 @@ public class JcrMetadataRepository
                     mailingList.getOtherArchives() ) );
                 i++;
             }
-            i = 0;
-            for ( Dependency dependency : versionMetadata.getDependencies() )
+
+            if ( !versionMetadata.getDependencies().isEmpty() )
             {
-                versionNode.setProperty( "dependency." + i + ".classifier", dependency.getClassifier() );
-                versionNode.setProperty( "dependency." + i + ".scope", dependency.getScope() );
-                versionNode.setProperty( "dependency." + i + ".systemPath", dependency.getSystemPath() );
-                versionNode.setProperty( "dependency." + i + ".artifactId", dependency.getArtifactId() );
-                versionNode.setProperty( "dependency." + i + ".groupId", dependency.getGroupId() );
-                versionNode.setProperty( "dependency." + i + ".version", dependency.getVersion() );
-                versionNode.setProperty( "dependency." + i + ".type", dependency.getType() );
-                i++;
+                Node dependenciesNode = JcrUtils.getOrAddNode( versionNode, "dependencies" );
+
+                for ( Dependency dependency : versionMetadata.getDependencies() )
+                {
+                    // Note that we deliberately don't alter the namespace path - not enough dependencies for
+                    // number of nodes at a given depth to be an issue. Similarly, we don't add subnodes for each
+                    // component of the ID as that creates extra depth and causes a great cost in space and memory
+
+                    // FIXME: change group ID to namespace
+                    // FIXME: change to artifact's ID - this is constructed by the Maven 2 format for now.
+                    //        This won't support types where the extension doesn't match the type.
+                    //        (see also Maven2RepositoryStorage#readProjectVersionMetadata construction of POM)
+                    String id =
+                        dependency.getGroupId() + ";" + dependency.getArtifactId() + "-" + dependency.getVersion();
+                    if ( dependency.getClassifier() != null )
+                    {
+                        id += "-" + dependency.getClassifier();
+                    }
+                    id += "." + dependency.getType();
+
+                    Node n = JcrUtils.getOrAddNode( dependenciesNode, id );
+                    n.addMixin( DEPENDENCY_NODE_TYPE );
+
+                    // FIXME: remove temp code just to make it keep working
+                    n.setProperty( "groupId", dependency.getGroupId() );
+                    n.setProperty( "artifactId", dependency.getArtifactId() );
+                    n.setProperty( "version", dependency.getVersion() );
+                    n.setProperty( "type", dependency.getType() );
+                    n.setProperty( "classifier", dependency.getClassifier() );
+                    n.setProperty( "scope", dependency.getScope() );
+                    n.setProperty( "systemPath", dependency.getSystemPath() );
+                    n.setProperty( "optional", dependency.isOptional() );
+
+                    // node has no native content at this time, just facets
+                    // no need to list a type as it's implied by the path. Parents are Maven specific.
+
+                    // FIXME: add scope, systemPath, type, version, classifier & maven2 specific IDs as a facet
+                    //        (should also have been added to the Dependency)
+
+                    // TODO: add a property that is a weak reference to the originating artifact, creating it if
+                    //       necessary (without adding the archiva:artifact mixin so that it doesn't get listed as an
+                    //       artifact, which gives a different meaning to "incomplete" which is a known local project
+                    //       that doesn't have metadata yet but has artifacts). (Though we may want to give it the
+                    //       artifact mixin and another property to identify all non-local artifacts for the closure
+                    //       reports)
+                }
             }
 
             for ( MetadataFacet facet : versionMetadata.getFacetList() )
@@ -304,6 +345,7 @@ public class JcrMetadataRepository
         }
     }
 
+    // FIXME: remove this and projectversionreference
     public void updateProjectReference( String repositoryId, String namespace, String projectId, String projectVersion,
                                         ProjectVersionReference reference )
         throws MetadataRepositoryException
@@ -808,30 +850,26 @@ public class JcrMetadataRepository
                 i++;
             }
 
-            done = false;
-            i = 0;
-            while ( !done )
+            if ( node.hasNode( "dependencies" ) )
             {
-                String dependencyArtifactId = getPropertyString( node, "dependency." + i + ".artifactId" );
-                if ( dependencyArtifactId != null )
-                {
-                    Dependency dependency = new Dependency();
-                    dependency.setArtifactId( dependencyArtifactId );
-                    dependency.setGroupId( getPropertyString( node, "dependency." + i + ".groupId" ) );
-                    dependency.setClassifier( getPropertyString( node, "dependency." + i + ".classifier" ) );
-                    dependency.setOptional( Boolean.valueOf( getPropertyString( node,
-                                                                                "dependency." + i + ".optional" ) ) );
-                    dependency.setScope( getPropertyString( node, "dependency." + i + ".scope" ) );
-                    dependency.setSystemPath( getPropertyString( node, "dependency." + i + ".systemPath" ) );
-                    dependency.setType( getPropertyString( node, "dependency." + i + ".type" ) );
-                    dependency.setVersion( getPropertyString( node, "dependency." + i + ".version" ) );
-                    versionMetadata.addDependency( dependency );
-                }
-                else
+                Node dependenciesNode = node.getNode( "dependencies" );
+                for ( Node n : JcrUtils.getChildNodes( dependenciesNode ) )
                 {
-                    done = true;
+                    if ( n.isNodeType( DEPENDENCY_NODE_TYPE ) )
+                    {
+                        Dependency dependency = new Dependency();
+                        // FIXME: correct these properties
+                        dependency.setArtifactId( getPropertyString( n, "artifactId" ) );
+                        dependency.setGroupId( getPropertyString( n, "groupId" ) );
+                        dependency.setClassifier( getPropertyString( n, "classifier" ) );
+                        dependency.setOptional( Boolean.valueOf( getPropertyString( n, "optional" ) ) );
+                        dependency.setScope( getPropertyString( n, "scope" ) );
+                        dependency.setSystemPath( getPropertyString( n, "systemPath" ) );
+                        dependency.setType( getPropertyString( n, "type" ) );
+                        dependency.setVersion( getPropertyString( n, "version" ) );
+                        versionMetadata.addDependency( dependency );
+                    }
                 }
-                i++;
             }
 
             for ( Node n : JcrUtils.getChildNodes( node ) )