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