add repair to collection iterator tool
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/fd7a75ee Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/fd7a75ee Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/fd7a75ee Branch: refs/heads/master Commit: fd7a75ee0db360293df628f99bbc304e966e93b4 Parents: a7639d5 Author: Mike Dunker <[email protected]> Authored: Thu Aug 25 21:34:11 2016 -0700 Committer: Mike Dunker <[email protected]> Committed: Thu Aug 25 21:34:11 2016 -0700 ---------------------------------------------------------------------- .../usergrid/tools/CollectionIterator.java | 44 ++++++++++++++------ 1 file changed, 32 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/usergrid/blob/fd7a75ee/stack/tools/src/main/java/org/apache/usergrid/tools/CollectionIterator.java ---------------------------------------------------------------------- diff --git a/stack/tools/src/main/java/org/apache/usergrid/tools/CollectionIterator.java b/stack/tools/src/main/java/org/apache/usergrid/tools/CollectionIterator.java index 02188cb..855c363 100644 --- a/stack/tools/src/main/java/org/apache/usergrid/tools/CollectionIterator.java +++ b/stack/tools/src/main/java/org/apache/usergrid/tools/CollectionIterator.java @@ -70,6 +70,8 @@ public class CollectionIterator extends ToolBase { private static final String ENTITY_TYPE_ARG = "entityType"; + private static final String REMOVE_CONNECTIONS_ARG = "removeConnections"; + private EntityManager em; @Override @@ -87,11 +89,17 @@ public class CollectionIterator extends ToolBase { options.addOption( appOption ); Option collectionOption = - OptionBuilder.withArgName(ENTITY_TYPE_ARG).hasArg().isRequired( true ).withDescription( "collection name" ) - .create(ENTITY_TYPE_ARG); + OptionBuilder.withArgName(ENTITY_TYPE_ARG).hasArg().isRequired( true ).withDescription( "singular collection name" ) + .create(ENTITY_TYPE_ARG); options.addOption( collectionOption ); + Option removeConnectionsOption = + OptionBuilder.withArgName(REMOVE_CONNECTIONS_ARG).hasArg().isRequired( false ).withDescription( "remove orphaned connections" ) + .create(REMOVE_CONNECTIONS_ARG); + + options.addOption( removeConnectionsOption ); + return options; } @@ -108,18 +116,22 @@ public class CollectionIterator extends ToolBase { startSpring(); - UUID appToFilter = null; - if (!line.getOptionValue(APPLICATION_ARG).isEmpty()) { - appToFilter = UUID.fromString(line.getOptionValue(APPLICATION_ARG)); + if (line.getOptionValue(APPLICATION_ARG).isEmpty()) { + throw new RuntimeException("Application ID not provided."); } + final UUID app = UUID.fromString(line.getOptionValue(APPLICATION_ARG)); + + String removeOrphansOption = line.getOptionValue(REMOVE_CONNECTIONS_ARG); + final boolean removeOrphans = !removeOrphansOption.isEmpty() && removeOrphansOption.toLowerCase().equals("yes"); String entityType = line.getOptionValue(ENTITY_TYPE_ARG); - logger.info("Staring Tool: CollectionIterator"); + logger.info("Starting Tool: CollectionIterator"); + logger.info("Orphans {} be deleted", removeOrphans ? "WILL" : "will not"); logger.info("Using Cassandra consistency level: {}", System.getProperty("usergrid.read.cl", "CL_LOCAL_QUORUM")); - em = emf.getEntityManager( appToFilter ); - EntityRef headEntity = new SimpleEntityRef("application", appToFilter); + em = emf.getEntityManager( app ); + EntityRef headEntity = new SimpleEntityRef("application", app); CollectionService collectionService = injector.getInstance(CollectionService.class); String collectionName = InflectionUtils.pluralize(entityType); @@ -132,8 +144,6 @@ public class CollectionIterator extends ToolBase { CollectionInfo collection = getDefaultSchema().getCollection(headEntity.getType(), collectionName); - final UUID app = appToFilter; - IdQueryExecutor idQueryExecutor = new IdQueryExecutor(query.getCursor()) { @Override @@ -157,7 +167,8 @@ public class CollectionIterator extends ToolBase { ids.forEach( uuid -> { try { - org.apache.usergrid.persistence.Entity retrieved = em.get(new SimpleEntityRef(entityType, uuid)); + EntityRef entityRef = new SimpleEntityRef(entityType, uuid); + org.apache.usergrid.persistence.Entity retrieved = em.get(entityRef); long timestamp = 0; String dateString = "NOT TIME-BASED"; @@ -173,7 +184,16 @@ public class CollectionIterator extends ToolBase { logger.info("{} - {} - entity data found", uuid, dateString); }else{ - logger.info("{} - {} - entity data NOT found", uuid, dateString); + if (removeOrphans) { + logger.info("{} - {} - entity data NOT found, REMOVING", uuid, dateString); + try { + em.removeFromCollection(headEntity, collectionName, entityRef ); + } catch (Exception e) { + logger.error("{} - exception while trying to remove orphaned connection, {}", uuid, e.getMessage()); + } + } else { + logger.info("{} - {} - entity data NOT found", uuid, dateString); + } } } catch (Exception e) { logger.error("{} - exception while trying to load entity data, {} ", uuid, e.getMessage());
