Author: olamy
Date: Thu Mar 20 23:22:50 2014
New Revision: 1579822
URL: http://svn.apache.org/r1579822
Log:
start moving project data handling to hector
Modified:
archiva/trunk/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraArchivaManager.java
archiva/trunk/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java
archiva/trunk/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/DefaultCassandraArchivaManager.java
archiva/trunk/archiva-modules/plugins/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/cassandra/RepositoriesNamespaceTest.java
Modified:
archiva/trunk/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraArchivaManager.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraArchivaManager.java?rev=1579822&r1=1579821&r2=1579822&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraArchivaManager.java
(original)
+++
archiva/trunk/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraArchivaManager.java
Thu Mar 20 23:22:50 2014
@@ -42,4 +42,6 @@ public interface CassandraArchivaManager
String getNamespaceFamilyName();
+ String getProjectFamilyName();
+
}
Modified:
archiva/trunk/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java?rev=1579822&r1=1579821&r2=1579822&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java
(original)
+++
archiva/trunk/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java
Thu Mar 20 23:22:50 2014
@@ -41,6 +41,7 @@ import org.apache.archiva.metadata.repos
import org.apache.archiva.metadata.repository.MetadataResolutionException;
import
org.apache.archiva.metadata.repository.cassandra.model.ArtifactMetadataModel;
import org.apache.archiva.metadata.repository.cassandra.model.Namespace;
+import org.apache.archiva.metadata.repository.cassandra.model.Project;
import org.apache.archiva.metadata.repository.cassandra.model.Repository;
import org.apache.commons.lang.StringUtils;
import org.modelmapper.ModelMapper;
@@ -497,36 +498,71 @@ public class CassandraMetadataRepository
public void updateProject( String repositoryId, ProjectMetadata
projectMetadata )
throws MetadataRepositoryException
{
-/*
- // project exists ? if yes return
- String projectKey = new Project.KeyBuilder().withProjectId(
projectMetadata.getId() ).withNamespace(
- new Namespace( projectMetadata.getNamespace(), new Repository(
repositoryId ) ) ).build();
+ Keyspace keyspace = cassandraArchivaManager.getKeyspace();
- Project project = getProjectEntityManager().get( projectKey );
- if ( project != null )
+ QueryResult<OrderedRows<String, String, String>> result = HFactory //
+ .createRangeSlicesQuery( keyspace, //
+ StringSerializer.get(), //
+ StringSerializer.get(), //
+ StringSerializer.get() ) //
+ .setColumnFamily( cassandraArchivaManager.getProjectFamilyName() )
//
+ .setColumnNames( "projectId" ) //
+ .addEqualsExpression( "repositoryId", repositoryId ) //
+ .addEqualsExpression( "namespaceId",
projectMetadata.getNamespace() ) //
+ .addEqualsExpression( "projectId", projectMetadata.getId() ) //
+ .execute();
+
+ // project exists ? if yes return
+ if ( result.get().getCount() > 0 )
{
return;
}
- String namespaceKey = new Namespace.KeyBuilder().withRepositoryId(
repositoryId ).withNamespace(
- projectMetadata.getNamespace() ).build();
- Namespace namespace = getNamespaceEntityManager().get( namespaceKey );
- if ( namespace == null )
- {
- namespace = updateOrAddNamespace( repositoryId,
projectMetadata.getNamespace() );
- }
+ Namespace namespace = updateOrAddNamespace( repositoryId,
projectMetadata.getNamespace() );
- project = new Project( projectKey, projectMetadata.getId(), namespace
);
+ String key =
+ new Project.KeyBuilder().withProjectId( projectMetadata.getId()
).withNamespace( namespace ).build();
- try
+ HFactory.createMutator( keyspace, StringSerializer.get() )
+ // values
+ .addInsertion( key, //
+ cassandraArchivaManager.getProjectFamilyName(), //
+ CassandraUtils.column( "projectId",
projectMetadata.getId() ) ) //
+ .addInsertion( key, //
+ cassandraArchivaManager.getProjectFamilyName(), //
+ CassandraUtils.column( "repositoryId", repositoryId
) ) //
+ .addInsertion( key, //
+ cassandraArchivaManager.getProjectFamilyName(), //
+ CassandraUtils.column( "namespaceId",
projectMetadata.getNamespace() ) )//
+ .execute();
+ }
+
+ @Override
+ public Collection<String> getProjects( final String repoId, final String
namespace )
+ throws MetadataResolutionException
+ {
+
+ Keyspace keyspace = cassandraArchivaManager.getKeyspace();
+
+ QueryResult<OrderedRows<String, String, String>> result = HFactory //
+ .createRangeSlicesQuery( keyspace, //
+ StringSerializer.get(), //
+ StringSerializer.get(), //
+ StringSerializer.get() ) //
+ .setColumnFamily( cassandraArchivaManager.getProjectFamilyName() )
//
+ .setColumnNames( "projectId" ) //
+ .addEqualsExpression( "repositoryId", repoId ) //
+ .addEqualsExpression( "namespaceId", namespace ) //
+ .execute();
+
+ final Set<String> projects = new HashSet<String>(
result.get().getCount() );
+
+ for ( Row<String, String, String> row : result.get() )
{
- getProjectEntityManager().put( project );
+ projects.add( row.getColumnSlice().getColumnByName( "projectId"
).getValue() );
}
- catch ( PersistenceException e )
- {
- throw new MetadataRepositoryException( e.getMessage(), e );
- }*/
+ return projects;
}
@Override
@@ -1517,34 +1553,6 @@ public class CassandraMetadataRepository
}
@Override
- public Collection<String> getProjects( final String repoId, final String
namespace )
- throws MetadataResolutionException
- {
- final Set<String> projects = new HashSet<String>();
-
-/* // FIXME use cql query
- getProjectEntityManager().visitAll( new Function<Project, Boolean>()
- {
- @Override
- public Boolean apply( Project project )
- {
- if ( project != null )
- {
- if ( StringUtils.equals( repoId,
project.getNamespace().getRepository().getName() )
- && StringUtils.startsWith(
project.getNamespace().getName(), namespace ) )
- {
- projects.add( project.getProjectId() );
- }
- }
- return Boolean.TRUE;
- }
- } );*/
-
- return projects;
- }
-
-
- @Override
public void removeProjectVersion( final String repoId, final String
namespace, final String projectId,
final String projectVersion )
throws MetadataRepositoryException
Modified:
archiva/trunk/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/DefaultCassandraArchivaManager.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/DefaultCassandraArchivaManager.java?rev=1579822&r1=1579821&r2=1579822&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/DefaultCassandraArchivaManager.java
(original)
+++
archiva/trunk/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/DefaultCassandraArchivaManager.java
Thu Mar 20 23:22:50 2014
@@ -73,6 +73,8 @@ public class DefaultCassandraArchivaMana
private String namespaceFamilyName = "namespace";
+ private String projectFamilyName = "project";
+
@PostConstruct
public void initialize()
@@ -107,11 +109,11 @@ public class DefaultCassandraArchivaMana
// namespace table
{
- final ColumnFamilyDefinition namespaces =
+ final ColumnFamilyDefinition namespace =
HFactory.createColumnFamilyDefinition(
keyspace.getKeyspaceName(), //
getNamespaceFamilyName(), //
ComparatorType.UTF8TYPE
);
- cfds.add( namespaces );
+ cfds.add( namespace );
// creating indexes for cql query
@@ -120,16 +122,17 @@ public class DefaultCassandraArchivaMana
nameColumn.setIndexName( "name" );
nameColumn.setIndexType( ColumnIndexType.KEYS );
nameColumn.setValidationClass(
ComparatorType.UTF8TYPE.getClassName() );
- namespaces.addColumnDefinition( nameColumn );
+ namespace.addColumnDefinition( nameColumn );
BasicColumnDefinition repositoryIdColumn = new
BasicColumnDefinition();
repositoryIdColumn.setName( StringSerializer.get().toByteBuffer(
"repositoryId" ) );
repositoryIdColumn.setIndexName( "repositoryId" );
repositoryIdColumn.setIndexType( ColumnIndexType.KEYS );
repositoryIdColumn.setValidationClass(
ComparatorType.UTF8TYPE.getClassName() );
- namespaces.addColumnDefinition( repositoryIdColumn );
+ namespace.addColumnDefinition( repositoryIdColumn );
}
+ // repository table
{
final ColumnFamilyDefinition repository =
HFactory.createColumnFamilyDefinition(
keyspace.getKeyspaceName(), //
@@ -146,6 +149,39 @@ public class DefaultCassandraArchivaMana
repository.addColumnDefinition( nameColumn );
}
+ // project table
+ {
+
+ final ColumnFamilyDefinition project =
+ HFactory.createColumnFamilyDefinition(
keyspace.getKeyspaceName(), //
+ getProjectFamilyName(),
//
+ ComparatorType.UTF8TYPE
);
+ cfds.add( project );
+
+ // creating indexes for cql query
+
+ BasicColumnDefinition projectIdColumn = new
BasicColumnDefinition();
+ projectIdColumn.setName( StringSerializer.get().toByteBuffer(
"projectId" ) );
+ projectIdColumn.setIndexName( "projectId" );
+ projectIdColumn.setIndexType( ColumnIndexType.KEYS );
+ projectIdColumn.setValidationClass(
ComparatorType.UTF8TYPE.getClassName() );
+ project.addColumnDefinition( projectIdColumn );
+
+ BasicColumnDefinition repositoryIdColumn = new
BasicColumnDefinition();
+ repositoryIdColumn.setName( StringSerializer.get().toByteBuffer(
"repositoryId" ) );
+ repositoryIdColumn.setIndexName( "repositoryId" );
+ repositoryIdColumn.setIndexType( ColumnIndexType.KEYS );
+ repositoryIdColumn.setValidationClass(
ComparatorType.UTF8TYPE.getClassName() );
+ project.addColumnDefinition( repositoryIdColumn );
+
+ BasicColumnDefinition namespaceIdColumn = new
BasicColumnDefinition();
+ namespaceIdColumn.setName( StringSerializer.get().toByteBuffer(
"namespaceId" ) );
+ namespaceIdColumn.setIndexName( "namespaceId" );
+ namespaceIdColumn.setIndexType( ColumnIndexType.KEYS );
+ namespaceIdColumn.setValidationClass(
ComparatorType.UTF8TYPE.getClassName() );
+ project.addColumnDefinition( namespaceIdColumn );
+ }
+
{ // ensure keyspace exists, here if the keyspace doesn't exist we
suppose nothing exist
if ( cluster.describeKeyspace( keyspaceName ) == null )
{
@@ -197,4 +233,9 @@ public class DefaultCassandraArchivaMana
{
return namespaceFamilyName;
}
+
+ public String getProjectFamilyName()
+ {
+ return projectFamilyName;
+ }
}
Modified:
archiva/trunk/archiva-modules/plugins/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/cassandra/RepositoriesNamespaceTest.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/cassandra/RepositoriesNamespaceTest.java?rev=1579822&r1=1579821&r2=1579822&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/plugins/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/cassandra/RepositoriesNamespaceTest.java
(original)
+++
archiva/trunk/archiva-modules/plugins/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/cassandra/RepositoriesNamespaceTest.java
Thu Mar 20 23:22:50 2014
@@ -19,6 +19,7 @@ package org.apache.archiva.metadata.repo
* under the License.
*/
+import org.apache.archiva.metadata.model.ProjectMetadata;
import org.apache.archiva.metadata.repository.cassandra.model.Namespace;
import org.apache.archiva.metadata.repository.cassandra.model.Repository;
import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
@@ -108,6 +109,15 @@ public class RepositoriesNamespaceTest
Assertions.assertThat( cmr.getNamespaces( "release" )
).isNotEmpty().hasSize( 1 );
Assertions.assertThat( cmr.getNamespaces( "release" )
).containsExactly( "org" );
+ ProjectMetadata projectMetadata = new ProjectMetadata();
+ projectMetadata.setId( "theproject" );
+ projectMetadata.setNamespace( "org" );
+
+ cmr.updateProject( "release", projectMetadata );
+
+ Assertions.assertThat( cmr.getProjects( "release", "org" )
).isNotEmpty().hasSize( 1 ).containsExactly(
+ "theproject" );
+
cmr.removeRepository( "release" );
r = cmr.getRepository( "release" );