You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by sn...@apache.org on 2015/11/17 23:05:23 UTC

[28/39] usergrid git commit: Added in extra logic to handle legacy entities and re added in the single case repair.

Added in extra logic to handle legacy entities and re added in the single case repair.


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/6acc8d3b
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/6acc8d3b
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/6acc8d3b

Branch: refs/heads/1.x
Commit: 6acc8d3b5eddbe5a449dee70fe910f8098cf5baf
Parents: 1fab1db
Author: George Reyes <gr...@apache.org>
Authored: Wed Nov 11 14:42:48 2015 -0800
Committer: George Reyes <gr...@apache.org>
Committed: Wed Nov 11 14:42:48 2015 -0800

----------------------------------------------------------------------
 .../usergrid/tools/UniqueIndexCleanup.java      | 70 +++++++++++++++++---
 .../usergrid/tools/UniqueIndexCleanupTest.java  | 20 +++++-
 2 files changed, 78 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/6acc8d3b/stack/tools/src/main/java/org/apache/usergrid/tools/UniqueIndexCleanup.java
----------------------------------------------------------------------
diff --git a/stack/tools/src/main/java/org/apache/usergrid/tools/UniqueIndexCleanup.java b/stack/tools/src/main/java/org/apache/usergrid/tools/UniqueIndexCleanup.java
index d1a63b6..82378cd 100644
--- a/stack/tools/src/main/java/org/apache/usergrid/tools/UniqueIndexCleanup.java
+++ b/stack/tools/src/main/java/org/apache/usergrid/tools/UniqueIndexCleanup.java
@@ -208,7 +208,7 @@ public class UniqueIndexCleanup extends ToolBase {
                                 deleteRow( m, applicationId, collectionName, uniqueValueKey, uniqueValue );
                             }
                             else {
-                                entityUUIDDelete( m, applicationId, collectionName, uniqueValueKey, uniqueValue, cols );
+                                entityUUIDDelete( m, applicationId, collectionName, uniqueValueKey, uniqueValue, cols,returnedRowKey );
                             }
                         }
                     }
@@ -275,7 +275,7 @@ public class UniqueIndexCleanup extends ToolBase {
 
     private void entityUUIDDelete( final Mutator<ByteBuffer> m, final UUID applicationId, final String collectionName,
                                    final String uniqueValueKey, final String uniqueValue,
-                                   final List<HColumn<ByteBuffer, ByteBuffer>> cols ) throws Exception {
+                                   final List<HColumn<ByteBuffer, ByteBuffer>> cols, String rowKey ) throws Exception {
         Boolean cleanup = false;
         EntityManagerImpl em = ( EntityManagerImpl ) emf.getEntityManager( applicationId );
         int numberOfColumnsDeleted = 0;
@@ -320,16 +320,43 @@ public class UniqueIndexCleanup extends ToolBase {
         }
 
         //this means that the same unique rowkey has two values associated with it
-        if(entities[0]!=null && entities[1]!=null){
+        if(index>2){
             Entity mostRecentEntity = entities[0];
             for(Entity entity: entities){
+                if(mostRecentEntity == null){
+                    System.out.println( "Most Recent entity is null and is being replaced by regular entity" );
+                    mostRecentEntity = entity;
+                }
+                if(entity == null){
+                    System.out.println("Entity we're cycling through is null and we need more new entities");
+                    continue;
+                }
+
+                mostRecentEntity = verifyModifiedTimestamp( mostRecentEntity );
+                entity = verifyModifiedTimestamp( entity );
+
+
                 if(mostRecentEntity.getModified() > entity.getModified()){
-                    em.deleteEntity( entity.getUuid() );
-                    System.out.println("Deleting "+entity.getUuid().toString()+" because it shares older unique value with: "+uniqueValue);
+                    System.out.println("Deleting "+entity.getUuid().toString()+" because it is the older column in the following rowkey: "+rowKey);
+                    System.out.flush();
+                    //                    try {
+                        em.deleteEntity( entity.getUuid() );
+//                    }catch(Exception e){
+//                        System.out.println("Found error when trying to delete the following uuid: "+entity.getUuid()+" Please repair manually or remote debug.");
+//                        System.out.println(e.getMessage());
+//                        break;
+//                    }
                 }
                 else if (mostRecentEntity.getModified() < entity.getModified()){
-                    System.out.println("Deleting "+mostRecentEntity.getUuid().toString()+" because it shares older unique value with: "+uniqueValue);
-                    em.deleteEntity( mostRecentEntity.getUuid() );
+                    System.out.println("Deleting "+mostRecentEntity.getUuid().toString()+" because it is the older column in the following rowkey: "+rowKey);
+                    System.out.flush();
+                    //try {
+                        em.deleteEntity( mostRecentEntity.getUuid() );
+//                    }catch(Exception e){
+//                        System.out.println("Found error when trying to delete the following uuid: "+mostRecentEntity.getUuid()+" Please repair manually or remote debug.");
+//                        System.out.println(e.getMessage());
+//                        break;
+//                    }
                     mostRecentEntity = entity;
                 }
                 else if (mostRecentEntity.getModified() == entity.getModified() && !mostRecentEntity.getUuid().equals( entity.getUuid() )){
@@ -349,6 +376,26 @@ public class UniqueIndexCleanup extends ToolBase {
     }
 
 
+    private Entity verifyModifiedTimestamp( final Entity unverifiedEntity ) {
+        Entity entity = unverifiedEntity;
+        if(entity !=null && entity.getModified()==null) {
+            if(entity.getCreated()!=null){
+                System.out.println("Setting modified timestamp to created for comparison purposes");
+                entity.setModified( entity.getCreated() );
+                return entity;
+            }
+            else{
+                System.out.println("Please delete or remake: "+entity.getUuid());
+                System.out.println("Setting timestamps to 1");
+                entity.setCreated( 1L );
+                entity.setModified( 1L );
+                return entity;
+            }
+        }
+        return entity;
+    }
+
+
     //really only deletes ones that aren't existant for a specific value
     private void deleteInvalidValuesForUniqueProperty( Mutator<ByteBuffer> m, CommandLine line ) throws Exception {
         UUID applicationId = UUID.fromString( line.getOptionValue( APPLICATION_ARG ) );
@@ -365,12 +412,13 @@ public class UniqueIndexCleanup extends ToolBase {
 
 
         if ( cols.size() == 0 ) {
-            System.out.println(
-                    "Zero entities were found for this unique value. Its possible it doesn't exist or you typed in in"
-                            + " wrong :p." );
+            System.out.println("Zero columns were found for "+ key.toString()+ ". Will delete rowkey.");
+//            System.out.println(
+//                    "Zero entities were found for this unique value. Its possible it doesn't exist or you typed in in"
+//                            + " wrong :p." );
         }
 
-        entityUUIDDelete( m, applicationId, collectionName, uniqueValueKey, uniqueValue, cols );
+        entityUUIDDelete( m, applicationId, collectionName, uniqueValueKey, uniqueValue, cols,key.toString() );
     }
 
 

http://git-wip-us.apache.org/repos/asf/usergrid/blob/6acc8d3b/stack/tools/src/test/java/org/apache/usergrid/tools/UniqueIndexCleanupTest.java
----------------------------------------------------------------------
diff --git a/stack/tools/src/test/java/org/apache/usergrid/tools/UniqueIndexCleanupTest.java b/stack/tools/src/test/java/org/apache/usergrid/tools/UniqueIndexCleanupTest.java
index 088d7e8..e016284 100644
--- a/stack/tools/src/test/java/org/apache/usergrid/tools/UniqueIndexCleanupTest.java
+++ b/stack/tools/src/test/java/org/apache/usergrid/tools/UniqueIndexCleanupTest.java
@@ -444,7 +444,8 @@ public class UniqueIndexCleanupTest {
     }
 
     //POinting at single values is broken now but not entirely used right now anyways.
-    @Ignore
+    //@Ignore
+    @Test
     public void testRepairOfOnlyOneOfTwoColumnsWhilePointingAtSingleValue() throws Exception{
         String rand = RandomStringUtils.randomAlphanumeric( 10 );
 
@@ -509,10 +510,12 @@ public class UniqueIndexCleanupTest {
 //                .get( entityManager.getAlias( applicationInfo.getId(), collectionName, username ).getUuid() ) );
 
 
+        //NEED TO FAIL MORE GRACEFULLY
         //run the cleanup
         UniqueIndexCleanup uniqueIndexCleanup = new UniqueIndexCleanup();
         uniqueIndexCleanup.startTool( new String[] {
                 "-host", "localhost:"+ ServiceITSuite.cassandraResource.getRpcPort(),
+                "-col",collectionName,
                 "-app",applicationInfo.getId().toString(),
                 "-property","username",
                 "-value",username
@@ -524,5 +527,20 @@ public class UniqueIndexCleanupTest {
 
     }
 
+    @Test
+    public void errorchecker(){
+        System.out.println( "Started" );
+
+        UniqueIndexCleanup uniqueIndexCleanup = new UniqueIndexCleanup();
+        uniqueIndexCleanup.startTool( new String[] {
+                "-host", "localhost:9160",
+                "-col","users",
+                "-app","00000000-0000-0000-0000-000000000001",
+                "-property","username",
+                "-value","jromero"
+        }, false );
+        System.out.println( "Finished" );
+    }
+
 }