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());

Reply via email to