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/01/26 15:24:10 UTC

[11/23] incubator-usergrid git commit: Addition of emf.deleteApplicaton() method and a test for it in EntityManagerFacotryImplIT.

Addition of emf.deleteApplicaton() method and  a test for it in EntityManagerFacotryImplIT.


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

Branch: refs/heads/two-dot-o-import
Commit: 7335f9411aa20357bc3c4b3c866b12dfdadb23a3
Parents: 0408b4b
Author: Dave Johnson <dm...@apigee.com>
Authored: Tue Jan 20 11:59:34 2015 -0500
Committer: Dave Johnson <dm...@apigee.com>
Committed: Tue Jan 20 11:59:34 2015 -0500

----------------------------------------------------------------------
 .../corepersistence/CpEntityManagerFactory.java | 56 ++++++++++++---
 .../HybridEntityManagerFactory.java             |  9 ++-
 .../persistence/EntityManagerFactory.java       | 11 ++-
 .../cassandra/EntityManagerFactoryImpl.java     | 11 ++-
 .../cassandra/EntityManagerFactoryImplIT.java   | 71 +++++++++++++-------
 5 files changed, 115 insertions(+), 43 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/7335f941/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java
index 7016d3c..93eb15e 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java
@@ -123,8 +123,6 @@ public class CpEntityManagerFactory implements EntityManagerFactory, Application
 
         this.cass = cass;
         this.counterUtils = counterUtils;
-
-
     }
 
 
@@ -136,8 +134,8 @@ public class CpEntityManagerFactory implements EntityManagerFactory, Application
             if ( em.getApplication() == null ) {
                 logger.info("Creating system application");
                 Map sysAppProps = new HashMap<String, Object>();
-                sysAppProps.put( PROPERTY_NAME, "systemapp");
-                em.create( CpNamingUtils.SYSTEM_APP_ID, TYPE_APPLICATION, sysAppProps );
+                sysAppProps.put(PROPERTY_NAME, "systemapp");
+                em.create(CpNamingUtils.SYSTEM_APP_ID, TYPE_APPLICATION, sysAppProps);
                 em.getApplication();
                 em.createIndex();
                 em.refreshIndex();
@@ -165,7 +163,7 @@ public class CpEntityManagerFactory implements EntityManagerFactory, Application
 
 
     @Override
-    public String getImpementationDescription() throws Exception {
+    public String getImplementationDescription() throws Exception {
         return IMPLEMENTATION_DESCRIPTION;
     }
 
@@ -187,7 +185,7 @@ public class CpEntityManagerFactory implements EntityManagerFactory, Application
         EntityManager em = new CpEntityManager();
         em.init( this, applicationId );
 
-        // only need to do this once 
+        // only need to do this once
         if ( !applicationIndexesCreated.contains( applicationId ) ) {
             em.createIndex();
             applicationIndexesCreated.add( applicationId );
@@ -285,6 +283,36 @@ public class CpEntityManagerFactory implements EntityManagerFactory, Application
     }
 
 
+    /**
+     * Delete Application.
+     *
+     * <p>The Application Entity is be moved to a Deleted_Applications collection and the
+     * Application index will be removed.
+     *
+     * <p>TODO: add scheduled task that can completely delete all deleted application data.</p>
+     *
+     * @param applicationId UUID of Application to be deleted.
+     */
+    @Override
+    public void deleteApplication(UUID applicationId) throws Exception {
+
+        // remove old appinfo Entity, which is in the System App's appinfos collection
+        EntityManager em = getEntityManager(CpNamingUtils.SYSTEM_APP_ID);
+        Query q = Query.fromQL(String.format("select * where applicationUuid = '%s'", applicationId.toString()));
+        Results results = em.searchCollection( em.getApplicationRef(), "appinfos", q);
+        Entity appToDelete = results.getEntity();
+        em.delete( appToDelete );
+
+        // create new Entity in deleted_appinfos collection, with same UUID and properties as deleted appinfo
+        em.create( "deleted_appinfo", appToDelete.getProperties() );
+
+        em.refreshIndex();
+
+        // delete the application's index
+        EntityIndex ei = managerCache.getEntityIndex(new ApplicationScopeImpl(
+            new SimpleId(applicationId, TYPE_APPLICATION)));
+        ei.deleteIndex();
+    }
 
 
     @Override
@@ -395,6 +423,11 @@ public class CpEntityManagerFactory implements EntityManagerFactory, Application
                     managerCache.getEntityCollectionManager( collScope ).load( targetId )
                         .toBlockingObservable().lastOrDefault(null);
 
+            if ( e == null ) {
+                logger.warn("Applicaion {} in index but not found in collections", targetId );
+                continue;
+            } 
+            
             appMap.put(
                 (String)e.getField( PROPERTY_NAME ).getValue(),
                 (UUID)e.getField( "applicationUuid" ).getValue());
@@ -407,6 +440,7 @@ public class CpEntityManagerFactory implements EntityManagerFactory, Application
     @Override
     public void setup() throws Exception {
         getSetup().init();
+        init();
     }
 
 
@@ -460,7 +494,7 @@ public class CpEntityManagerFactory implements EntityManagerFactory, Application
             propsEntity = EntityFactory.newEntity( UUIDUtils.newTimeUUID(), "propertymap");
         }
 
-        // intentionally going only one-level deep into fields and treating all 
+        // intentionally going only one-level deep into fields and treating all
         // values as strings because that is all we need for service properties
         for ( String key : properties.keySet() ) {
             propsEntity.setProperty( key, properties.get(key).toString() );
@@ -711,13 +745,13 @@ public class CpEntityManagerFactory implements EntityManagerFactory, Application
     public Health getEntityStoreHealth() {
 
         // could use any collection scope here, does not matter
-        EntityCollectionManager ecm = getManagerCache().getEntityCollectionManager( 
-            new CollectionScopeImpl( 
+        EntityCollectionManager ecm = getManagerCache().getEntityCollectionManager(
+            new CollectionScopeImpl(
                 new SimpleId( CpNamingUtils.SYSTEM_APP_ID, "application"),
                 new SimpleId( CpNamingUtils.SYSTEM_APP_ID, "application"),
                 "dummy"
         ));
-                 
+
         return ecm.getHealth();
-    } 
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/7335f941/stack/core/src/main/java/org/apache/usergrid/corepersistence/HybridEntityManagerFactory.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/HybridEntityManagerFactory.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/HybridEntityManagerFactory.java
index af4acdb..a8dd404 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/HybridEntityManagerFactory.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/HybridEntityManagerFactory.java
@@ -57,8 +57,8 @@ public class HybridEntityManagerFactory implements EntityManagerFactory, Applica
     }
 
     @Override
-    public String getImpementationDescription() throws Exception {
-        return factory.getImpementationDescription();
+    public String getImplementationDescription() throws Exception {
+        return factory.getImplementationDescription();
     }
 
     @Override
@@ -78,6 +78,11 @@ public class HybridEntityManagerFactory implements EntityManagerFactory, Applica
     }
 
     @Override
+    public void deleteApplication(UUID applicationId) throws Exception {
+        factory.deleteApplication( applicationId );
+    }
+
+    @Override
     public UUID importApplication(String organization, UUID applicationId, String name, 
             Map<String, Object> properties) throws Exception {
         return factory.importApplication(organization, applicationId, name, properties);

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/7335f941/stack/core/src/main/java/org/apache/usergrid/persistence/EntityManagerFactory.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/persistence/EntityManagerFactory.java b/stack/core/src/main/java/org/apache/usergrid/persistence/EntityManagerFactory.java
index 3d4827b..b4bfbd2 100644
--- a/stack/core/src/main/java/org/apache/usergrid/persistence/EntityManagerFactory.java
+++ b/stack/core/src/main/java/org/apache/usergrid/persistence/EntityManagerFactory.java
@@ -40,7 +40,7 @@ public interface EntityManagerFactory {
      *
      * @throws Exception the exception
      */
-    public abstract String getImpementationDescription() throws Exception;
+    public abstract String getImplementationDescription() throws Exception;
 
     /**
      * Gets the entity manager.
@@ -73,9 +73,16 @@ public interface EntityManagerFactory {
      *
      * @throws Exception the exception
      */
-    public abstract UUID createApplication( 
+    public abstract UUID createApplication(
             String organizationName, String name, Map<String, Object> properties ) throws Exception;
 
+    /**
+     * Delete Application.
+     *
+     * @param applicationId UUID of Application to be deleted.
+     */
+    public abstract void deleteApplication( UUID applicationId ) throws Exception;
+
     public abstract UUID importApplication( String organization, UUID applicationId, String name,
                                             Map<String, Object> properties ) throws Exception;
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/7335f941/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/EntityManagerFactoryImpl.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/EntityManagerFactoryImpl.java b/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/EntityManagerFactoryImpl.java
index f073da7..a598a82 100644
--- a/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/EntityManagerFactoryImpl.java
+++ b/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/EntityManagerFactoryImpl.java
@@ -119,10 +119,10 @@ public class EntityManagerFactoryImpl implements EntityManagerFactory, Applicati
     /*
      * (non-Javadoc)
      * 
-     * @see org.apache.usergrid.core.Datastore#getImpementationDescription()
+     * @see org.apache.usergrid.core.Datastore#getImplementationDescription()
      */
     @Override
-    public String getImpementationDescription() {
+    public String getImplementationDescription() {
         return IMPLEMENTATION_DESCRIPTION;
     }
 
@@ -218,6 +218,13 @@ public class EntityManagerFactoryImpl implements EntityManagerFactory, Applicati
         return applicationId;
     }
 
+    
+    @Override
+    public void deleteApplication(UUID applicationId) throws Exception {
+        // TODO implement deleteApplication in Usergrid 1 code base (master branch?)
+        throw new UnsupportedOperationException("Not supported."); 
+    }
+
 
     private String buildAppName( String organizationName, String name ) {
         return StringUtils.lowerCase( name.contains( "/" ) ? name : organizationName + "/" + name );

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/7335f941/stack/core/src/test/java/org/apache/usergrid/persistence/cassandra/EntityManagerFactoryImplIT.java
----------------------------------------------------------------------
diff --git a/stack/core/src/test/java/org/apache/usergrid/persistence/cassandra/EntityManagerFactoryImplIT.java b/stack/core/src/test/java/org/apache/usergrid/persistence/cassandra/EntityManagerFactoryImplIT.java
index 4edd121..8841e56 100644
--- a/stack/core/src/test/java/org/apache/usergrid/persistence/cassandra/EntityManagerFactoryImplIT.java
+++ b/stack/core/src/test/java/org/apache/usergrid/persistence/cassandra/EntityManagerFactoryImplIT.java
@@ -17,39 +17,22 @@
 package org.apache.usergrid.persistence.cassandra;
 
 
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.ClassRule;
-import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import org.apache.commons.lang3.RandomStringUtils;
-
 import org.apache.usergrid.AbstractCoreIT;
 import org.apache.usergrid.cassandra.CassandraResource;
 import org.apache.usergrid.cassandra.Concurrent;
-import org.apache.usergrid.persistence.Entity;
-import org.apache.usergrid.persistence.EntityManager;
-import org.apache.usergrid.persistence.EntityManagerFactory;
-import org.apache.usergrid.persistence.Results;
-import org.apache.usergrid.persistence.SimpleEntityRef;
+import org.apache.usergrid.persistence.*;
 import org.apache.usergrid.persistence.cassandra.util.TraceTag;
 import org.apache.usergrid.persistence.cassandra.util.TraceTagManager;
 import org.apache.usergrid.persistence.cassandra.util.TraceTagReporter;
 import org.apache.usergrid.persistence.index.impl.ElasticSearchResource;
+import org.junit.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.*;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
 
 
 @Concurrent()
@@ -107,8 +90,43 @@ public class EntityManagerFactoryImplIT extends AbstractCoreIT {
     }
 
 
-    public void testRebuildIndexes() throws Exception {
+    @Test
+    public void testDeleteApplication() throws Exception {
+
+        String rand = RandomStringUtils.randomAlphabetic(20);
+
+        // create an application with a collection and an entity
 
+        UUID applicationId = setup.createApplication( "test-org-" + rand, "test-app-" + rand );
+
+        EntityManager em = setup.getEmf().getEntityManager( applicationId );
+
+        Map<String, Object> properties1 = new LinkedHashMap<String, Object>();
+        properties1.put( "Name", "12 Angry Men" );
+        properties1.put( "Year", 1957 );
+        Entity film1 = em.create("film", properties1);
+
+        Map<String, Object> properties2 = new LinkedHashMap<String, Object>();
+        properties2.put( "Name", "Reservoir Dogs" );
+        properties2.put( "Year", 1992 );
+        Entity film2 = em.create( "film", properties2 );
+
+        em.refreshIndex();
+
+        // delete the application
+
+        setup.getEmf().deleteApplication( applicationId );
+
+        // attempt to get entities in application's collections in various ways should all fail
+
+        assertNull( setup.getEmf().lookupApplication("test-app-" + rand) );
+
+        Map<String, UUID> appMap = setup.getEmf().getApplications();
+        for ( String appName : appMap.keySet() ) {
+            UUID appId = appMap.get( appName );
+            assertNotEquals( appId, applicationId );
+            assertNotEquals( appName, "test-app-" + rand );
+        }
 
     }
 
@@ -119,7 +137,8 @@ public class EntityManagerFactoryImplIT extends AbstractCoreIT {
         traceTagManager.attach( traceTag );
         logger.info( "EntityDaoTest.testCreateAndGet" );
 
-        UUID applicationId = createApplication( "EntityManagerFactoryImplIT", "testCreateAndGet" + RandomStringUtils.randomAlphabetic(20)  );
+        UUID applicationId = createApplication( "EntityManagerFactoryImplIT", "testCreateAndGet"
+                + RandomStringUtils.randomAlphabetic(20)  );
         logger.info( "Application id " + applicationId );
 
         EntityManager em = emf.getEntityManager( applicationId );