From 0df0a0a14ac5fbbd4a40638e913b0ea2f8bd48fc Mon Sep 17 00:00:00 2001 From: Olivier Lamy Date: Mon, 24 Mar 2014 06:16:09 +0000 Subject: [PATCH] fix cleanup repository and namespace git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1580764 13f79535-47bb-0310-9956-ffa450edef68 --- .../AbstractMetadataRepositoryTest.java | 1 - .../CassandraMetadataRepository.java | 213 ++++++++++-------- 2 files changed, 120 insertions(+), 94 deletions(-) diff --git a/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java b/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java index 2189b0ae3..9db23c698 100644 --- a/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java +++ b/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java @@ -321,7 +321,6 @@ public abstract class AbstractMetadataRepositoryTest assertEquals( 1, metadata.getMailingLists().size() ); mailingList = metadata.getMailingLists().get( 0 ); assertEquals( "Foo List", mailingList.getName() ); - //assertEquals( Collections.singletonList( "other archive" ), mailingList.getOtherArchives() ); Assertions.assertThat( mailingList.getOtherArchives() ).isNotNull().isNotEmpty().hasSize( 1 ).contains( "other archive" ); diff --git a/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java b/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java index 90d9a4e76..7af4581fc 100644 --- a/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java +++ b/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java @@ -261,16 +261,79 @@ public class CassandraMetadataRepository public void removeNamespace( String repositoryId, String namespaceId ) throws MetadataRepositoryException { + Keyspace keyspace = cassandraArchivaManager.getKeyspace(); try { String key = new Namespace.KeyBuilder().withNamespace( namespaceId ).withRepositoryId( repositoryId ).build(); - MutationResult result = - HFactory.createMutator( cassandraArchivaManager.getKeyspace(), new StringSerializer() ) // - .addDeletion( key, cassandraArchivaManager.getNamespaceFamilyName() ) // - .execute(); + HFactory.createMutator( cassandraArchivaManager.getKeyspace(), new StringSerializer() ) // + .addDeletion( key, cassandraArchivaManager.getNamespaceFamilyName() ) // + .execute(); + + QueryResult> result = HFactory // + .createRangeSlicesQuery( keyspace, // + StringSerializer.get(), // + StringSerializer.get(), // + StringSerializer.get() ) // + .setColumnFamily( cassandraArchivaManager.getProjectFamilyName() ) // + .setColumnNames( "repositoryName" ) // + .addEqualsExpression( "repositoryName", repositoryId ) // + .addEqualsExpression( "namespaceId", namespaceId ) // + .execute(); + + for ( Row row : result.get() ) + { + this.projectTemplate.deleteRow( row.getKey() ); + } + result = HFactory // + .createRangeSlicesQuery( keyspace, // + StringSerializer.get(), // + StringSerializer.get(), // + StringSerializer.get() ) // + .setColumnFamily( cassandraArchivaManager.getProjectVersionMetadataModelFamilyName() ) // + .setColumnNames( "repositoryName" ) // + .addEqualsExpression( "repositoryName", repositoryId ) // + .addEqualsExpression( "namespaceId", namespaceId ) // + .execute(); + + for ( Row row : result.get() ) + { + this.projectVersionMetadataModelTemplate.deleteRow( row.getKey() ); + } + + result = HFactory // + .createRangeSlicesQuery( keyspace, // + StringSerializer.get(), // + StringSerializer.get(), // + StringSerializer.get() ) // + .setColumnFamily( cassandraArchivaManager.getArtifactMetadataModelFamilyName() ) // + .setColumnNames( "repositoryName" ) // + .addEqualsExpression( "repositoryName", repositoryId ) // + .addEqualsExpression( "namespaceId", namespaceId ) // + .execute(); + + for ( Row row : result.get() ) + { + this.artifactMetadataTemplate.deleteRow( row.getKey() ); + } + + result = HFactory // + .createRangeSlicesQuery( keyspace, // + StringSerializer.get(), // + StringSerializer.get(), // + StringSerializer.get() ) // + .setColumnFamily( cassandraArchivaManager.getMetadataFacetModelFamilyName() ) // + .setColumnNames( "repositoryName" ) // + .addEqualsExpression( "repositoryName", repositoryId ) // + .addEqualsExpression( "namespaceId", namespaceId ) // + .execute(); + + for ( Row row : result.get() ) + { + this.metadataFacetTemplate.deleteRow( row.getKey() ); + } } catch ( HInvalidRequestException e ) @@ -286,21 +349,16 @@ public class CassandraMetadataRepository throws MetadataRepositoryException { - // FIXME remove all datas attached to the repositoryId - - // retrieve and delete all namespace with this repositoryId + StringSerializer ss = StringSerializer.get(); // TODO use cql queries to delete all List namespacesKey = new ArrayList(); Keyspace keyspace = cassandraArchivaManager.getKeyspace(); QueryResult> result = HFactory // - .createRangeSlicesQuery( keyspace, // - StringSerializer.get(), // - StringSerializer.get(), // - StringSerializer.get() ) // + .createRangeSlicesQuery( keyspace, ss, ss, ss ) // .setColumnFamily( cassandraArchivaManager.getNamespaceFamilyName() ) // - .setColumnNames( "repositoryName", "name" ) // + .setColumnNames( "repositoryName" ) // .addEqualsExpression( "repositoryName", repositoryId ) // .execute(); @@ -309,109 +367,78 @@ public class CassandraMetadataRepository namespacesKey.add( row.getKey() ); } - HFactory.createMutator( cassandraArchivaManager.getKeyspace(), new StringSerializer() ) // + HFactory.createMutator( cassandraArchivaManager.getKeyspace(), ss ) // .addDeletion( namespacesKey, cassandraArchivaManager.getNamespaceFamilyName() ) // .execute(); //delete repositoryId - HFactory.createMutator( cassandraArchivaManager.getKeyspace(), new StringSerializer() ) // + HFactory.createMutator( cassandraArchivaManager.getKeyspace(), ss ) // .addDeletion( repositoryId, cassandraArchivaManager.getRepositoryFamilyName() ) // .execute(); -/* - final List artifactMetadataModels = new ArrayList(); - // remove data related to the repository - this.getArtifactMetadataModelEntityManager().visitAll( new Function() - { - @Override - public Boolean apply( ArtifactMetadataModel artifactMetadataModel ) - { - if ( artifactMetadataModel != null ) - { - if ( StringUtils.equals( artifactMetadataModel.getRepositoryId(), repositoryId ) ) - { - artifactMetadataModels.add( artifactMetadataModel ); - } - } - return Boolean.TRUE; - } - } ); - - getArtifactMetadataModelEntityManager().remove( artifactMetadataModels ); - final List namespaces = new ArrayList(); + result = HFactory // + .createRangeSlicesQuery( keyspace, // + StringSerializer.get(), // + StringSerializer.get(), // + StringSerializer.get() ) // + .setColumnFamily( cassandraArchivaManager.getProjectFamilyName() ) // + .setColumnNames( "repositoryName" ) // + .addEqualsExpression( "repositoryName", repositoryId ) // + .execute(); - getNamespaceEntityManager().visitAll( new Function() + for ( Row row : result.get() ) { - @Override - public Boolean apply( Namespace namespace ) - { - if ( namespace != null ) - { - if ( StringUtils.equals( namespace.getRepository().getId(), repositoryId ) ) - { - namespaces.add( namespace ); - } - } - return Boolean.TRUE; - } - } ); + this.projectTemplate.deleteRow( row.getKey() ); + } - getNamespaceEntityManager().remove( namespaces ); + result = HFactory // + .createRangeSlicesQuery( keyspace, // + StringSerializer.get(), // + StringSerializer.get(), // + StringSerializer.get() ) // + .setColumnFamily( cassandraArchivaManager.getProjectVersionMetadataModelFamilyName() ) // + .setColumnNames( "repositoryName" ) // + .addEqualsExpression( "repositoryName", repositoryId ) // + .execute(); - final List projects = new ArrayList(); - getProjectEntityManager().visitAll( new Function() + for ( Row row : result.get() ) { - @Override - public Boolean apply( Project project ) - { - if ( project != null ) - { - if ( StringUtils.equals( project.getNamespace().getRepository().getId(), repositoryId ) ) - { - projects.add( project ); - } - } - return Boolean.TRUE; - } - } ); - - getProjectEntityManager().remove( projects ); - - // TODO cleanup or not - //final List metadataFacetModels = new ArrayList( ); - //getMetadataFacetModelEntityManager().visitAll( new Function() + this.projectVersionMetadataModelTemplate.deleteRow( row.getKey() ); + } - final List projectVersionMetadataModels = - new ArrayList(); + result = HFactory // + .createRangeSlicesQuery( keyspace, // + StringSerializer.get(), // + StringSerializer.get(), // + StringSerializer.get() ) // + .setColumnFamily( cassandraArchivaManager.getArtifactMetadataModelFamilyName() ) // + .setColumnNames( "repositoryName" ) // + .addEqualsExpression( "repositoryName", repositoryId ) // + .execute(); - getProjectVersionMetadataModelEntityManager().visitAll( new Function() + for ( Row row : result.get() ) { - @Override - public Boolean apply( ProjectVersionMetadataModel projectVersionMetadataModel ) - { - if ( projectVersionMetadataModel != null ) - { - if ( StringUtils.equals( projectVersionMetadataModel.getNamespace().getRepository().getId(), - repositoryId ) ) - { - projectVersionMetadataModels.add( projectVersionMetadataModel ); - } - } - return Boolean.TRUE; - } - } ); + this.artifactMetadataTemplate.deleteRow( row.getKey() ); + } - getProjectVersionMetadataModelEntityManager().remove( projectVersionMetadataModels ); + result = HFactory // + .createRangeSlicesQuery( keyspace, // + StringSerializer.get(), // + StringSerializer.get(), // + StringSerializer.get() ) // + .setColumnFamily( cassandraArchivaManager.getMetadataFacetModelFamilyName() ) // + .setColumnNames( "repositoryName" ) // + .addEqualsExpression( "repositoryName", repositoryId ) // + .execute(); - Repository repository = getRepositoryEntityManager().get( repositoryId ); - if ( repository != null ) + for ( Row row : result.get() ) { - getRepositoryEntityManager().remove( repository ); + this.metadataFacetTemplate.deleteRow( row.getKey() ); } - */ + } @Override -- 2.39.5