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/02/21 15:02:07 UTC

[01/25] incubator-usergrid git commit: Fixes issue with cache loading

Repository: incubator-usergrid
Updated Branches:
  refs/heads/app-rebuild-fix 2f077f1ba -> f004f5a31


Fixes issue with cache loading


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

Branch: refs/heads/app-rebuild-fix
Commit: 3c83bcb3f59994b79c3528fb8c03b1ad14d01986
Parents: 4df281e
Author: Todd Nine <tn...@apigee.com>
Authored: Mon Feb 16 15:05:03 2015 -0800
Committer: Todd Nine <tn...@apigee.com>
Committed: Mon Feb 16 15:05:03 2015 -0800

----------------------------------------------------------------------
 .../collection/cache/CachedEntityCollectionManager.java            | 2 +-
 .../collection/impl/EntityCollectionManagerFactoryImpl.java        | 1 +
 2 files changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3c83bcb3/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/cache/CachedEntityCollectionManager.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/cache/CachedEntityCollectionManager.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/cache/CachedEntityCollectionManager.java
index 5430759..186aafa 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/cache/CachedEntityCollectionManager.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/cache/CachedEntityCollectionManager.java
@@ -100,7 +100,7 @@ public class CachedEntityCollectionManager implements EntityCollectionManager {
             return Observable.just( entity );
         }
 
-        return Observable.empty();
+        return targetEntityCollectionManager.load( entityId ).doOnNext( cacheAdd );
 
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3c83bcb3/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerFactoryImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerFactoryImpl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerFactoryImpl.java
index 0b9c643..00860a6 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerFactoryImpl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerFactoryImpl.java
@@ -98,6 +98,7 @@ public class EntityCollectionManagerFactoryImpl implements EntityCollectionManag
                             final EntityCollectionManager proxy = new CachedEntityCollectionManager(entityCacheFig, target  );
 
                             return proxy;
+//                            return target;
                         }
                     } );
 


[14/25] incubator-usergrid git commit: Merge branch 'USERGRID-273' of https://git-wip-us.apache.org/repos/asf/incubator-usergrid into apache_usergrid/USERGRID-273

Posted by sn...@apache.org.
Merge branch 'USERGRID-273' of https://git-wip-us.apache.org/repos/asf/incubator-usergrid into apache_usergrid/USERGRID-273


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

Branch: refs/heads/app-rebuild-fix
Commit: d87577ee6a0652f4bea286562085df40c82bfc71
Parents: d2a02dc 518b679
Author: Rod Simpson <ro...@apigee.com>
Authored: Wed Feb 18 10:40:52 2015 -0700
Committer: Rod Simpson <ro...@apigee.com>
Committed: Wed Feb 18 10:40:52 2015 -0700

----------------------------------------------------------------------
 .../src/main/groovy/configure_usergrid.groovy   |   2 +-
 .../main/resources/usergrid-default.properties  |  13 +-
 .../usergrid/corepersistence/CpSetup.java       |   3 +
 .../entities/FailedImportEntity.java            |  11 +-
 stack/mongo-emulator/pom.xml                    |  15 +-
 stack/pom.xml                                   |  47 ++----
 .../usergrid/rest/filters/MeteringFilter.java   |   2 +
 .../security/SecuredResourceFilterFactory.java  |   2 +
 .../security/shiro/filters/SecurityFilter.java  |   3 +
 .../usergrid/rest/DatabaseInitializer.java      | 146 -------------------
 .../rest/management/OrganizationsIT.java        |   2 +-
 .../management/importer/ImportServiceImpl.java  |   5 +-
 .../usergrid/management/OrganizationIT.java     |  30 ++--
 .../importer/FileImportTrackerTest.java         |  55 +++----
 .../management/importer/ImportCollectionIT.java |  49 ++++---
 .../services/ApplicationsServiceIT.java         |   8 +-
 .../usergrid/services/ServiceInvocationIT.java  |   7 +
 .../usergrid/cassandra/ClearShiroSubject.java   |  18 +++
 18 files changed, 127 insertions(+), 291 deletions(-)
----------------------------------------------------------------------



[18/25] incubator-usergrid git commit: Merge branch 'USERGRID-273' of https://git-wip-us.apache.org/repos/asf/incubator-usergrid into USERGRID-273

Posted by sn...@apache.org.
Merge branch 'USERGRID-273' of https://git-wip-us.apache.org/repos/asf/incubator-usergrid into USERGRID-273


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

Branch: refs/heads/app-rebuild-fix
Commit: 072fab4c8cc13ffa522950a3141c805bdabc735b
Parents: 627d0ca 399d60e
Author: Dave Johnson <dm...@apigee.com>
Authored: Wed Feb 18 14:29:03 2015 -0500
Committer: Dave Johnson <dm...@apigee.com>
Committed: Wed Feb 18 14:29:03 2015 -0500

----------------------------------------------------------------------
 stack/rest/README.md                            | 11 ++++++++++
 stack/rest/pom.xml                              | 17 ++++++++++-----
 .../apache/usergrid/rest/AbstractRestIT.java    |  9 ++++----
 .../test/resource2point0/AbstractRestIT.java    | 22 +++++++++++++++++++
 stack/rest/src/test/resources/arquillian.xml    | 23 +++++++++++++++-----
 5 files changed, 68 insertions(+), 14 deletions(-)
----------------------------------------------------------------------



[11/25] incubator-usergrid git commit: Fixes for the ImportCollectionIT tests, which were failing (mostly) because they were using the same test application.

Posted by sn...@apache.org.
Fixes for the ImportCollectionIT tests, which were failing (mostly) because they were using the same test application.


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

Branch: refs/heads/app-rebuild-fix
Commit: d705f69672b01152a45133c4123e215cc95471b9
Parents: 456e649
Author: Dave Johnson <dm...@apigee.com>
Authored: Wed Feb 18 10:19:18 2015 -0500
Committer: Dave Johnson <dm...@apigee.com>
Committed: Wed Feb 18 10:19:18 2015 -0500

----------------------------------------------------------------------
 .../entities/FailedImportEntity.java            | 11 +---
 .../management/importer/ImportServiceImpl.java  |  5 +-
 .../importer/FileImportTrackerTest.java         | 55 ++++++++------------
 .../management/importer/ImportCollectionIT.java | 49 ++++++++++-------
 4 files changed, 55 insertions(+), 65 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/d705f696/stack/core/src/main/java/org/apache/usergrid/persistence/entities/FailedImportEntity.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/persistence/entities/FailedImportEntity.java b/stack/core/src/main/java/org/apache/usergrid/persistence/entities/FailedImportEntity.java
index c49498d..0cb7ede 100644
--- a/stack/core/src/main/java/org/apache/usergrid/persistence/entities/FailedImportEntity.java
+++ b/stack/core/src/main/java/org/apache/usergrid/persistence/entities/FailedImportEntity.java
@@ -17,19 +17,10 @@
  * under the License.
  */
 
-package org.apache.usergrid.persistence.entities;
-
-
-import java.util.UUID;
 
+package org.apache.usergrid.persistence.entities;
 import javax.xml.bind.annotation.XmlRootElement;
 
-import org.codehaus.jackson.map.annotate.JsonSerialize;
-
-import org.apache.usergrid.persistence.TypedEntity;
-import org.apache.usergrid.persistence.annotations.EntityProperty;
-
-
 /**
  * Contains state information for an entity within a FileImport the failed to load
  */

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/d705f696/stack/services/src/main/java/org/apache/usergrid/management/importer/ImportServiceImpl.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/management/importer/ImportServiceImpl.java b/stack/services/src/main/java/org/apache/usergrid/management/importer/ImportServiceImpl.java
index a266e3d..4f849e0 100644
--- a/stack/services/src/main/java/org/apache/usergrid/management/importer/ImportServiceImpl.java
+++ b/stack/services/src/main/java/org/apache/usergrid/management/importer/ImportServiceImpl.java
@@ -194,7 +194,8 @@ public class ImportServiceImpl implements ImportService {
     }
 
     @Override
-    public Results getFileImports(final UUID applicationId, final UUID importId, @Nullable  final String ql, @Nullable final String cursor ) {
+    public Results getFileImports(final UUID applicationId, final UUID importId,
+                                  @Nullable  final String ql, @Nullable final String cursor ) {
 
         Preconditions.checkNotNull( applicationId, "applicationId must be specified" );
                Preconditions.checkNotNull( importId, "importId must be specified" );
@@ -381,7 +382,7 @@ public class ImportServiceImpl implements ImportService {
             query.setConnectionType( IMPORT_FILE_INCLUDES_CONNECTION );
             query.setLimit(MAX_FILE_IMPORTS);
 
-            //TODO, this won't work with more than 100 files
+            // TODO, this won't work with more than 100 files
             Results entities = rootEM.searchConnectedEntities( importRoot, query );
             return entities.size();
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/d705f696/stack/services/src/test/java/org/apache/usergrid/management/importer/FileImportTrackerTest.java
----------------------------------------------------------------------
diff --git a/stack/services/src/test/java/org/apache/usergrid/management/importer/FileImportTrackerTest.java b/stack/services/src/test/java/org/apache/usergrid/management/importer/FileImportTrackerTest.java
index 2978c8b..158f3b8 100644
--- a/stack/services/src/test/java/org/apache/usergrid/management/importer/FileImportTrackerTest.java
+++ b/stack/services/src/test/java/org/apache/usergrid/management/importer/FileImportTrackerTest.java
@@ -97,40 +97,35 @@ public class FileImportTrackerTest {
     @Test
     public void testBoth() throws Exception {
 
+        // create mock em and emf
+
         final EntityManagerFactory emf = mock( EntityManagerFactory.class );
         final EntityManager em = mock( EntityManager.class );
         when( emf.getEntityManager( CpNamingUtils.MANAGEMENT_APPLICATION_ID ) ).thenReturn( em );
 
-        final UUID importFileId = UUIDGenerator.newTimeUUID();
-
+        // create tracker and call its entityWritten() and entityFailed() methods some number of times
 
+        final long expectedSuccess = 100;
+        final int expectedFails = 10;
         final FileImport fileImport = new FileImport();
+        final UUID importFileId = UUIDGenerator.newTimeUUID();
         fileImport.setUuid(importFileId);
 
-        //mock up returning the FailedEntityImport instance after save is invoked.
-
-        when( em.create( any( FailedImportEntity.class ) ) ).thenAnswer( new Answer<FailedImportEntity>() {
+        // when tracker tries to create a FailedImportEntity, give it a mock
+        when(em.create(any(FailedImportEntity.class))).thenAnswer(new Answer<FailedImportEntity>() {
             @Override
-            public FailedImportEntity answer( final InvocationOnMock invocation ) throws Throwable {
-                return ( FailedImportEntity ) invocation.getArguments()[0];
+            public FailedImportEntity answer(final InvocationOnMock invocation) throws Throwable {
+                return (FailedImportEntity) invocation.getArguments()[0];
             }
-        } );
-
-        final FileImportTracker fileImportTracker = new FileImportTracker( emf, fileImport, 1000 );
+        });
 
-        final long expectedSuccess = 100;
-
-        for ( long i = 0; i < expectedSuccess; i++ ) {
+        final FileImportTracker fileImportTracker = new FileImportTracker(emf, fileImport, 1000);
+        for (long i = 0; i < expectedSuccess; i++) {
             fileImportTracker.entityWritten();
         }
-
-        final int expectedFails = 10;
-
-        for ( int i = 0; i < expectedFails; i++ ) {
-            fileImportTracker.entityFailed( "Failed to write entity " + i );
+        for (int i = 0; i < expectedFails; i++) {
+            fileImportTracker.entityFailed("Failed to write entity " + i);
         }
-
-
         fileImportTracker.complete();
 
 
@@ -141,16 +136,15 @@ public class FileImportTrackerTest {
         final FileImport updated = savedFileImport.getValue();
 
         assertSame( "Same instance should be updated", fileImport, updated );
-
         assertEquals( "Same count expected", expectedSuccess, updated.getImportedEntityCount() );
-
         assertEquals( "Same fail expected", expectedFails, updated.getFailedEntityCount() );
 
-        assertEquals( "Correct error message",
-            "Failed to import some data.  See the import counters and errors.",
-            updated.getErrorMessage() );
+        // TODO why is error message not being set here?
+//        assertEquals( "Correct error message",
+//            "Failed to import some data.  See the import counters and errors.",
+//            updated.getErrorMessage() );
 
-        //TODO get the connections from the file import
+        // TODO get the connections from the file import
 
         ArgumentCaptor<FailedImportEntity> failedEntities =
             ArgumentCaptor.forClass( FailedImportEntity.class );
@@ -158,17 +152,14 @@ public class FileImportTrackerTest {
         verify( em, times( expectedFails ) )
             .createConnection( same( fileImport ), eq( "errors" ), failedEntities.capture() );
 
-        //now check all our arguments
+        // now check all our arguments
 
         final List<FailedImportEntity> args = failedEntities.getAllValues();
-
         assertEquals( "Same number of error connections created", expectedFails, args.size() );
 
 
         for ( int i = 0; i < expectedFails; i++ ) {
-
             final FailedImportEntity failedImport = args.get( i );
-
             assertEquals( "Same message expected",
                 "Failed to write entity " + i, failedImport.getErrorMessage() );
         }
@@ -302,9 +293,7 @@ public class FileImportTrackerTest {
         assertEquals( "Same connection error count expected", expectedConnectionFails,
             updated.getFailedConnectionCount() );
 
-        assertEquals( "Correct error message",
-            "Failed to import some data.  See the import counters and errors.",
-            updated.getErrorMessage() );
+        assertTrue(updated.getErrorMessage().startsWith("Failed to import") );
 
         //TODO get the connections from the file import
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/d705f696/stack/services/src/test/java/org/apache/usergrid/management/importer/ImportCollectionIT.java
----------------------------------------------------------------------
diff --git a/stack/services/src/test/java/org/apache/usergrid/management/importer/ImportCollectionIT.java b/stack/services/src/test/java/org/apache/usergrid/management/importer/ImportCollectionIT.java
index c2e3161..4994eec 100644
--- a/stack/services/src/test/java/org/apache/usergrid/management/importer/ImportCollectionIT.java
+++ b/stack/services/src/test/java/org/apache/usergrid/management/importer/ImportCollectionIT.java
@@ -173,7 +173,10 @@ public class ImportCollectionIT {
         // create a collection of "thing" entities in the first application, export to S3
         try {
 
-            final EntityManager emApp1 = setup.getEmf().getEntityManager( applicationId );
+            final UUID targetAppId = setup.getMgmtSvc().createApplication(
+                organization.getUuid(), "target" + RandomStringUtils.randomAlphanumeric(10)).getId();
+
+            final EntityManager emApp1 = setup.getEmf().getEntityManager( targetAppId );
             Map<UUID, Entity> thingsMap = new HashMap<>();
             List<Entity> things = new ArrayList<>();
             createTestEntities(emApp1, thingsMap, things, "thing");
@@ -184,12 +187,11 @@ public class ImportCollectionIT {
             // create new second application, import the data from S3
 
             final UUID appId2 = setup.getMgmtSvc().createApplication(
-                organization.getUuid(), "second").getId();
+                organization.getUuid(), "second" + RandomStringUtils.randomAlphanumeric(10)).getId();
 
             final EntityManager emApp2 = setup.getEmf().getEntityManager(appId2);
             importCollections(emApp2);
 
-
             // make sure that it worked
 
             logger.debug("\n\nCheck connections\n");
@@ -260,7 +262,10 @@ public class ImportCollectionIT {
 
         // create collection of things in first application, export them to S3
 
-        final EntityManager emApp1 = setup.getEmf().getEntityManager( applicationId );
+        final UUID targetAppId = setup.getMgmtSvc().createApplication(
+            organization.getUuid(), "target" + RandomStringUtils.randomAlphanumeric(10)).getId();
+
+        final EntityManager emApp1 = setup.getEmf().getEntityManager( targetAppId );
 
         Map<UUID, Entity> thingsMap = new HashMap<>();
         List<Entity> things = new ArrayList<>();
@@ -317,6 +322,9 @@ public class ImportCollectionIT {
 
         try {
 
+            String targetAppName = "import-test-target-" + RandomStringUtils.randomAlphanumeric(10);
+            UUID targetAppId = setup.getMgmtSvc().createApplication(organization.getUuid(), targetAppName).getId();
+
             // create 4 applications each with collection of 10 things, export all to S3
             logger.debug("\n\nCreating 10 applications with 10 entities each\n");
 
@@ -336,7 +344,7 @@ public class ImportCollectionIT {
             // import all those exports from S3 into the default test application
             logger.debug("\n\nImporting\n");
 
-            final EntityManager emDefaultApp = setup.getEmf().getEntityManager(applicationId);
+            final EntityManager emDefaultApp = setup.getEmf().getEntityManager(targetAppId);
             importCollections(emDefaultApp);
 
             // we should now have 100 Entities in the default app
@@ -383,19 +391,22 @@ public class ImportCollectionIT {
 
         // import bad JSON from from the S3 bucket
 
-        final EntityManager emDefaultApp = setup.getEmf().getEntityManager( applicationId );
-        UUID importId = importCollections(emDefaultApp);
+        String appName = "import-test-" + RandomStringUtils.randomAlphanumeric(10);
+        UUID appId = setup.getMgmtSvc().createApplication(organization.getUuid(), appName).getId();
+
+        final EntityManager em = setup.getEmf().getEntityManager( appId );
+        UUID importId = importCollections(em);
 
 
         // check that we got an informative error message back
 
-        List<Entity> importedThings = emDefaultApp.getCollection(
-            emDefaultApp.getApplicationId(), "things", null, Level.ALL_PROPERTIES).getEntities();
+        List<Entity> importedThings = em.getCollection(
+            em.getApplicationId(), "things", null, Level.ALL_PROPERTIES).getEntities();
 
         assertTrue("No entities should have been imported", importedThings.isEmpty());
 
         ImportService importService = setup.getImportService();
-        Results results = importService.getFileImports( applicationId, importId, null, null );
+        Results results = importService.getFileImports( appId, importId, null, null );
 
         assertEquals( "There is one", 1, results.size() );
 
@@ -404,8 +415,7 @@ public class ImportCollectionIT {
 
         FileImport fileImport = (FileImport)results.getEntity();
 
-        assertEquals( "File name is correct",
-            "testimport-bad-json.json", fileImport.getFileName());
+        assertTrue( fileImport.getFileName().endsWith("testimport-bad-json.json"));
 
         assertTrue( "Error message is correct",
             fileImport.getErrorMessage().startsWith("Unexpected character ('<' (code 60))"));
@@ -418,10 +428,8 @@ public class ImportCollectionIT {
 
         // upload good and badly formatted files to our S3 bucket
 
-        File cwd = new File(".");
-        String basePath = cwd.getAbsolutePath();
-        basePath = basePath.substring( 0 , basePath.length() - 1 );
-        basePath = basePath + "src" + File.separator + "test" + File.separator + "resource" + File.separator;
+        String basePath = System.getProperty("target.directory")
+            + File.separator + "test-classes" + File.separator;
 
         List<String> filenames = new ArrayList<>( 3 );
         filenames.add( basePath + "testimport-with-connections.json" );
@@ -437,15 +445,16 @@ public class ImportCollectionIT {
 
         // import all those files into the default test application
 
-        final EntityManager emDefaultApp = setup.getEmf().getEntityManager( applicationId );
+        String targetAppName = "import-test-target-" + RandomStringUtils.randomAlphanumeric(10);
+        UUID targetAppId = setup.getMgmtSvc().createApplication(organization.getUuid(), targetAppName).getId();
+
+        final EntityManager emDefaultApp = setup.getEmf().getEntityManager( targetAppId );
         UUID importId = importCollections(emDefaultApp);
 
         {
             List<Entity> importedThings = emDefaultApp.getCollection(
                 emDefaultApp.getApplicationId(), "connfails", null, Level.ALL_PROPERTIES).getEntities();
             assertTrue( !importedThings.isEmpty());
-
-            //
             assertEquals( 1, importedThings.size() );
         }
 
@@ -473,7 +482,7 @@ public class ImportCollectionIT {
         Thread.sleep(3000);
 
         ImportService importService = setup.getImportService();
-        Results results = importService.getFileImports( applicationId, importId, null, null );
+        Results results = importService.getFileImports( targetAppId, importId, null, null );
 
         assertEquals( "There four file imports", 4, results.size() );
 


[02/25] incubator-usergrid git commit: WriteCommit optimizations

Posted by sn...@apache.org.
WriteCommit optimizations


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

Branch: refs/heads/app-rebuild-fix
Commit: ab08b8d08a6f14546d43740aed7572d24d61934e
Parents: 302612c
Author: Shawn Feldman <sf...@apache.org>
Authored: Mon Feb 16 14:41:26 2015 -0800
Committer: Shawn Feldman <sf...@apache.org>
Committed: Mon Feb 16 15:06:18 2015 -0800

----------------------------------------------------------------------
 .../EntityCollectionManagerFactoryImpl.java     | 36 ++++++-------
 .../collection/mvcc/stage/write/WriteStart.java | 31 +++++------
 .../mvcc/stage/TestEntityGenerator.java         | 54 +++++++++++---------
 .../mvcc/stage/write/WriteStartTest.java        | 51 ++++++++++++++++--
 .../persistence/model/entity/Entity.java        |  5 ++
 5 files changed, 113 insertions(+), 64 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ab08b8d0/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerFactoryImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerFactoryImpl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerFactoryImpl.java
index 0b9c643..816a585 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerFactoryImpl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerFactoryImpl.java
@@ -19,6 +19,22 @@
 
 package org.apache.usergrid.persistence.collection.impl;
 
+import com.google.common.base.Preconditions;
+import com.google.common.cache.CacheBuilder;
+import com.google.common.cache.CacheLoader;
+import com.google.common.cache.LoadingCache;
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+import com.netflix.astyanax.Keyspace;
+import org.apache.usergrid.persistence.collection.guice.CollectionTaskExecutor;
+import org.apache.usergrid.persistence.collection.guice.Write;
+import org.apache.usergrid.persistence.collection.guice.WriteUpdate;
+import org.apache.usergrid.persistence.collection.mvcc.MvccLogEntrySerializationStrategy;
+import org.apache.usergrid.persistence.collection.mvcc.stage.delete.MarkCommit;
+import org.apache.usergrid.persistence.collection.mvcc.stage.delete.MarkStart;
+import org.apache.usergrid.persistence.collection.serialization.UniqueValueSerializationStrategy;
+import org.apache.usergrid.persistence.core.guice.ProxyImpl;
+import org.apache.usergrid.persistence.core.task.TaskExecutor;
 
 import java.util.concurrent.ExecutionException;
 
@@ -31,30 +47,13 @@ import org.apache.usergrid.persistence.collection.EntityVersionCleanupFactory;
 import org.apache.usergrid.persistence.collection.EntityVersionCreatedFactory;
 import org.apache.usergrid.persistence.collection.cache.CachedEntityCollectionManager;
 import org.apache.usergrid.persistence.collection.cache.EntityCacheFig;
-import org.apache.usergrid.persistence.collection.guice.CollectionTaskExecutor;
-import org.apache.usergrid.persistence.collection.guice.Write;
-import org.apache.usergrid.persistence.collection.guice.WriteUpdate;
 import org.apache.usergrid.persistence.collection.mvcc.MvccEntitySerializationStrategy;
-import org.apache.usergrid.persistence.collection.mvcc.MvccLogEntrySerializationStrategy;
-import org.apache.usergrid.persistence.collection.mvcc.stage.delete.MarkCommit;
-import org.apache.usergrid.persistence.collection.mvcc.stage.delete.MarkStart;
 import org.apache.usergrid.persistence.collection.mvcc.stage.write.RollbackAction;
 import org.apache.usergrid.persistence.collection.mvcc.stage.write.WriteCommit;
 import org.apache.usergrid.persistence.collection.mvcc.stage.write.WriteOptimisticVerify;
 import org.apache.usergrid.persistence.collection.mvcc.stage.write.WriteStart;
 import org.apache.usergrid.persistence.collection.mvcc.stage.write.WriteUniqueVerify;
-import org.apache.usergrid.persistence.collection.serialization.SerializationFig;
-import org.apache.usergrid.persistence.collection.serialization.UniqueValueSerializationStrategy;
-import org.apache.usergrid.persistence.core.guice.ProxyImpl;
-import org.apache.usergrid.persistence.core.task.TaskExecutor;
 
-import com.google.common.base.Preconditions;
-import com.google.common.cache.CacheBuilder;
-import com.google.common.cache.CacheLoader;
-import com.google.common.cache.LoadingCache;
-import com.google.inject.Inject;
-import com.google.inject.Singleton;
-import com.netflix.astyanax.Keyspace;
 
 
 /**
@@ -111,8 +110,7 @@ public class EntityCollectionManagerFactoryImpl implements EntityCollectionManag
                                                final MarkStart markStart, final MarkCommit markCommit, @ProxyImpl
                                                final MvccEntitySerializationStrategy entitySerializationStrategy,
                                                final UniqueValueSerializationStrategy uniqueValueSerializationStrategy,
-                                               final MvccLogEntrySerializationStrategy
-                                                   mvccLogEntrySerializationStrategy,
+                                               final MvccLogEntrySerializationStrategy mvccLogEntrySerializationStrategy,
                                                final Keyspace keyspace,
                                                final EntityVersionCleanupFactory entityVersionCleanupFactory,
                                                final EntityVersionCreatedFactory entityVersionCreatedFactory,

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ab08b8d0/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteStart.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteStart.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteStart.java
index 700b5dd..8cd21e1 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteStart.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteStart.java
@@ -28,7 +28,7 @@ import rx.functions.Func1;
 
 
 /**
- * This is the first stage and should be invoked immediately when a write is started.  It should 
+ * This is the first stage and should be invoked immediately when a write is started.  It should
  * persist the start of a new write in the data store for a checkpoint and recovery
  */
 @Singleton
@@ -70,25 +70,22 @@ public class WriteStart implements Func1<CollectionIoEvent<Entity>, CollectionIo
             MutationBatch write = logStrategy.write( collectionScope, startEntry );
 
             final MvccEntityImpl nextStage = new MvccEntityImpl( entityId, newVersion, status, entity );
-
-
-            try {
-                write.execute();
-            }
-            catch ( ConnectionException e ) {
-                LOG.error( "Failed to execute write ", e );
-                throw new WriteStartException( nextStage, collectionScope,
-                        "Failed to execute write ", e );
-            }
-            catch ( NullPointerException e) {
-                LOG.error( "Failed to execute write ", e );
-                throw new WriteStartException( nextStage, collectionScope,
+            if(ioEvent.getEvent().hasVersion()) {
+                try {
+                    write.execute();
+                } catch (ConnectionException e) {
+                    LOG.error("Failed to execute write ", e);
+                    throw new WriteStartException(nextStage, collectionScope,
+                        "Failed to execute write ", e);
+                } catch (NullPointerException e) {
+                    LOG.error("Failed to execute write ", e);
+                    throw new WriteStartException(nextStage, collectionScope,
                         "Failed to execute write", e);
+                }
             }
 
-
-          //create the mvcc entity for the next stage
-            //todo, we need to create a complete or partial update here (or sooner)
+            //create the mvcc entity for the next stage
+           //TODO: we need to create a complete or partial update here (or sooner)
 
             return new CollectionIoEvent<MvccEntity>( collectionScope, nextStage );
         }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ab08b8d0/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/TestEntityGenerator.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/TestEntityGenerator.java b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/TestEntityGenerator.java
index 576c1c6..4713f5a 100644
--- a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/TestEntityGenerator.java
+++ b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/TestEntityGenerator.java
@@ -40,31 +40,33 @@ public class TestEntityGenerator {
 
     /**
      * Return an MvccEntityMock with valid inputs from the supplied entity
+     *
      * @param entity
      * @return
      */
-    public static MvccEntity fromEntity(Entity entity){
+    public static MvccEntity fromEntity(Entity entity) {
 
         final MvccEntity mvccEntity = mock(MvccEntity.class);
-        when(mvccEntity.getId()).thenReturn( entity.getId());
-        when(mvccEntity.getVersion()).thenReturn( entity.getVersion() );
-        when( mvccEntity.getEntity() ).thenReturn( Optional.of( entity ) );
+        when(mvccEntity.getId()).thenReturn(entity.getId());
+        when(mvccEntity.getVersion()).thenReturn(entity.getVersion());
+        when(mvccEntity.getEntity()).thenReturn(Optional.of(entity));
 
         return mvccEntity;
     }
 
     /**
      * Return an MvccEntityMock with valid inputs from the supplied entity
+     *
      * @param entity
      * @return
      */
-    public static MvccEntity fromEntityStatus(Entity entity,MvccEntity.Status status){
+    public static MvccEntity fromEntityStatus(Entity entity, MvccEntity.Status status) {
 
         final MvccEntity mvccEntity = mock(MvccEntity.class);
-        when(mvccEntity.getId()).thenReturn( entity.getId());
-        when(mvccEntity.getVersion()).thenReturn( entity.getVersion() );
-        when( mvccEntity.getEntity() ).thenReturn( Optional.of( entity ) );
-        when( mvccEntity.getStatus() ).thenReturn( status );
+        when(mvccEntity.getId()).thenReturn(entity.getId());
+        when(mvccEntity.getVersion()).thenReturn(entity.getVersion());
+        when(mvccEntity.getEntity()).thenReturn(Optional.of(entity));
+        when(mvccEntity.getStatus()).thenReturn(status);
 
         return mvccEntity;
     }
@@ -72,36 +74,38 @@ public class TestEntityGenerator {
 
     /**
      * Generate a valid entity
+     *
      * @return
      */
-    public static Entity generateEntity()  {
-            final Entity entity = new Entity( generateId());
-            final UUID version = UUIDGenerator.newTimeUUID();
+    public static Entity generateEntity() {
+        final Entity entity = new Entity(generateId());
+        final UUID version = UUIDGenerator.newTimeUUID();
 
-            EntityUtils.setVersion( entity, version );
+        EntityUtils.setVersion(entity, version);
 
-            return entity;
-        }
+        return entity;
+    }
 
     /**
-         * Generate a valid entity
-         * @return
-         */
-        public static Entity generateEntity(final Id id, final UUID version)  {
-                final Entity entity = new Entity(id);
-
-                EntityUtils.setVersion( entity, version );
+     * Generate a valid entity
+     *
+     * @return
+     */
+    public static Entity generateEntity(final Id id, final UUID version) {
+        final Entity entity = new Entity(id);
 
-                return entity;
-            }
+        EntityUtils.setVersion(entity, version);
 
+        return entity;
+    }
 
 
     /**
      * Generate an id with type "test" and a new time uuid
+     *
      * @return
      */
-    public static Id generateId(){
+    public static Id generateId() {
         return new SimpleId(UUIDGenerator.newTimeUUID(), "test");
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ab08b8d0/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteStartTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteStartTest.java b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteStartTest.java
index e32c17c..a683d23 100644
--- a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteStartTest.java
+++ b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteStartTest.java
@@ -18,6 +18,7 @@
 package org.apache.usergrid.persistence.collection.mvcc.stage.write;
 
 
+import org.apache.usergrid.persistence.model.entity.SimpleId;
 import org.junit.Test;
 import org.mockito.ArgumentCaptor;
 
@@ -34,11 +35,11 @@ import org.apache.usergrid.persistence.model.entity.Entity;
 
 import com.netflix.astyanax.MutationBatch;
 
+import java.util.UUID;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertSame;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.same;
-import static org.mockito.Mockito.when;
+import static org.mockito.Mockito.*;
 
 
 /** @author tnine */
@@ -90,6 +91,50 @@ public class WriteStartTest extends AbstractEntityStageTest {
         assertSame( "Entity correct", entity, created.getEntity().get() );
     }
 
+    /** If no version then execute not called */
+    @Test
+    public void testNoVersion() throws Exception {
+
+        final CollectionScope context = mock( CollectionScope.class );
+
+        //mock returning a mock mutation when we do a log entry write
+        final MvccLogEntrySerializationStrategy logStrategy = mock( MvccLogEntrySerializationStrategy.class );
+
+
+        final ArgumentCaptor<MvccLogEntry> logEntry = ArgumentCaptor.forClass( MvccLogEntry.class );
+
+        final MutationBatch mutation = mock( MutationBatch.class );
+
+        final UUIDService uuidService = mock ( UUIDService.class );
+
+        when( logStrategy.write( same( context ), logEntry.capture() ) ).thenReturn( mutation );
+        when(mutation.execute()).thenThrow(new RuntimeException("Fail fail fail"));
+
+        //set up the mock to return the entity from the start phase
+        final Entity entity = TestEntityGenerator.generateEntity(new SimpleId(UUID.randomUUID(),"test"),null);
+        //run the stage
+        WriteStart newStage = new WriteStart( logStrategy, MvccEntity.Status.COMPLETE);
+
+        //verify the observable is correct
+        CollectionIoEvent<MvccEntity> result = newStage.call( new CollectionIoEvent<Entity>( context, entity ) );
+
+        verify(mutation,times(0)).execute();
+
+        //verify the log entry is correct
+        MvccLogEntry entry = logEntry.getValue();
+
+        assertEquals( "id correct", entity.getId(), entry.getEntityId() );
+        assertEquals( "EventStage is correct", Stage.ACTIVE, entry.getStage() );
+
+
+        MvccEntity created = result.getEvent();
+
+        //verify uuid and version in both the MvccEntity and the entity itself
+        //assertSame is used on purpose.  We want to make sure the same instance is used, not a copy.
+        //this way the caller's runtime type is retained.
+        assertSame( "id correct", entity.getId(), created.getId() );
+        assertSame( "Entity correct", entity, created.getEntity().get() );
+    }
 
     @Override
     protected void validateStage( final CollectionIoEvent<Entity> event ) {

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ab08b8d0/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/Entity.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/Entity.java b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/Entity.java
index c5089dc..3addddb 100644
--- a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/Entity.java
+++ b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/Entity.java
@@ -131,4 +131,9 @@ public class Entity extends EntityObject {
                 ", version=" + version +
                 '}';
     }
+
+    public boolean hasVersion(){
+        return getVersion() != null;
+    }
+
 }


[25/25] incubator-usergrid git commit: 1) PUT on // will not restore a deleted app and 2) /applications?deleted=true will return list of deleted applications.

Posted by sn...@apache.org.
1) PUT on /<org-name>/<app-id> will not restore a deleted app and 2) /applications?deleted=true will return list of deleted applications.


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

Branch: refs/heads/app-rebuild-fix
Commit: f004f5a31c32bc329e859fd203315cea41a55fe9
Parents: fe8f404
Author: Dave Johnson <dm...@apigee.com>
Authored: Sat Feb 21 09:02:01 2015 -0500
Committer: Dave Johnson <dm...@apigee.com>
Committed: Sat Feb 21 09:02:01 2015 -0500

----------------------------------------------------------------------
 .../corepersistence/CpEntityManagerFactory.java | 112 +++++++++++++++----
 .../corepersistence/util/CpNamingUtils.java     |   3 +
 .../persistence/EntityManagerFactory.java       |   7 ++
 .../cassandra/EntityManagerFactoryImpl.java     |  21 +++-
 .../PerformanceEntityRebuildIndexTest.java      |  16 ++-
 .../cassandra/EntityManagerFactoryImplIT.java   |  66 ++++++++++-
 stack/pom.xml                                   |   6 +-
 stack/rest/pom.xml                              |  43 ++++---
 .../org/apache/usergrid/rest/RootResource.java  |  25 +++--
 .../rest/applications/ApplicationResource.java  |  72 ++++++++----
 .../applications/ApplicationsResource.java      |  28 +++--
 11 files changed, 293 insertions(+), 106 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/f004f5a3/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 01691d4..59f2c9e 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
@@ -22,15 +22,7 @@ import com.google.inject.Injector;
 import com.yammer.metrics.annotation.Metered;
 import static java.lang.String.CASE_INSENSITIVE_ORDER;
 
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeMap;
-import java.util.UUID;
+import java.util.*;
 import java.util.concurrent.atomic.AtomicBoolean;
 
 import org.apache.commons.lang.StringUtils;
@@ -59,6 +51,7 @@ import org.apache.usergrid.persistence.core.util.Health;
 import org.apache.usergrid.persistence.entities.Application;
 import org.apache.usergrid.persistence.exceptions.ApplicationAlreadyExistsException;
 import org.apache.usergrid.persistence.exceptions.DuplicateUniquePropertyExistsException;
+import org.apache.usergrid.persistence.exceptions.EntityNotFoundException;
 import org.apache.usergrid.persistence.exceptions.OrganizationAlreadyExistsException;
 import org.apache.usergrid.persistence.graph.Edge;
 import org.apache.usergrid.persistence.graph.GraphManager;
@@ -317,6 +310,8 @@ public class CpEntityManagerFactory implements EntityManagerFactory, Application
     @Override
     public void deleteApplication(UUID applicationId) throws Exception {
 
+        //throw new UnsupportedOperationException("Delete application not supported");
+
         // 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()));
@@ -337,6 +332,43 @@ public class CpEntityManagerFactory implements EntityManagerFactory, Application
 
 
     @Override
+    public void restoreApplication(UUID applicationId) throws Exception {
+
+        // remove old delete_appinfos Entity
+        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(), "deleted_appinfos", q);
+        Entity appToRestore = results.getEntity();
+
+        if ( appToRestore == null ) {
+            throw new EntityNotFoundException("Cannot restore. Deleted Application not found: " + applicationId );
+        }
+
+        em.delete( appToRestore );
+
+        // restore entity in appinfo collection
+        Map<String, Object> appProps = appToRestore.getProperties();
+        appProps.remove("uuid");
+        appProps.put("type", "appinfo");
+        Entity restoredApp = em.create("appinfo", appToRestore.getProperties());
+
+        em.refreshIndex();
+
+        // rebuild the apps index
+        this.rebuildApplicationIndexes(applicationId, new ProgressObserver() {
+            @Override
+            public void onProgress(EntityRef entity) {
+                logger.debug("Restored entity {}:{}", entity.getType(), entity.getUuid());
+            }
+            @Override
+            public long getWriteDelayTime() {
+                return 0;
+            }
+        });
+    }
+
+
+    @Override
     public UUID importApplication(
             String organization, UUID applicationId,
             String name, Map<String, Object> properties) throws Exception {
@@ -380,31 +412,56 @@ public class CpEntityManagerFactory implements EntityManagerFactory, Application
     public UUID lookupApplication( String name ) throws Exception {
         init();
 
-        EntityManager em = getEntityManager( CpNamingUtils.SYSTEM_APP_ID );
+        // TODO: why does this not work for restored apps
+
+//        EntityManager em = getEntityManager( CpNamingUtils.SYSTEM_APP_ID );
+//        final EntityRef alias = em.getAlias( CpNamingUtils.APPINFOS, name );
+//        if ( alias == null ) {
+//            return null;
+//        }
+//        final Entity entity = em.get( alias );
+//        if ( entity == null ) {
+//            return null;
+//        }
+//        final UUID property = ( UUID ) entity.getProperty( "applicationUuid" );
+//        return property;
 
+        Query q = Query.fromQL( PROPERTY_NAME + " = '" + name + "'");
 
-        final EntityRef alias = em.getAlias( CpNamingUtils.APPINFOS, name );
+        EntityManager em = getEntityManager(CpNamingUtils.SYSTEM_APP_ID);
 
-        if ( alias == null ) {
+        Results results = em.searchCollection( em.getApplicationRef(), "appinfos", q);
+
+        if ( results.isEmpty() ) {
             return null;
         }
 
-        final Entity entity = em.get( alias );
-
-        if ( entity == null ) {
-            return null;
+        Entity entity = results.iterator().next();
+        Object uuidObject = entity.getProperty("applicationUuid");
+        if ( uuidObject instanceof UUID ) {
+            return (UUID)uuidObject;
         }
+        return UUIDUtils.tryExtractUUID( entity.getProperty("applicationUuid").toString() );
+    }
 
 
-        final UUID property = ( UUID ) entity.getProperty( "applicationUuid" );
+    @Override
+    @Metered(group = "core", name = "EntityManagerFactory_getApplication")
+    public Map<String, UUID> getApplications() throws Exception {
+        return getApplications( false );
+    }
 
-        return property;
+
+    @Override
+    @Metered(group = "core", name = "EntityManagerFactory_getApplication")
+    public Map<String, UUID> getDeletedApplications() throws Exception {
+        return getApplications( true );
     }
 
 
     @Override
     @Metered(group = "core", name = "EntityManagerFactory_getApplication")
-    public Map<String, UUID> getApplications() throws Exception {
+    public Map<String, UUID> getApplications(boolean deleted) throws Exception {
 
         Map<String, UUID> appMap = new HashMap<String, UUID>();
 
@@ -415,7 +472,15 @@ public class CpEntityManagerFactory implements EntityManagerFactory, Application
         Application app = em.getApplication();
         Id fromEntityId = new SimpleId( app.getUuid(), app.getType() );
 
-        String edgeType = CpNamingUtils.getEdgeTypeFromCollectionName( CpNamingUtils.APPINFOS );
+        final String scopeName;
+        final String edgeType;
+        if ( deleted ) {
+            edgeType = CpNamingUtils.getEdgeTypeFromCollectionName(CpNamingUtils.DELETED_APPINFOS);
+            scopeName = CpNamingUtils.getCollectionScopeNameFromCollectionName(CpNamingUtils.DELETED_APPINFOS);
+        } else {
+            edgeType = CpNamingUtils.getEdgeTypeFromCollectionName(CpNamingUtils.APPINFOS);
+            scopeName = CpNamingUtils.getCollectionScopeNameFromCollectionName(CpNamingUtils.APPINFOS);
+        }
 
         logger.debug("getApplications(): Loading edges of edgeType {} from {}:{}",
             new Object[] { edgeType, fromEntityId.getType(), fromEntityId.getUuid() } );
@@ -436,9 +501,9 @@ public class CpEntityManagerFactory implements EntityManagerFactory, Application
             });
 
             CollectionScope collScope = new CollectionScopeImpl(
-                    appScope.getApplication(),
-                    appScope.getApplication(),
-                    CpNamingUtils.getCollectionScopeNameFromCollectionName( CpNamingUtils.APPINFOS ));
+                appScope.getApplication(),
+                appScope.getApplication(),
+                scopeName);
 
             org.apache.usergrid.persistence.model.entity.Entity e =
                     managerCache.getEntityCollectionManager( collScope ).load( targetId )
@@ -779,4 +844,5 @@ public class CpEntityManagerFactory implements EntityManagerFactory, Application
 
         return ecm.getHealth();
     }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/f004f5a3/stack/core/src/main/java/org/apache/usergrid/corepersistence/util/CpNamingUtils.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/util/CpNamingUtils.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/util/CpNamingUtils.java
index 0d7b6ff..8208855 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/util/CpNamingUtils.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/util/CpNamingUtils.java
@@ -66,6 +66,9 @@ public class CpNamingUtils {
      * The app infos entity object type. This holds the app name, appId, and org name
      */
     public static final String APPINFOS = "appinfos";
+
+    public static final String DELETED_APPINFOS = "deleted_appinfos";
+
     /**
      * The name of the map that holds our entity id->type mapping
      */

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/f004f5a3/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 6a9095d..2881111 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
@@ -19,6 +19,8 @@ package org.apache.usergrid.persistence;
 
 import java.util.Map;
 import java.util.UUID;
+
+import com.yammer.metrics.annotation.Metered;
 import org.apache.usergrid.persistence.core.util.Health;
 import org.apache.usergrid.persistence.index.EntityIndex;
 import org.springframework.context.ApplicationContext;
@@ -95,8 +97,11 @@ public interface EntityManagerFactory {
      *
      * @throws Exception the exception
      */
+    @Metered(group = "core", name = "EntityManagerFactory_getApplication")
     public abstract Map<String, UUID> getApplications() throws Exception;
 
+    public Map<String, UUID> getDeletedApplications() throws Exception;
+
     public abstract void setup() throws Exception;
 
     public abstract Map<String, String> getServiceProperties();
@@ -165,6 +170,8 @@ public interface EntityManagerFactory {
 
     public Health getEntityStoreHealth();
 
+    void restoreApplication(UUID applicationId) throws Exception;
+
     public interface ProgressObserver {
 
         public void onProgress( EntityRef entity);

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/f004f5a3/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 535a14e..05cbf5e 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
@@ -330,8 +330,7 @@ public class EntityManagerFactoryImpl implements EntityManagerFactory, Applicati
         return applications;
     }
 
-
-    @Override
+   @Override
     public boolean setServiceProperty( String name, String value ) {
         try {
             cass.setColumn( cass.getSystemKeyspace(), PROPERTIES_CF, PROPERTIES_CF, name, value );
@@ -473,6 +472,22 @@ public class EntityManagerFactoryImpl implements EntityManagerFactory, Applicati
 
     @Override
     public Health getEntityStoreHealth() {
-        throw new UnsupportedOperationException("Not supported yet.");
+        throw new UnsupportedOperationException("Not supported in v1.");
+    }
+
+    @Override
+    public void restoreApplication(UUID applicationId) throws Exception {
+        throw new UnsupportedOperationException("Not supported in v1");
     }
+
+    @Override
+    public Map<String, UUID> getDeletedApplications() throws Exception {
+        throw new UnsupportedOperationException("Not supported in v1");
+    }
+
+    @Override
+    public Map<String, UUID> getApplications(boolean deleted) throws Exception {
+        throw new UnsupportedOperationException("Not supported in v1");
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/f004f5a3/stack/core/src/test/java/org/apache/usergrid/persistence/PerformanceEntityRebuildIndexTest.java
----------------------------------------------------------------------
diff --git a/stack/core/src/test/java/org/apache/usergrid/persistence/PerformanceEntityRebuildIndexTest.java b/stack/core/src/test/java/org/apache/usergrid/persistence/PerformanceEntityRebuildIndexTest.java
index 52b6fe4..4bbce9c 100644
--- a/stack/core/src/test/java/org/apache/usergrid/persistence/PerformanceEntityRebuildIndexTest.java
+++ b/stack/core/src/test/java/org/apache/usergrid/persistence/PerformanceEntityRebuildIndexTest.java
@@ -218,8 +218,12 @@ public class PerformanceEntityRebuildIndexTest extends AbstractCoreIT {
 
         try {
 
+            // do it forwards
             setup.getEmf().rebuildCollectionIndex( em.getApplicationId(), "catherders", false, po );
 
+            // and backwards, just to make sure both cases are covered
+            setup.getEmf().rebuildCollectionIndex( em.getApplicationId(), "catherders", true, po );
+
             reporter.report();
             registry.remove( meterName );
             logger.info("Rebuilt index");
@@ -312,9 +316,13 @@ public class PerformanceEntityRebuildIndexTest extends AbstractCoreIT {
         // ----------------- delete the system and application indexes
 
         logger.debug("Deleting app index and system app index");
-        //deleteIndex( CpNamingUtils.SYSTEM_APP_ID );
+
         deleteIndex( em.getApplicationId() );
 
+        // deleting sytem app index will interfere with other concurrently running tests
+        //deleteIndex( CpNamingUtils.SYSTEM_APP_ID );
+
+
         // ----------------- test that we can read them, should fail
 
         logger.debug("Reading data, should fail this time ");
@@ -335,7 +343,7 @@ public class PerformanceEntityRebuildIndexTest extends AbstractCoreIT {
             int counter = 0;
 
             @Override
-               public void onProgress( final EntityRef entity ) {
+            public void onProgress( final EntityRef entity ) {
 
                 meter.mark();
                 logger.debug("Indexing {}:{}", entity.getType(), entity.getUuid());
@@ -345,8 +353,6 @@ public class PerformanceEntityRebuildIndexTest extends AbstractCoreIT {
                 counter++;
             }
 
-
-
             @Override
             public long getWriteDelayTime() {
                 return 0;
@@ -355,6 +361,8 @@ public class PerformanceEntityRebuildIndexTest extends AbstractCoreIT {
 
         try {
 
+            setup.getEmf().rebuildInternalIndexes( po );
+
             setup.getEmf().rebuildApplicationIndexes( em.getApplicationId(), po );
 
             reporter.report();

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/f004f5a3/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 09e7ce1..850ac6b 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
@@ -23,6 +23,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 
+import org.apache.usergrid.persistence.*;
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
@@ -33,11 +34,6 @@ import org.slf4j.LoggerFactory;
 import org.apache.commons.lang3.RandomStringUtils;
 
 import org.apache.usergrid.AbstractCoreIT;
-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.cassandra.util.TraceTag;
 import org.apache.usergrid.persistence.cassandra.util.TraceTagManager;
 import org.apache.usergrid.persistence.cassandra.util.TraceTagReporter;
@@ -123,10 +119,27 @@ public class EntityManagerFactoryImplIT extends AbstractCoreIT {
 
         em.refreshIndex();
 
+        // TODO: this assertion should work!
+        //assertNotNull( "cannot lookup app by name", setup.getEmf().lookupApplication("test-app-" + rand) );
+
         // delete the application
 
         setup.getEmf().deleteApplication( applicationId );
 
+        em.refreshIndex();
+
+        boolean found = false;
+        Map<String, UUID> deletedApps = emf.getDeletedApplications();
+        for ( String appName : deletedApps.keySet() ) {
+            UUID appId = deletedApps.get( appName );
+            if ( appId.equals( applicationId )) {
+                found = true;
+                break;
+            }
+        }
+
+        assertTrue("Deleted app not found in deleted apps collection", found );
+
         // attempt to get entities in application's collections in various ways should all fail
 
         assertNull( setup.getEmf().lookupApplication("test-app-" + rand) );
@@ -138,6 +151,49 @@ public class EntityManagerFactoryImplIT extends AbstractCoreIT {
             assertNotEquals( appName, "test-app-" + rand );
         }
 
+        // restore the app
+
+        emf.restoreApplication( applicationId );
+
+        emf.rebuildAllIndexes(new EntityManagerFactory.ProgressObserver() {
+            @Override
+            public void onProgress(EntityRef entity) {
+                logger.debug("Reindexing {}:{}", entity.getType(), entity.getUuid() );
+            }
+
+            @Override
+            public long getWriteDelayTime() {
+                return 0;
+            }
+        });
+
+        // test to see that app now works and is happy
+
+        // it should not be found in the deleted apps collection
+        found = false;
+        deletedApps = emf.getDeletedApplications();
+        for ( String appName : deletedApps.keySet() ) {
+            UUID appId = deletedApps.get( appName );
+            if ( appId.equals( applicationId )) {
+                found = true;
+                break;
+            }
+        }
+        assertFalse("Restored app found in deleted apps collection", found);
+
+        found = false;
+        appMap = setup.getEmf().getApplications();
+        for ( String appName : appMap.keySet() ) {
+            UUID appId = appMap.get( appName );
+            if ( appId.equals( applicationId )) {
+                found = true;
+                break;
+            }
+        }
+        assertTrue("Restored app not found in apps collection", found);
+
+        // TODO: this assertion should work!
+        //assertNotNull(setup.getEmf().lookupApplication("test-app-" + rand));
     }
 
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/f004f5a3/stack/pom.xml
----------------------------------------------------------------------
diff --git a/stack/pom.xml b/stack/pom.xml
index 12fac3f..2735366 100644
--- a/stack/pom.xml
+++ b/stack/pom.xml
@@ -1565,12 +1565,14 @@
                     <exclude>**/aws.properties</exclude>
                     <exclude>**/tempExport*</exclude>
                     <exclude>loadtests/loadtest_setup.sh</exclude>
-                    <exclude>loadtests/gatling/user-files/request-bodies/**</exclude>
+		    <exclude>loadtests/gatling/user-files/request-bodies/**</exclude>
+
                     <!-- other -->
                     <exclude>**/m2/**</exclude>
                     <exclude>**/*.asc</exclude>
                     <exclude>**/dummy.txt</exclude>
-                    <exclude>**/cloudbees.xml</exclude>
+		    <exclude>**/cloudbees.xml</exclude>
+		    <exclude>**/catalina_base/**</exclude>
                     <exlude>loadtests/gatling/lib/**</exlude>
                     <exlude>loadtests/gatling/user-files/**</exlude>
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/f004f5a3/stack/rest/pom.xml
----------------------------------------------------------------------
diff --git a/stack/rest/pom.xml b/stack/rest/pom.xml
index e07e218..0680da2 100644
--- a/stack/rest/pom.xml
+++ b/stack/rest/pom.xml
@@ -45,12 +45,11 @@
             <id>arquillian-tomcat</id>
 
             <activation>
-                <activeByDefault>true</activeByDefault>
+                <activeByDefault>false</activeByDefault>
             </activation>
 
             <dependencies>
 
-
                 <!--embedded mode-->
                 <!--<dependency>-->
                    <!--<groupId>org.apache.tomcat.embed</groupId>-->
@@ -429,26 +428,26 @@
 
         <!-- Some arquillian dependency runs and old version of guice. We're overridding it here so that we include
           the right value into the test scope -->
-        <dependency>
-          <groupId>com.google.inject</groupId>
-          <artifactId>guice</artifactId>
-          <version>${guice.version}</version>
-            <scope>test</scope>
-        </dependency>
+        <!--<dependency>-->
+          <!--<groupId>com.google.inject</groupId>-->
+          <!--<artifactId>guice</artifactId>-->
+          <!--<version>${guice.version}</version>-->
+            <!--<scope>test</scope>-->
+        <!--</dependency>-->
 
-        <dependency>
-          <groupId>com.google.inject.extensions</groupId>
-          <artifactId>guice-multibindings</artifactId>
-          <version>${guice.version}</version>
-            <scope>test</scope>
-        </dependency>
+        <!--<dependency>-->
+          <!--<groupId>com.google.inject.extensions</groupId>-->
+          <!--<artifactId>guice-multibindings</artifactId>-->
+          <!--<version>${guice.version}</version>-->
+            <!--<scope>test</scope>-->
+        <!--</dependency>-->
 
-        <dependency>
-          <groupId>com.google.inject.extensions</groupId>
-          <artifactId>guice-assistedinject</artifactId>
-          <version>${guice.version}</version>
-            <scope>test</scope>
-        </dependency>
+        <!--<dependency>-->
+          <!--<groupId>com.google.inject.extensions</groupId>-->
+          <!--<artifactId>guice-assistedinject</artifactId>-->
+          <!--<version>${guice.version}</version>-->
+            <!--<scope>test</scope>-->
+        <!--</dependency>-->
 
 
         <!-- documentation here
@@ -463,10 +462,6 @@
               <type>pom</type>
             </dependency>
 
-
-
-
-
         <!--  use the external test client.  Just depend on the maven jetty plugin to launch jetty -->
         <dependency>
             <groupId>com.sun.jersey.jersey-test-framework</groupId>

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/f004f5a3/stack/rest/src/main/java/org/apache/usergrid/rest/RootResource.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/main/java/org/apache/usergrid/rest/RootResource.java b/stack/rest/src/main/java/org/apache/usergrid/rest/RootResource.java
index f324d28..27eff28 100644
--- a/stack/rest/src/main/java/org/apache/usergrid/rest/RootResource.java
+++ b/stack/rest/src/main/java/org/apache/usergrid/rest/RootResource.java
@@ -111,9 +111,10 @@ public class RootResource extends AbstractContextResource implements MetricProce
     @RequireSystemAccess
     @GET
     @Path("applications")
-    public JSONWithPadding getAllApplications( @Context UriInfo ui,
-                                               @QueryParam("callback") @DefaultValue("callback") String callback )
-            throws URISyntaxException {
+    public JSONWithPadding getAllApplications(
+        @Context UriInfo ui,
+        @QueryParam("deleted") @DefaultValue("false") Boolean deleted,
+        @QueryParam("callback") @DefaultValue("callback") String callback ) throws URISyntaxException {
 
         logger.info( "RootResource.getAllApplications" );
 
@@ -122,7 +123,11 @@ public class RootResource extends AbstractContextResource implements MetricProce
 
         Map<String, UUID> applications = null;
         try {
-            applications = emf.getApplications();
+            if ( deleted ) {
+                applications = emf.getDeletedApplications();
+            } else {
+                applications = emf.getApplications();
+            }
             response.setSuccess();
             response.setApplications( applications );
         }
@@ -141,7 +146,7 @@ public class RootResource extends AbstractContextResource implements MetricProce
     public JSONWithPadding getAllApplications2( @Context UriInfo ui,
                                                 @QueryParam("callback") @DefaultValue("callback") String callback )
             throws URISyntaxException {
-        return getAllApplications( ui, callback );
+        return getAllApplications( ui, false, callback );
     }
 
 
@@ -162,16 +167,16 @@ public class RootResource extends AbstractContextResource implements MetricProce
 
     /**
      * Return status of this Usergrid instance in JSON format.
-     * 
+     *
      * By Default this end-point will ignore errors but if you call it with ignore_status=false
      * then it will return HTTP 500 if either the Entity store or the Index for the management
      * application are in a bad state.
-     * 
+     *
      * @param ignoreError Ignore any errors and return status no matter what.
      */
     @GET
     @Path("status")
-    public JSONWithPadding getStatus( 
+    public JSONWithPadding getStatus(
             @QueryParam("ignore_error") @DefaultValue("true") Boolean ignoreError,
             @QueryParam("callback") @DefaultValue("callback") String callback ) {
 
@@ -195,10 +200,10 @@ public class RootResource extends AbstractContextResource implements MetricProce
         node.put( "version", usergridSystemMonitor.getBuildNumber() );
 
         // Hector status, for backwards compatibility
-        node.put( "cassandraAvailable", usergridSystemMonitor.getIsCassandraAlive() ); 
+        node.put( "cassandraAvailable", usergridSystemMonitor.getIsCassandraAlive() );
 
         // Core Persistence Collections module status
-        node.put( "cassandraStatus", emf.getEntityStoreHealth().toString() ); 
+        node.put( "cassandraStatus", emf.getEntityStoreHealth().toString() );
 
         // Core Persistence Query Index module status for Management App Index
         EntityManager em = emf.getEntityManager( emf.getManagementAppId() );

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/f004f5a3/stack/rest/src/main/java/org/apache/usergrid/rest/applications/ApplicationResource.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/main/java/org/apache/usergrid/rest/applications/ApplicationResource.java b/stack/rest/src/main/java/org/apache/usergrid/rest/applications/ApplicationResource.java
index 6a3c94c..2c252e7 100644
--- a/stack/rest/src/main/java/org/apache/usergrid/rest/applications/ApplicationResource.java
+++ b/stack/rest/src/main/java/org/apache/usergrid/rest/applications/ApplicationResource.java
@@ -20,18 +20,10 @@ package org.apache.usergrid.rest.applications;
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
 import java.util.Map;
+import java.util.Properties;
 import java.util.UUID;
 
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.DefaultValue;
-import javax.ws.rs.FormParam;
-import javax.ws.rs.GET;
-import javax.ws.rs.HeaderParam;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.QueryParam;
+import javax.ws.rs.*;
 import javax.ws.rs.core.Context;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.PathSegment;
@@ -328,9 +320,9 @@ public class ApplicationResource extends ServiceResource {
     @POST
     @Path("token")
     @Consumes(APPLICATION_JSON)
-    public Response getAccessTokenPostJson( @Context UriInfo ui, 
-            @HeaderParam("Authorization") String authorization, 
-            Map<String, Object> json, 
+    public Response getAccessTokenPostJson( @Context UriInfo ui,
+            @HeaderParam("Authorization") String authorization,
+            Map<String, Object> json,
             @QueryParam("callback") @DefaultValue("") String callback ) throws Exception {
 
         String grant_type = ( String ) json.get( "grant_type" );
@@ -352,7 +344,7 @@ public class ApplicationResource extends ServiceResource {
             }
         }
 
-        return getAccessToken( ui, authorization, grant_type, username, password, pin, client_id, 
+        return getAccessToken( ui, authorization, grant_type, username, password, pin, client_id,
                 client_secret, code, ttl, redirect_uri, callback );
     }
 
@@ -384,7 +376,7 @@ public class ApplicationResource extends ServiceResource {
     @Path("credentials")
     @RequireApplicationAccess
     @Produces(MediaType.APPLICATION_JSON)
-    public JSONWithPadding generateKeys( @Context UriInfo ui, 
+    public JSONWithPadding generateKeys( @Context UriInfo ui,
         @QueryParam("callback") @DefaultValue("callback") String callback ) throws Exception {
 
         logger.debug( "AuthResource.keys" );
@@ -393,7 +385,7 @@ public class ApplicationResource extends ServiceResource {
             throw new UnauthorizedException();
         }
 
-        ClientCredentialsInfo kp = new ClientCredentialsInfo( 
+        ClientCredentialsInfo kp = new ClientCredentialsInfo(
             management.getClientIdForApplication( services.getApplicationId() ),
             management.newClientSecretForApplication( services.getApplicationId() ) );
 
@@ -405,12 +397,12 @@ public class ApplicationResource extends ServiceResource {
 
     @GET
     @Path("authorize")
-    public Viewable showAuthorizeForm( 
-            @Context UriInfo ui, 
+    public Viewable showAuthorizeForm(
+            @Context UriInfo ui,
             @QueryParam("response_type") String response_type,
             @QueryParam("client_id") String client_id,
             @QueryParam("redirect_uri") String redirect_uri,
-            @QueryParam("scope") String scope, 
+            @QueryParam("scope") String scope,
             @QueryParam("state") String state ) {
 
         try {
@@ -443,7 +435,7 @@ public class ApplicationResource extends ServiceResource {
     @POST
     @Path("authorize")
     @Produces(MediaType.TEXT_HTML)
-    public Response handleAuthorizeForm( @Context UriInfo ui, 
+    public Response handleAuthorizeForm( @Context UriInfo ui,
             @FormParam("response_type") String response_type,
             @FormParam("client_id") String client_id,
             @FormParam("redirect_uri") String redirect_uri,
@@ -501,21 +493,55 @@ public class ApplicationResource extends ServiceResource {
     }
 
 
+    @PUT
+    @RequireOrganizationAccess
+    @Override
+    public JSONWithPadding executePut(  @Context UriInfo ui, String body,
+        @QueryParam("callback") @DefaultValue("callback") String callback ) throws Exception {
+
+        if ( applicationId == null ) {
+            throw new IllegalArgumentException("Application ID not specified in request");
+        }
+
+        ApplicationInfo app = management.getApplicationInfo( applicationId );
+        if ( app == null ) {
+            throw new EntityNotFoundException("Application ID " + applicationId + " not found");
+        }
+
+        emf.restoreApplication( applicationId );
+
+        ApiResponse response = createApiResponse();
+        response.setAction( "restore" );
+        response.setApplication( services.getApplication() );
+        response.setParams( ui.getQueryParameters() );
+
+        return new JSONWithPadding( response, callback );
+    }
+
+
     @DELETE
     @RequireOrganizationAccess
     @Override
     public JSONWithPadding executeDelete(  @Context UriInfo ui,
         @QueryParam("callback") @DefaultValue("callback") String callback ) throws Exception {
-        
+
+        Properties props = management.getProperties();
+
+        // for now, only works in test mode
+        String testProp = ( String ) props.get( "usergrid.test" );
+        if ( testProp == null || !Boolean.parseBoolean( testProp ) ) {
+            throw new UnsupportedOperationException();
+        }
+
         if ( applicationId == null ) {
             throw new IllegalArgumentException("Application ID not specified in request");
         }
-        
+
         ApplicationInfo app = management.getApplicationInfo( applicationId );
         if ( app == null ) {
             throw new EntityNotFoundException("Application ID " + applicationId + " not found");
         }
-        
+
         emf.deleteApplication( applicationId );
 
         ApiResponse response = createApiResponse();

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/f004f5a3/stack/rest/src/main/java/org/apache/usergrid/rest/management/organizations/applications/ApplicationsResource.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/main/java/org/apache/usergrid/rest/management/organizations/applications/ApplicationsResource.java b/stack/rest/src/main/java/org/apache/usergrid/rest/management/organizations/applications/ApplicationsResource.java
index 1d2c504..56d2f98 100644
--- a/stack/rest/src/main/java/org/apache/usergrid/rest/management/organizations/applications/ApplicationsResource.java
+++ b/stack/rest/src/main/java/org/apache/usergrid/rest/management/organizations/applications/ApplicationsResource.java
@@ -21,15 +21,7 @@ import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.UUID;
 
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DefaultValue;
-import javax.ws.rs.FormParam;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.QueryParam;
+import javax.ws.rs.*;
 import javax.ws.rs.core.Context;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.UriInfo;
@@ -78,9 +70,10 @@ public class ApplicationsResource extends AbstractContextResource {
 
     @RequireOrganizationAccess
     @GET
-    public JSONWithPadding getOrganizationApplications( @Context UriInfo ui,
-                                                        @QueryParam( "callback" ) @DefaultValue( "callback" )
-                                                        String callback ) throws Exception {
+    public JSONWithPadding getOrganizationApplications(
+        @Context UriInfo ui,
+        @QueryParam( "deleted" ) @DefaultValue( "false" ) Boolean deleted, // only return deleted apps if true
+        @QueryParam( "callback" ) @DefaultValue( "callback" ) String callback ) throws Exception {
 
         ApiResponse response = createApiResponse();
         response.setAction( "get organization application" );
@@ -148,6 +141,17 @@ public class ApplicationsResource extends AbstractContextResource {
 
 
     @RequireOrganizationAccess
+    @Path(RootResource.APPLICATION_ID_PATH)
+    public ApplicationResource restoreApplicationFromOrganizationByApplicationId(
+        @Context UriInfo ui,
+        @PathParam( "applicationId" )
+        String applicationIdStr ) throws Exception {
+
+        return getSubResource( ApplicationResource.class ).init( organization, UUID.fromString( applicationIdStr ) );
+    }
+
+
+    @RequireOrganizationAccess
     @Path( "{applicationName}" )
     public ApplicationResource applicationFromOrganizationByApplicationName( @Context UriInfo ui,
                                                                              @PathParam( "applicationName" )


[10/25] incubator-usergrid git commit: Shard per node.

Posted by sn...@apache.org.
Shard per node.


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

Branch: refs/heads/app-rebuild-fix
Commit: 456e64959d9c3c97306efee1e217d04db057febd
Parents: 3b85da7
Author: Dave Johnson <dm...@apigee.com>
Authored: Wed Feb 18 08:18:10 2015 -0500
Committer: Dave Johnson <dm...@apigee.com>
Committed: Wed Feb 18 08:18:10 2015 -0500

----------------------------------------------------------------------
 stack/awscluster/src/main/groovy/configure_usergrid.groovy | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/456e6495/stack/awscluster/src/main/groovy/configure_usergrid.groovy
----------------------------------------------------------------------
diff --git a/stack/awscluster/src/main/groovy/configure_usergrid.groovy b/stack/awscluster/src/main/groovy/configure_usergrid.groovy
index 3d3778e..619c0b4 100644
--- a/stack/awscluster/src/main/groovy/configure_usergrid.groovy
+++ b/stack/awscluster/src/main/groovy/configure_usergrid.groovy
@@ -44,7 +44,7 @@ def testAdminUserEmail = System.getenv().get("TEST_ADMIN_USER_EMAIL")
 
 def numEsNodes = Integer.parseInt(System.getenv().get("ES_NUM_SERVERS"))
 //Override number of shards.  Set it to 2x the cluster size
-def esShards = numEsNodes*2;
+def esShards = numEsNodes;
 
 
 //This gives us 3 copies, which means we'll have a quorum with primary + 1 replica


[12/25] incubator-usergrid git commit: updated gatling load tests

Posted by sn...@apache.org.
updated gatling load tests


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

Branch: refs/heads/app-rebuild-fix
Commit: d2a02dc095bc84a8753b08cd15598f69d27ab7ef
Parents: 32d52c3
Author: Rod Simpson <ro...@apigee.com>
Authored: Wed Feb 18 10:38:32 2015 -0700
Committer: Rod Simpson <ro...@apigee.com>
Committed: Wed Feb 18 10:38:32 2015 -0700

----------------------------------------------------------------------
 .../datagenerators/EntityDataGenerator.scala    | 17 +++++++-----
 .../datagenerators/FeederGenerator.scala        | 24 ++++++++++++++++-
 .../usergrid/scenarios/EntityScenarios.scala    | 20 ++++++++++-----
 .../org/apache/usergrid/settings/Settings.scala |  2 ++
 .../PostCustomEntitySimulation.scala            | 27 ++++++++++++++++----
 5 files changed, 72 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/d2a02dc0/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/EntityDataGenerator.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/EntityDataGenerator.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/EntityDataGenerator.scala
index f923eb2..daa54be 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/EntityDataGenerator.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/EntityDataGenerator.scala
@@ -21,8 +21,9 @@
  import org.apache.usergrid.settings.Utils
 
  import scala.collection.mutable.ArrayBuffer
+ import scala.util.parsing.json.JSONObject
 
-object EntityDataGenerator {
+ object EntityDataGenerator {
 
   def generateBlockUserLists(numUsers: Int): Map[String, String] = {
 
@@ -43,7 +44,9 @@ object EntityDataGenerator {
 
   def generateUser(userId: String): Map[String,String] = {
 
-    return Map("username" -> "user".concat(userId.toString),
+    return Map(
+
+      "username" -> "user".concat(userId.toString),
       "profileId" -> Utils.generateRandomInt(10000, 1000000).toString,
       "displayName" -> Utils.generateRandomInt(10000, 1000000).toString,
       "showAge" -> Utils.generateRandomInt(0, 1).toString,
@@ -59,10 +62,10 @@ object EntityDataGenerator {
     )
   }
 
-  def generateCustomEntity(entityName: String): Map[String,String] = {
+  def generateCustomEntity(): Map[String,String] = {
 
-    return Map(
-      "name" -> entityName,
+    var entity: Map[String, String] = Map(
+      // "name" -> "fdsa",
       "address" -> Utils.generateRandomInt(10000, 1000000).toString,
       "city" -> Utils.generateRandomInt(10000, 1000000).toString,
       "state" -> Utils.generateRandomInt(10000, 1000000).toString,
@@ -78,6 +81,8 @@ object EntityDataGenerator {
       "bar" -> Utils.generateRandomInt(120, 350).toString,
       "tables" -> Utils.generateRandomInt(50, 100000).toString,
       "outdoor" -> Utils.generateRandomInt(50, 100000).toString
-    )
+      )
+    return Map("entity" -> new JSONObject(entity).toString())
+
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/d2a02dc0/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/FeederGenerator.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/FeederGenerator.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/FeederGenerator.scala
index 6bd28a7..46dfdde 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/FeederGenerator.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/datagenerators/FeederGenerator.scala
@@ -152,10 +152,32 @@
     * @return
     */
    def generateCustomEntityInfinite(seed:Int): Iterator[Map[String, String]] = {
-     val userFeeder = Iterator.from(seed).map(i=>EntityDataGenerator.generateCustomEntity(i.toString))
+     //val rod = "rod"
+     val userFeeder = Iterator.from(seed).map(i=>EntityDataGenerator.generateCustomEntity())
+     return userFeeder
+   } 
+   
+   def testFeeder(seed:Int): Iterator[Map[String, String]] = {
+     var entity: Map[String, String] = EntityDataGenerator.generateCustomEntity();
+     Map("entity" -> entity)
+     val userFeeder = Iterator.from(seed).map(i=>EntityDataGenerator.generateCustomEntity())
      return userFeeder
    }
 
+/*
+
+   def testFeeder(): Array[Map[String, String]] = {
+     var userArray: ArrayBuffer[Map[String, String]] = new ArrayBuffer[Map[String, String]]
+     for (userCount <- 1 to numUsers) {
+       var user: Map[String, String] = EntityDataGenerator.generateUser(userCount.toString)
+       var geolocation: Map[String, String] = Utils.generateRandomGeolocation(radius, centerLatitude, centerLongitude)
+       var blockLists: Map[String, String] = EntityDataGenerator.generateBlockUserLists(numUsers)
 
+       user = user ++ geolocation ++ blockLists
 
+       userArray += user
+     }
+     return userArray.toArray
+   }
+  */
 }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/d2a02dc0/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityScenarios.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityScenarios.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityScenarios.scala
index c9d8279..70d66fa 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityScenarios.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/scenarios/EntityScenarios.scala
@@ -21,6 +21,8 @@ import io.gatling.http.Predef._
 import org.apache.usergrid.datagenerators.{EntityDataGenerator, FeederGenerator}
 import org.apache.usergrid.settings.{Headers, Utils, Settings}
 
+import scala.util.parsing.json.JSONObject
+
 /**
  * Provides CRUD methods for custom entities
  *
@@ -30,7 +32,7 @@ import org.apache.usergrid.settings.{Headers, Utils, Settings}
 object EntityScenarios {
 
   val getEntity = exec(
-    http("GET custom entityr")
+    http("GET custom entity")
       .get(Settings.baseAppUrl+"/${collectionType}/${entityName}")
       .headers(Headers.jsonAuthorized)
       .check(status.is(200))
@@ -46,7 +48,7 @@ object EntityScenarios {
 
 
   val deleteEntity = exec(
-    http("DELETE custom entityr")
+    http("DELETE custom entity")
       .get(Settings.baseAppUrl+"/${collectionType}/${entityName}")
       .headers(Headers.jsonAuthorized)
       .check(status.is(200))
@@ -54,12 +56,18 @@ object EntityScenarios {
 
   val postEntity = exec(
     http("Post custom entity")
-      //.post(Settings.baseUrl+"/${collectionType}")
-      .post(Settings.baseAppUrl+"/freds")
-      //.body(StringBody(EntityDataGenerator.generateCustomEntity().toString()))
-      .body(StringBody("{\"property\":\"fred\"}"))
+      .post(Settings.baseAppUrl+"/"+ Settings.collectionType)
+      .body(StringBody("""${entity}"""))
       .headers(Headers.jsonAnonymous)
       .check(status.is(200))
   )
+  
+  val postEntityWithToken = exec(
+    http("Post custom entity")
+      .post(Settings.baseAppUrl+"/"+ Settings.collectionType)
+      .body(StringBody("""${entity}"""))
+      .headers(Headers.jsonAuthorized)
+      .check(status.is(200))
+  )
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/d2a02dc0/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
index 4ef28c1..949f65a 100755
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/settings/Settings.scala
@@ -44,6 +44,8 @@ object Settings {
 
   val numEntities:Int = Integer.getInteger("numEntities", 5000).toInt
   val numDevices:Int = Integer.getInteger("numDevices", 4000).toInt
+  
+  val collectionType:String = System.getProperty("collectionType")
 
   val rampTime:Int = Integer.getInteger("rampTime", 0).toInt // in seconds
   val throttle:Int = Integer.getInteger("throttle", 50).toInt // in seconds

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/d2a02dc0/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/PostCustomEntitySimulation.scala
----------------------------------------------------------------------
diff --git a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/PostCustomEntitySimulation.scala b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/PostCustomEntitySimulation.scala
index c0ef23a..ef972ed 100644
--- a/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/PostCustomEntitySimulation.scala
+++ b/stack/loadtests/src/main/scala/org/apache/usergrid/simulations/PostCustomEntitySimulation.scala
@@ -28,24 +28,30 @@ import java.nio.file.{Paths, Files}
 import io.gatling.core.Predef._
 import org.apache.usergrid.datagenerators.FeederGenerator
 import scala.concurrent.duration._
-import org.apache.usergrid.settings.{Headers, Settings}
+import org.apache.usergrid.settings.{Utils, Headers, Settings}
 
 /**
- * Classy class class.
+ * PostCustomEntitySimulation - creates lots of custom entities
+ * 
+ * Run this way:
+ * mvn gatling:execute -DrampTime=10 -DmaxPossibleUsers=10 -Dduration=120 -Dorg=yourorgname -Dapp=sandbox -Dbaseurl=https://api.usergrid.com -DadminUser=yourusername -DadminPassword='yourpassword' -Dgatling.simulationClass=org.apache.usergrid.simulations.PostCustomEntitySimulation -DcollectionType=yourcollection
+ * 
+ *
  */
 class PostCustomEntitySimulation extends Simulation {
 
   if(!Settings.skipSetup) {
     println("Begin setup")
-    //Setup.setupOrg()
-    //Setup.setupApplication()
+    println("These aren't the droids you are looking for...")
+    //exec(TokenScenarios.getManagementToken)
     println("End Setup")
   }else{
     println("Skipping Setup")
   }
 
   val numEntities:Int = Settings.numEntities
-  val collectionType:String = "restaurants"
+  val collectionType = Settings.collectionType
+  println("collection type = " + collectionType)
   val rampTime:Int = Settings.rampTime
   val throttle:Int = Settings.throttle
   val feeder = FeederGenerator.generateCustomEntityInfinite(0)
@@ -54,6 +60,17 @@ class PostCustomEntitySimulation extends Simulation {
   val scnToRun = scenario("POST custom entities")
     .feed(feeder)
     .exec(EntityScenarios.postEntity)
+  
+  /*
+  val scnToRun = scenario("POST custom entities")
+    .feed(feeder)
+    .doIfOrElse(session => session("token").as[String].nonEmpty(session)) {
+      exec(EntityScenarios.postEntityWithToken)
+    } {
+      exec(EntityScenarios.postEntity)
+    }
+*/
+
 
   setUp(scnToRun.inject(
     rampUsers(Settings.maxPossibleUsers) over Settings.rampTime,


[09/25] incubator-usergrid git commit: Added qualifiers to beans with more than 1 possibility

Posted by sn...@apache.org.
Added qualifiers to beans with more than 1 possibility


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

Branch: refs/heads/app-rebuild-fix
Commit: 3b85da791071191bef448e5af33af7b347a694eb
Parents: 2ac22fd
Author: Todd Nine <tn...@apigee.com>
Authored: Tue Feb 17 23:03:21 2015 -0800
Committer: Todd Nine <tn...@apigee.com>
Committed: Tue Feb 17 23:03:21 2015 -0800

----------------------------------------------------------------------
 .../java/org/apache/usergrid/rest/filters/MeteringFilter.java     | 2 ++
 .../usergrid/rest/security/SecuredResourceFilterFactory.java      | 2 ++
 .../usergrid/rest/security/shiro/filters/SecurityFilter.java      | 3 +++
 3 files changed, 7 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3b85da79/stack/rest/src/main/java/org/apache/usergrid/rest/filters/MeteringFilter.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/main/java/org/apache/usergrid/rest/filters/MeteringFilter.java b/stack/rest/src/main/java/org/apache/usergrid/rest/filters/MeteringFilter.java
index 8bb84d7..b483f5f 100644
--- a/stack/rest/src/main/java/org/apache/usergrid/rest/filters/MeteringFilter.java
+++ b/stack/rest/src/main/java/org/apache/usergrid/rest/filters/MeteringFilter.java
@@ -34,6 +34,7 @@ import javax.ws.rs.core.Context;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Component;
 import org.apache.usergrid.management.ManagementService;
 import org.apache.usergrid.persistence.EntityManager;
@@ -90,6 +91,7 @@ public class MeteringFilter implements ContainerRequestFilter, ContainerResponse
 
 
     @Autowired
+    @Qualifier("properties")
     public void setProperties( Properties properties ) {
         this.properties = properties;
     }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3b85da79/stack/rest/src/main/java/org/apache/usergrid/rest/security/SecuredResourceFilterFactory.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/main/java/org/apache/usergrid/rest/security/SecuredResourceFilterFactory.java b/stack/rest/src/main/java/org/apache/usergrid/rest/security/SecuredResourceFilterFactory.java
index 3b7603b..202eb31 100644
--- a/stack/rest/src/main/java/org/apache/usergrid/rest/security/SecuredResourceFilterFactory.java
+++ b/stack/rest/src/main/java/org/apache/usergrid/rest/security/SecuredResourceFilterFactory.java
@@ -29,6 +29,7 @@ import javax.ws.rs.core.UriInfo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Component;
 import org.apache.usergrid.management.ApplicationInfo;
 import org.apache.usergrid.management.ManagementService;
@@ -104,6 +105,7 @@ public class SecuredResourceFilterFactory implements ResourceFilterFactory {
 
 
     @Autowired
+    @Qualifier("properties")
     public void setProperties( Properties properties ) {
         this.properties = properties;
     }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3b85da79/stack/rest/src/main/java/org/apache/usergrid/rest/security/shiro/filters/SecurityFilter.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/main/java/org/apache/usergrid/rest/security/shiro/filters/SecurityFilter.java b/stack/rest/src/main/java/org/apache/usergrid/rest/security/shiro/filters/SecurityFilter.java
index 46c68f8..53f9354 100644
--- a/stack/rest/src/main/java/org/apache/usergrid/rest/security/shiro/filters/SecurityFilter.java
+++ b/stack/rest/src/main/java/org/apache/usergrid/rest/security/shiro/filters/SecurityFilter.java
@@ -26,6 +26,8 @@ import javax.ws.rs.core.HttpHeaders;
 import javax.ws.rs.core.UriInfo;
 
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+
 import org.apache.usergrid.management.ManagementService;
 import org.apache.usergrid.persistence.EntityManagerFactory;
 import org.apache.usergrid.security.tokens.TokenService;
@@ -88,6 +90,7 @@ public abstract class SecurityFilter implements ContainerRequestFilter {
 
 
     @Autowired
+    @Qualifier("properties")
     public void setProperties( Properties properties ) {
         this.properties = properties;
     }


[08/25] incubator-usergrid git commit: Restores /system/database/setup functionality after init method refactor

Posted by sn...@apache.org.
Restores /system/database/setup functionality after init method refactor


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

Branch: refs/heads/app-rebuild-fix
Commit: 2ac22fd1f23cdb6fecdeb7bc68560b8b39efafe7
Parents: c1b734e
Author: Todd Nine <tn...@apigee.com>
Authored: Tue Feb 17 22:02:45 2015 -0800
Committer: Todd Nine <tn...@apigee.com>
Committed: Tue Feb 17 22:02:45 2015 -0800

----------------------------------------------------------------------
 .../main/resources/usergrid-default.properties  |  13 +-
 .../usergrid/corepersistence/CpSetup.java       |   3 +
 .../usergrid/rest/DatabaseInitializer.java      | 146 -------------------
 3 files changed, 9 insertions(+), 153 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/2ac22fd1/stack/config/src/main/resources/usergrid-default.properties
----------------------------------------------------------------------
diff --git a/stack/config/src/main/resources/usergrid-default.properties b/stack/config/src/main/resources/usergrid-default.properties
index c840d21..068572d 100644
--- a/stack/config/src/main/resources/usergrid-default.properties
+++ b/stack/config/src/main/resources/usergrid-default.properties
@@ -35,9 +35,9 @@ usergrid.persistence=CP
 # Corepersistence properties
 
 # These will be set automatically bp CpSetup
-#cassandra.hosts=       
-#cassandra.port=         
-#cassandra.cluster_name= 
+#cassandra.hosts=
+#cassandra.port=
+#cassandra.cluster_name=
 #collections.keyspace.strategy.class=
 #collections.keyspace.strategy.options=replication_factor:1
 
@@ -54,7 +54,6 @@ collection.stage.transient.timeout=60
 hystrix.threadpool.graph_user.coreSize=40
 hystrix.threadpool.graph_async.coreSize=40
 
-elasticsearch.embedded=false
 elasticsearch.cluster_name=elasticsearch
 elasticsearch.index_prefix=usergrid
 elasticsearch.hosts=127.0.0.1
@@ -186,7 +185,7 @@ usergrid.queue.lock.timeout=5
 #
 # Scheduler setup
 
-#Time in milliseconds that a job can be started without a heartbeat before being considered dead.  
+#Time in milliseconds that a job can be started without a heartbeat before being considered dead.
 #Note that this must be high enough so that jobs that are iteration based can run an iteration and update the heartbeat
 usergrid.scheduler.job.timeout=120000
 #The path to the queue in the managment app to get jobs from
@@ -195,7 +194,7 @@ usergrid.scheduler.job.queueName=/jobs
 usergrid.scheduler.job.workers=4
 #Poll interval to check for new jobs in millseconds.  5 seconds is the default.  It will run all jobs up to current so this won't limit throughput
 usergrid.scheduler.job.interval=5000
-#The max number of times a job can fail before removing it permanently. Note that this count is INCLUSIVE.  
+#The max number of times a job can fail before removing it permanently. Note that this count is INCLUSIVE.
 #If the value is 10, the 11th fail will mark the job as dead
 usergrid.scheduler.job.maxfail=10
 
@@ -338,7 +337,7 @@ usergrid.management.email.admin-password-reset=\
 # User approval flow
 #
 
-# email to admin to approve and activate new app user 
+# email to admin to approve and activate new app user
 usergrid.management.email.admin-user-activation=\
     <p>To activate the user account for ${user_email}, click here:</p>\n\
     <p><a href="${activation_url}">${activation_url}</a></p>

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/2ac22fd1/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpSetup.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpSetup.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpSetup.java
index 299681d..a09ca49 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpSetup.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpSetup.java
@@ -83,6 +83,9 @@ public class CpSetup implements Setup {
     @Override
     public void init() throws Exception {
         //a no op, creating the injector creates the connections
+        setupStaticKeyspace();
+        setupSystemKeyspace();
+        createDefaultApplications();
 
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/2ac22fd1/stack/rest/src/test/java/org/apache/usergrid/rest/DatabaseInitializer.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/java/org/apache/usergrid/rest/DatabaseInitializer.java b/stack/rest/src/test/java/org/apache/usergrid/rest/DatabaseInitializer.java
deleted file mode 100644
index 79a9410..0000000
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/DatabaseInitializer.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.usergrid.rest;
-
-
-import java.util.Map;
-import java.util.Properties;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.apache.usergrid.management.ManagementService;
-import org.apache.usergrid.mq.QueueManagerFactory;
-import org.apache.usergrid.persistence.EntityManagerFactory;
-import org.apache.usergrid.services.ServiceManagerFactory;
-
-
-public class DatabaseInitializer {
-
-    private static final Logger logger = LoggerFactory.getLogger( DatabaseInitializer.class );
-
-    protected EntityManagerFactory emf;
-
-    protected ServiceManagerFactory smf;
-
-    protected ManagementService management;
-
-    protected Properties properties;
-
-    protected QueueManagerFactory qmf;
-
-
-    public DatabaseInitializer() {
-
-    }
-
-
-    public EntityManagerFactory getEntityManagerFactory() {
-        return emf;
-    }
-
-
-    @Autowired
-    public void setEntityManagerFactory( EntityManagerFactory emf ) {
-        this.emf = emf;
-    }
-
-
-    public ServiceManagerFactory getServiceManagerFactory() {
-        return smf;
-    }
-
-
-    @Autowired
-    public void setServiceManagerFactory( ServiceManagerFactory smf ) {
-        this.smf = smf;
-    }
-
-
-    public ManagementService getManagementService() {
-        return management;
-    }
-
-
-    @Autowired
-    public void setManagementService( ManagementService management ) {
-        this.management = management;
-    }
-
-
-    public Properties getProperties() {
-        return properties;
-    }
-
-
-    @Autowired
-    public void setProperties( Properties properties ) {
-        this.properties = properties;
-    }
-
-
-    public QueueManagerFactory getQueueManagerFactory() {
-        return qmf;
-    }
-
-
-    @Autowired
-    public void setQueueManagerFactory( QueueManagerFactory qmf ) {
-        this.qmf = qmf;
-    }
-
-
-    boolean databaseInitializationPerformed = false;
-
-
-    public void init() {
-        logger.info( "Initializing server with Spring" );
-
-        // If we're running an embedded Cassandra, we always need to initialize
-        // it since Hector wipes the data on startup.
-        //
-
-        if ( databaseInitializationPerformed ) {
-            logger.info( "Can only attempt to initialized database once per JVM process" );
-            return;
-        }
-        databaseInitializationPerformed = true;
-
-        logger.info( "Initializing Cassandra database" );
-        Map<String, String> properties = emf.getServiceProperties();
-        if ( properties != null ) {
-            logger.error( "System properties are initialized, database is set up already." );
-            return;
-        }
-
-        try {
-            emf.setup();
-        }
-        catch ( Exception e ) {
-            logger.error( "Unable to complete core database setup, possibly due to it being setup already", e );
-        }
-
-        try {
-            management.setup();
-        }
-        catch ( Exception e ) {
-            logger.error( "Unable to complete management database setup, possibly due to it being setup already", e );
-        }
-
-        logger.info( "Usergrid schema setup" );
-    }
-}


[07/25] incubator-usergrid git commit: Added clearing the shiro filter to get ServiceInvocationIT test working consistently

Posted by sn...@apache.org.
Added clearing the shiro filter to get ServiceInvocationIT test working consistently


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

Branch: refs/heads/app-rebuild-fix
Commit: c1b734eb5253cc2c7e49a957c9b694ca84ed7a40
Parents: 32d52c3
Author: grey <gr...@apigee.com>
Authored: Tue Feb 17 14:36:08 2015 -0800
Committer: grey <gr...@apigee.com>
Committed: Tue Feb 17 14:36:08 2015 -0800

----------------------------------------------------------------------
 .../org/apache/usergrid/services/ServiceInvocationIT.java     | 7 +++++++
 1 file changed, 7 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c1b734eb/stack/services/src/test/java/org/apache/usergrid/services/ServiceInvocationIT.java
----------------------------------------------------------------------
diff --git a/stack/services/src/test/java/org/apache/usergrid/services/ServiceInvocationIT.java b/stack/services/src/test/java/org/apache/usergrid/services/ServiceInvocationIT.java
index aede136..1c8e850 100644
--- a/stack/services/src/test/java/org/apache/usergrid/services/ServiceInvocationIT.java
+++ b/stack/services/src/test/java/org/apache/usergrid/services/ServiceInvocationIT.java
@@ -22,10 +22,14 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
+
+import org.apache.usergrid.cassandra.ClearShiroSubject;
 import org.apache.usergrid.persistence.Entity;
 import org.apache.usergrid.persistence.index.query.Query;
 import org.apache.usergrid.persistence.model.util.UUIDGenerator;
 import static org.junit.Assert.assertNotNull;
+
+import org.junit.Rule;
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -34,6 +38,9 @@ import org.slf4j.LoggerFactory;
 public class ServiceInvocationIT extends AbstractServiceIT {
     private static final Logger LOG = LoggerFactory.getLogger( ServiceInvocationIT.class );
 
+    @Rule
+    public ClearShiroSubject clearShiroSubject = new ClearShiroSubject();
+
 
     @Test
     public void testServices() throws Exception {


[21/25] incubator-usergrid git commit: Added fix to job scheduler looking for incorrect index name.

Posted by sn...@apache.org.
Added fix to job scheduler looking for incorrect index name.


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

Branch: refs/heads/app-rebuild-fix
Commit: 4ecaa4db118caa1231a7dee293e993f73435abbb
Parents: c6a96a8
Author: grey <gr...@apigee.com>
Authored: Thu Feb 19 10:44:13 2015 -0800
Committer: grey <gr...@apigee.com>
Committed: Thu Feb 19 10:44:13 2015 -0800

----------------------------------------------------------------------
 stack/config/src/main/resources/usergrid-default.properties | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/4ecaa4db/stack/config/src/main/resources/usergrid-default.properties
----------------------------------------------------------------------
diff --git a/stack/config/src/main/resources/usergrid-default.properties b/stack/config/src/main/resources/usergrid-default.properties
index 068572d..d42d12c 100644
--- a/stack/config/src/main/resources/usergrid-default.properties
+++ b/stack/config/src/main/resources/usergrid-default.properties
@@ -55,7 +55,7 @@ hystrix.threadpool.graph_user.coreSize=40
 hystrix.threadpool.graph_async.coreSize=40
 
 elasticsearch.cluster_name=elasticsearch
-elasticsearch.index_prefix=usergrid
+elasticsearch.index_prefix=elasticsearch
 elasticsearch.hosts=127.0.0.1
 elasticsearch.port=9300
 #We don't want to overwrite, let the defaults be used


[22/25] incubator-usergrid git commit: Cleanup

Posted by sn...@apache.org.
Cleanup


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

Branch: refs/heads/app-rebuild-fix
Commit: 5d05f86590eb3c4bd740b8aef3c45c7d8bd66ecf
Parents: 4ecaa4d
Author: grey <gr...@apigee.com>
Authored: Thu Feb 19 10:58:59 2015 -0800
Committer: grey <gr...@apigee.com>
Committed: Thu Feb 19 10:58:59 2015 -0800

----------------------------------------------------------------------
 stack/rest/src/test/resources/usergrid-deployment.properties | 2 --
 1 file changed, 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/5d05f865/stack/rest/src/test/resources/usergrid-deployment.properties
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/resources/usergrid-deployment.properties b/stack/rest/src/test/resources/usergrid-deployment.properties
index 24f3da9..34b0aa7 100644
--- a/stack/rest/src/test/resources/usergrid-deployment.properties
+++ b/stack/rest/src/test/resources/usergrid-deployment.properties
@@ -43,8 +43,6 @@ hystrix.threadpool.graph_user.coreSize=10
 hystrix.threadpool.graph_async.coreSize=10
 
 elasticsearch.cluster_name=usergrid
-#elasticsearch.cluster_name=grindrgw-prod
-#elasticsearch.cluster_name=rea1dug001-prod
 elasticsearch.index_prefix=usergrid
 elasticsearch.hosts=127.0.0.1
 elasticsearch.port=9300


[05/25] incubator-usergrid git commit: Merge branch 'USERGRID-273' of https://git-wip-us.apache.org/repos/asf/incubator-usergrid into USERGRID-273

Posted by sn...@apache.org.
Merge branch 'USERGRID-273' of https://git-wip-us.apache.org/repos/asf/incubator-usergrid into USERGRID-273


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

Branch: refs/heads/app-rebuild-fix
Commit: eba86eeaf0a3cabceeb752e55df6441910fd0418
Parents: 55e0f74 bc31415
Author: Shawn Feldman <sf...@apache.org>
Authored: Mon Feb 16 15:17:13 2015 -0800
Committer: Shawn Feldman <sf...@apache.org>
Committed: Mon Feb 16 15:17:13 2015 -0800

----------------------------------------------------------------------
 .../collection/impl/EntityCollectionManagerImpl.java      | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)
----------------------------------------------------------------------



[17/25] incubator-usergrid git commit: Fix forkCount parameter and failing test in ImportCollectionsIT.

Posted by sn...@apache.org.
Fix forkCount parameter and failing test in ImportCollectionsIT.


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

Branch: refs/heads/app-rebuild-fix
Commit: 627d0ca89da607e15dfa0c760467345766a29478
Parents: d87577e
Author: Dave Johnson <dm...@apigee.com>
Authored: Wed Feb 18 14:28:54 2015 -0500
Committer: Dave Johnson <dm...@apigee.com>
Committed: Wed Feb 18 14:28:54 2015 -0500

----------------------------------------------------------------------
 stack/pom.xml                                         | 14 ++++++--------
 .../management/importer/ImportCollectionIT.java       |  2 +-
 2 files changed, 7 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/627d0ca8/stack/pom.xml
----------------------------------------------------------------------
diff --git a/stack/pom.xml b/stack/pom.xml
index 94fdaf6..12fac3f 100644
--- a/stack/pom.xml
+++ b/stack/pom.xml
@@ -117,19 +117,17 @@
       <mockito.version>1.10.8</mockito.version>
 
       <!-- only use half the cores on the machine for testing -->
-        <usergrid.it.parallel>methods</usergrid.it.parallel>
-        <usergrid.it.reuseForks>true</usergrid.it.reuseForks>
-      <usergrid.it.forkCount>.5C</usergrid.it.forkCount>
+      <usergrid.it.parallel>methods</usergrid.it.parallel>
+      <usergrid.it.reuseForks>true</usergrid.it.reuseForks>
+      <usergrid.it.forkCount>1</usergrid.it.forkCount>
       <usergrid.it.threads>2</usergrid.it.threads>
 
-
       <metrics.version>3.0.0</metrics.version>
       <rx.version>0.19.6</rx.version>
-        <surefire.plugin.version>2.18.1</surefire.plugin.version>
-        <powermock.version>1.6.1</powermock.version>
-
+      <surefire.plugin.version>2.18.1</surefire.plugin.version>
+      <powermock.version>1.6.1</powermock.version>
 
-           <maven.build.timestamp.format>yyyy-MM-dd'T'HH-mm-ss'Z'</maven.build.timestamp.format>
+      <maven.build.timestamp.format>yyyy-MM-dd'T'HH-mm-ss'Z'</maven.build.timestamp.format>
 
     </properties>
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/627d0ca8/stack/services/src/test/java/org/apache/usergrid/management/importer/ImportCollectionIT.java
----------------------------------------------------------------------
diff --git a/stack/services/src/test/java/org/apache/usergrid/management/importer/ImportCollectionIT.java b/stack/services/src/test/java/org/apache/usergrid/management/importer/ImportCollectionIT.java
index 4994eec..acd3077 100644
--- a/stack/services/src/test/java/org/apache/usergrid/management/importer/ImportCollectionIT.java
+++ b/stack/services/src/test/java/org/apache/usergrid/management/importer/ImportCollectionIT.java
@@ -279,7 +279,7 @@ public class ImportCollectionIT {
             // create new second application and import those things from S3
 
             final UUID appId2 = setup.getMgmtSvc().createApplication(
-                organization.getUuid(), "second").getId();
+                organization.getUuid(), "second" + RandomStringUtils.randomAlphanumeric(10)).getId();
 
             final EntityManager emApp2 = setup.getEmf().getEntityManager(appId2);
             importCollections(emApp2);


[23/25] incubator-usergrid git commit: Merge branch 'app-rebuild-fix' into USERGRID-273

Posted by sn...@apache.org.
Merge branch 'app-rebuild-fix' into USERGRID-273


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

Branch: refs/heads/app-rebuild-fix
Commit: 011a5e07147b5d59a37e5d20bed9dda712f5bd57
Parents: 5d05f86 d2a0ff2
Author: Todd Nine <tn...@apigee.com>
Authored: Thu Feb 19 22:40:38 2015 -0700
Committer: Todd Nine <tn...@apigee.com>
Committed: Thu Feb 19 22:40:38 2015 -0700

----------------------------------------------------------------------
 .../corepersistence/CpEntityManager.java        |  2 +-
 .../usergrid/corepersistence/CpWalker.java      | 73 ++++++++++----------
 .../org/apache/usergrid/rest/IndexResource.java | 26 ++++---
 3 files changed, 55 insertions(+), 46 deletions(-)
----------------------------------------------------------------------



[19/25] incubator-usergrid git commit: Fixes readme for settings.xml and set defaults in pom.xml

Posted by sn...@apache.org.
Fixes readme for settings.xml and set defaults in pom.xml


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

Branch: refs/heads/app-rebuild-fix
Commit: 14051bcfb4785d1c062a938caf38788230558f0c
Parents: 399d60e
Author: Todd Nine <tn...@apigee.com>
Authored: Wed Feb 18 11:32:47 2015 -0800
Committer: Todd Nine <tn...@apigee.com>
Committed: Wed Feb 18 11:32:47 2015 -0800

----------------------------------------------------------------------
 stack/rest/README.md                         | 3 ++-
 stack/rest/pom.xml                           | 3 ++-
 stack/rest/src/test/resources/arquillian.xml | 1 -
 3 files changed, 4 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/14051bcf/stack/rest/README.md
----------------------------------------------------------------------
diff --git a/stack/rest/README.md b/stack/rest/README.md
index 33f9469..bd0034d 100644
--- a/stack/rest/README.md
+++ b/stack/rest/README.md
@@ -97,5 +97,6 @@ JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"
 Add the following properties to you maven settings.xml
 
 ```xml
- <catalina.home>[path to your tomcat directory]</catalina.home>
+<catalina.host>localhost</catalina.host>
+<catalina.jmx.port>8089</catalina.jmx.port>
  ```

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/14051bcf/stack/rest/pom.xml
----------------------------------------------------------------------
diff --git a/stack/rest/pom.xml b/stack/rest/pom.xml
index e6113bc..e07e218 100644
--- a/stack/rest/pom.xml
+++ b/stack/rest/pom.xml
@@ -33,7 +33,8 @@
     <properties>
         <usergrid.rest.threads>8</usergrid.rest.threads>
         <guice.version>4.0-beta5</guice.version>
-        <catalina.home>OVERRIDE_ME_IN_SETTINGS>XML</catalina.home>
+        <catalina.host>localhost</catalina.host>
+        <catalina.jmx.port>8089</catalina.jmx.port>
     </properties>
 
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/14051bcf/stack/rest/src/test/resources/arquillian.xml
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/resources/arquillian.xml b/stack/rest/src/test/resources/arquillian.xml
index d73395e..f6adcfc 100644
--- a/stack/rest/src/test/resources/arquillian.xml
+++ b/stack/rest/src/test/resources/arquillian.xml
@@ -50,7 +50,6 @@
             <property name="user">usergrid</property>
             <property name="pass">testpassword</property>
             <!--This is a workaround for this issue https://issues.jboss.org/browse/ARQ-1814-->
-            <property name="catalinaBase">${catalina.home}</property>
             <property name="jmxPort">${catalina.jmx.port}</property>
         </configuration>
     </container>


[03/25] incubator-usergrid git commit: Merge branch 'USERGRID-273' of https://git-wip-us.apache.org/repos/asf/incubator-usergrid into USERGRID-273

Posted by sn...@apache.org.
Merge branch 'USERGRID-273' of https://git-wip-us.apache.org/repos/asf/incubator-usergrid into USERGRID-273


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

Branch: refs/heads/app-rebuild-fix
Commit: 55e0f74207898184e944373a3460feae1df3a967
Parents: ab08b8d 3c83bcb
Author: Shawn Feldman <sf...@apache.org>
Authored: Mon Feb 16 15:06:25 2015 -0800
Committer: Shawn Feldman <sf...@apache.org>
Committed: Mon Feb 16 15:06:25 2015 -0800

----------------------------------------------------------------------
 .../corepersistence/StaleIndexCleanupTest.java  |  2 +
 .../apache/usergrid/persistence/CounterIT.java  | 13 ++--
 .../persistence/EntityDictionaryIT.java         | 24 ++-----
 .../usergrid/persistence/EntityManagerIT.java   | 70 +++++--------------
 .../persistence/GeoQueryBooleanTest.java        | 10 +--
 .../cache/CachedEntityCollectionManager.java    |  2 +-
 .../EntityCollectionManagerFactoryImpl.java     |  1 +
 stack/pom.xml                                   |  4 ++
 .../rest/management/ImportResourceIT.java       | 11 +--
 stack/services/pom.xml                          |  4 +-
 .../services/queues/ImportQueueListener.java    |  5 +-
 .../usergrid/services/queues/QueueListener.java | 10 +--
 .../management/importer/ImportCollectionIT.java | 71 ++++++++++++--------
 .../importer/ImportConnectionsTest.java         | 28 ++++----
 .../management/importer/ImportServiceIT.java    | 14 ++--
 15 files changed, 122 insertions(+), 147 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/55e0f742/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerFactoryImpl.java
----------------------------------------------------------------------


[24/25] incubator-usergrid git commit: Merge branch 'USERGRID-273' into app-rebuild-fix

Posted by sn...@apache.org.
Merge branch 'USERGRID-273' into app-rebuild-fix

Conflicts:
	stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerImpl.java
	stack/services/src/test/java/org/apache/usergrid/management/importer/ImportCollectionIT.java


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

Branch: refs/heads/app-rebuild-fix
Commit: fe8f4044a55e6d43373aaba8e0ee9be312d2a2f1
Parents: 2f077f1 011a5e0
Author: Dave Johnson <dm...@apigee.com>
Authored: Fri Feb 20 15:31:35 2015 -0500
Committer: Dave Johnson <dm...@apigee.com>
Committed: Fri Feb 20 15:31:35 2015 -0500

----------------------------------------------------------------------
 .../src/main/groovy/configure_usergrid.groovy   |   2 +-
 .../main/resources/usergrid-default.properties  |  15 +-
 .../usergrid/corepersistence/CpSetup.java       |   3 +
 .../entities/FailedImportEntity.java            |  11 +-
 .../EntityCollectionManagerFactoryImpl.java     |  37 ++--
 .../collection/mvcc/stage/write/WriteStart.java |  31 ++--
 .../mvcc/stage/TestEntityGenerator.java         |  54 +++---
 .../mvcc/stage/write/WriteStartTest.java        |  51 +++++-
 .../persistence/model/entity/Entity.java        |   5 +
 .../datagenerators/EntityDataGenerator.scala    |  17 +-
 .../datagenerators/FeederGenerator.scala        |  24 ++-
 .../usergrid/scenarios/EntityScenarios.scala    |  20 +-
 .../org/apache/usergrid/settings/Settings.scala |   2 +
 .../PostCustomEntitySimulation.scala            |  27 ++-
 stack/mongo-emulator/pom.xml                    |  15 +-
 stack/pom.xml                                   |  63 ++-----
 stack/rest/README.md                            |  14 +-
 stack/rest/pom.xml                              |  20 +-
 .../org/apache/usergrid/rest/IndexResource.java |  50 +++++
 .../usergrid/rest/filters/MeteringFilter.java   |   2 +
 .../security/SecuredResourceFilterFactory.java  |   2 +
 .../security/shiro/filters/SecurityFilter.java  |   3 +
 .../apache/usergrid/rest/AbstractRestIT.java    |   9 +-
 .../usergrid/rest/DatabaseInitializer.java      | 146 ---------------
 .../rest/management/OrganizationsIT.java        |   2 +-
 .../test/resource2point0/AbstractRestIT.java    |  22 +++
 stack/rest/src/test/resources/arquillian.xml    |  24 ++-
 .../resources/usergrid-deployment.properties    |   2 -
 .../management/export/S3ExportImpl.java         |   6 +-
 .../management/importer/ImportServiceImpl.java  |   5 +-
 .../management/importer/S3ImportImpl.java       |  28 ++-
 .../services/assets/data/BinaryStore.java       |   3 +-
 .../services/assets/data/S3BinaryStore.java     |  18 +-
 .../org/apache/usergrid/ServiceITSetupImpl.java |   1 +
 .../usergrid/management/OrganizationIT.java     |  30 +--
 .../management/export/ExportServiceIT.java      | 183 ++++++++++++-------
 .../importer/FileImportTrackerTest.java         |  55 +++---
 .../management/importer/ImportCollectionIT.java |  73 +++++---
 .../usergrid/management/importer/S3Upload.java  |  18 +-
 .../services/ApplicationsServiceIT.java         |   8 +-
 .../usergrid/services/ServiceInvocationIT.java  |   7 +
 .../src/test/resources/project.properties       |   1 +
 .../usergrid/cassandra/ClearShiroSubject.java   |  18 ++
 43 files changed, 626 insertions(+), 501 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/fe8f4044/stack/rest/src/main/java/org/apache/usergrid/rest/IndexResource.java
----------------------------------------------------------------------
diff --cc stack/rest/src/main/java/org/apache/usergrid/rest/IndexResource.java
index 251e25c,acce2d8..85f27ed
--- a/stack/rest/src/main/java/org/apache/usergrid/rest/IndexResource.java
+++ b/stack/rest/src/main/java/org/apache/usergrid/rest/IndexResource.java
@@@ -193,9 -186,9 +193,59 @@@ public class IndexResource extends Abst
          response.setSuccess();
  
          return new JSONWithPadding( response, callback );
+     }
+ 
+     @RequireSystemAccess
++    @PUT
++    @Path( "rebuildinternal" )
++    public JSONWithPadding rebuildInternalIndexes(
++        @Context UriInfo ui,
++        @PathParam( "applicationId" ) String applicationIdStr,
++        @QueryParam( "callback" ) @DefaultValue( "callback" ) String callback,
++        @QueryParam( "delay" ) @DefaultValue( "10" ) final long delay )  throws Exception {
++
++
++        final UUID appId = UUIDUtils.tryExtractUUID(applicationIdStr);
++        ApiResponse response = createApiResponse();
++        response.setAction( "rebuild indexes started" );
++
++        final EntityManagerFactory.ProgressObserver po = new EntityManagerFactory.ProgressObserver() {
++
++            @Override
++            public void onProgress( final EntityRef entity ) {
++                logger.info( "Indexing entity {}:{}", entity.getType(), entity.getUuid() );
++            }
++
++
++            @Override
++            public long getWriteDelayTime() {
++                return delay;
++            }
++        };
++
++        final Thread rebuild = new Thread() {
++
++            @Override
++            public void run() {
++                try {
++                    emf.rebuildInternalIndexes( po );
++                }
++                catch ( Exception e ) {
++                    logger.error( "Unable to re-index internals", e );
++                }
++            }
++        };
++
++        rebuild.setName( String.format( "Index rebuild for app %s", appId ) );
++        rebuild.setDaemon( true );
++        rebuild.start();
++
++        response.setSuccess();
++
++        return new JSONWithPadding( response, callback );
 +    }
 +
 +    @RequireSystemAccess
      @POST
      @Path( RootResource.APPLICATION_ID_PATH )
      public JSONWithPadding addIndex(@Context UriInfo ui,

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/fe8f4044/stack/services/src/test/java/org/apache/usergrid/management/importer/ImportCollectionIT.java
----------------------------------------------------------------------
diff --cc stack/services/src/test/java/org/apache/usergrid/management/importer/ImportCollectionIT.java
index 7fcfc57,acd3077..d10b611
--- a/stack/services/src/test/java/org/apache/usergrid/management/importer/ImportCollectionIT.java
+++ b/stack/services/src/test/java/org/apache/usergrid/management/importer/ImportCollectionIT.java
@@@ -110,8 -110,9 +110,9 @@@ public class ImportCollectionIT 
          bucketPrefix = System.getProperty( "bucketName" );
  
          // start the scheduler after we're all set up
 -        JobSchedulerService jobScheduler = ConcurrentProcessSingleton
 -            .getInstance().getSpringResource().getBean( JobSchedulerService.class );
 +        JobSchedulerService jobScheduler = ConcurrentProcessSingleton.getInstance()
 +            .getSpringResource().getBean( JobSchedulerService.class );
+ 
          if ( jobScheduler.state() != Service.State.RUNNING ) {
              jobScheduler.startAsync();
              jobScheduler.awaitRunning();
@@@ -480,14 -499,14 +499,14 @@@
  
          logger.debug("\n\nImport into new app {}\n", em.getApplication().getName() );
  
--        ImportService importService = setup.getImportService();
++        final ImportService importService = setup.getImportService();
  
--        Import importEntity = importService.schedule(em.getApplication().getUuid(),
++        final Import importEntity = importService.schedule(em.getApplication().getUuid(),
              new HashMap<String, Object>() {{
 -                put( "path", organization.getName() + em.getApplication().getName() );
 -                put( "organizationId", organization.getUuid() );
 -                put( "applicationId", em.getApplication().getUuid() );
 -                put( "properties", new HashMap<String, Object>() {{
 +            put( "path", organization.getName() + em.getApplication().getName() );
 +            put( "organizationId", organization.getUuid() );
 +            put( "applicationId", em.getApplication().getUuid() );
 +            put( "properties", new HashMap<String, Object>() {{
                  put( "storage_provider", "s3" );
                  put( "storage_info", new HashMap<String, Object>() {{
                      put( "s3_access_id",


[04/25] incubator-usergrid git commit: Fixes emitting null, which should not happen in observable.

Posted by sn...@apache.org.
Fixes emitting null, which should not happen in observable.


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

Branch: refs/heads/app-rebuild-fix
Commit: bc314159610a3e52093dfae516591309a4205f46
Parents: 3c83bcb
Author: Todd Nine <tn...@apigee.com>
Authored: Mon Feb 16 15:16:25 2015 -0800
Committer: Todd Nine <tn...@apigee.com>
Committed: Mon Feb 16 15:16:25 2015 -0800

----------------------------------------------------------------------
 .../collection/impl/EntityCollectionManagerImpl.java      | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/bc314159/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerImpl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerImpl.java
index 8c754c1..4f04846 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerImpl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerImpl.java
@@ -230,16 +230,16 @@ public class EntityCollectionManagerImpl implements EntityCollectionManager {
         Preconditions.checkNotNull( entityId.getUuid(), "Entity id uuid required in load stage" );
         Preconditions.checkNotNull( entityId.getType(), "Entity id type required in load stage" );
 
-        return load( Collections.singleton( entityId ) ).map( new Func1<EntitySet, Entity>() {
+        return load( Collections.singleton( entityId ) ).flatMap( new Func1<EntitySet, Observable<Entity>>() {
             @Override
-            public Entity call( final EntitySet entitySet ) {
+            public Observable<Entity> call( final EntitySet entitySet ) {
                 final MvccEntity entity = entitySet.getEntity( entityId );
 
-                if ( entity == null ) {
-                    return null;
+                if ( entity == null || !entity.getEntity().isPresent()) {
+                    return Observable.empty();
                 }
 
-                return entity.getEntity().orNull();
+                return Observable.just( entity.getEntity().get() );
             }
         } );
     }


[13/25] incubator-usergrid git commit: Removed some maven dependencies that were giving maven warnings. Removed and updated pom to fix mongo-emulator. Reworked OrganizationIT to use the newOrgandApp creation structure. Only minor changes though Manually

Posted by sn...@apache.org.
Removed some maven dependencies that were giving maven warnings.
Removed and updated pom to fix mongo-emulator.
Reworked OrganizationIT to use the newOrgandApp creation structure. Only minor changes though
Manually cleared applicationsServiceIT fixed error where it wasn't clearing before hand.
Added additional method to clearShiroSubject so I can clear the subject manually at the beginning of a test.


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

Branch: refs/heads/app-rebuild-fix
Commit: 518b67992122650ab87bffbb31551678addf8f32
Parents: d705f69
Author: grey <gr...@apigee.com>
Authored: Wed Feb 18 09:39:46 2015 -0800
Committer: grey <gr...@apigee.com>
Committed: Wed Feb 18 09:39:46 2015 -0800

----------------------------------------------------------------------
 stack/mongo-emulator/pom.xml                    | 15 +------
 stack/pom.xml                                   | 47 ++++----------------
 .../rest/management/OrganizationsIT.java        |  2 +-
 .../usergrid/management/OrganizationIT.java     | 30 ++++++-------
 .../services/ApplicationsServiceIT.java         |  8 ++--
 .../usergrid/cassandra/ClearShiroSubject.java   | 18 ++++++++
 6 files changed, 48 insertions(+), 72 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/518b6799/stack/mongo-emulator/pom.xml
----------------------------------------------------------------------
diff --git a/stack/mongo-emulator/pom.xml b/stack/mongo-emulator/pom.xml
index 7c18367..0047d52 100644
--- a/stack/mongo-emulator/pom.xml
+++ b/stack/mongo-emulator/pom.xml
@@ -59,20 +59,7 @@
         </includes>
       </testResource>
     </testResources>
-
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <configuration>
-          <systemPropertyVariables>
-            <storage-config>${basedir}/src/test/conf</storage-config>
-          </systemPropertyVariables>
-          <forkMode>always</forkMode>
-          <argLine>-Xmx${ug.heapmax} -Xms${ug.heapmin} -javaagent:${settings.localRepository}/com/github/stephenc/jamm/0.2.5/jamm-0.2.5.jar ${ug.argline}</argLine>
-        </configuration>
-      </plugin>
-    </plugins>
+      
   </build>
 
   <dependencies>

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/518b6799/stack/pom.xml
----------------------------------------------------------------------
diff --git a/stack/pom.xml b/stack/pom.xml
index 60cdef4..94fdaf6 100644
--- a/stack/pom.xml
+++ b/stack/pom.xml
@@ -938,12 +938,6 @@
 
       <dependency>
         <groupId>org.codehaus.jackson</groupId>
-        <artifactId>jackson-xc</artifactId>
-        <version>${jackson-version}</version>
-      </dependency>
-
-      <dependency>
-        <groupId>org.codehaus.jackson</groupId>
         <artifactId>jackson-smile</artifactId>
         <version>${jackson-version}</version>
       </dependency>
@@ -1484,24 +1478,6 @@
 
                 <plugin>
                   <groupId>org.apache.maven.plugins</groupId>
-                  <artifactId>maven-compiler-plugin</artifactId>
-                  <version>3.2</version>
-                  <configuration>
-                    <source>1.7</source>
-                    <target>1.7</target>
-                    <optimize>true</optimize>
-                    <showDeprecation>true</showDeprecation>
-                    <debug>true</debug>
-                    <!-- uncomment when building for more detailed profiling information <debuglevel>lines,vars,source</debuglevel> -->
-                    <encoding>UTF-8</encoding>
-                    <showWarnings>true</showWarnings>
-                  </configuration>
-                </plugin>
-
-
-
-                <plugin>
-                  <groupId>org.apache.maven.plugins</groupId>
                   <artifactId>maven-jar-plugin</artifactId>
                   <version>2.5</version>
                   <executions>
@@ -1525,6 +1501,7 @@
                           <parallel>${usergrid.it.parallel}</parallel>
                           <forkCount>${usergrid.it.forkCount}</forkCount>
                           <reuseForks>${usergrid.it.reuseForks}</reuseForks>
+                          <threadCount>${usergrid.it.forkCount}</threadCount>
                           <argLine>-Xmx${ug.heapmax} -Xms${ug.heapmin}  -javaagent:${settings.localRepository}/com/github/stephenc/jamm/0.2.5/jamm-0.2.5.jar ${ug.argline}
                           </argLine>
                       </configuration>
@@ -1532,23 +1509,16 @@
                       <!-- TODO, we may need an exclusion.  Appears to be a classloader bug
                       http://stackoverflow.com/questions/27225140/intermittent-noclassdeffounderror-when-running-a-maven-surefire-build-in-jenkins
                       -->
-                      <dependencies>
-                          <dependency>
-                              <groupId>org.apache.maven.surefire</groupId>
-                              <artifactId>surefire-junit47</artifactId>
-                              <version>${surefire.plugin.version}</version>
-                          </dependency>
-                      </dependencies>
+                      <!--<dependencies>-->
+                          <!--<dependency>-->
+                              <!--<groupId>org.apache.maven.surefire</groupId>-->
+                              <!--<artifactId>surefire-junit47</artifactId>-->
+                              <!--<version>${surefire.plugin.version}</version>-->
+                          <!--</dependency>-->
+                      <!--</dependencies>-->
                   </plugin>
 
 
-
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>sonar-maven-plugin</artifactId>
-      </plugin>
-
-
         <plugin>
             <groupId>org.apache.rat</groupId>
             <artifactId>apache-rat-plugin</artifactId>
@@ -1681,6 +1651,7 @@
     </plugins>
   </reporting>
 
+
     <!--<repositories>-->
         <!--<repository>-->
             <!--<id>local-dependencies</id>-->

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/518b6799/stack/rest/src/test/java/org/apache/usergrid/rest/management/OrganizationsIT.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/java/org/apache/usergrid/rest/management/OrganizationsIT.java b/stack/rest/src/test/java/org/apache/usergrid/rest/management/OrganizationsIT.java
index aa34ad7..8cb079e 100644
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/management/OrganizationsIT.java
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/management/OrganizationsIT.java
@@ -62,7 +62,7 @@ public class OrganizationsIT extends AbstractRestIT {
         //User property to see if owner properties exist when created.
         Map<String, Object> userProperties = new HashMap<String, Object>();
         userProperties.put( "company", "Apigee" );
-        
+
         //Create organization
         Organization organization = createOrgPayload( "createOrgAndOwner", userProperties );
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/518b6799/stack/services/src/test/java/org/apache/usergrid/management/OrganizationIT.java
----------------------------------------------------------------------
diff --git a/stack/services/src/test/java/org/apache/usergrid/management/OrganizationIT.java b/stack/services/src/test/java/org/apache/usergrid/management/OrganizationIT.java
index e47dfc7..bd96434 100644
--- a/stack/services/src/test/java/org/apache/usergrid/management/OrganizationIT.java
+++ b/stack/services/src/test/java/org/apache/usergrid/management/OrganizationIT.java
@@ -52,7 +52,6 @@ public class OrganizationIT {
     @Rule
     public ClearShiroSubject clearShiroSubject = new ClearShiroSubject();
 
-
     @ClassRule
     public static ServiceITSetup setup = new ServiceITSetupImpl();
 
@@ -62,53 +61,54 @@ public class OrganizationIT {
 
     @Test
     public void testCreateOrganization() throws Exception {
-        UserInfo user =
-                setup.getMgmtSvc().createAdminUser( uniqueUsername(), "Ed Anuff", uniqueEmail(), "test", false, false );
-        assertNotNull( user );
+//        UserInfo user =
+//                setup.getMgmtSvc().createAdminUser( uniqueUsername(), "Ed Anuff", uniqueEmail(), "test", false, false );
+//        assertNotNull( user );
 
         final String orgName =  uniqueOrg();
-
-        OrganizationInfo organization = setup.getMgmtSvc().createOrganization( orgName, user, false );
+        OrganizationOwnerInfo organization = newOrgAppAdminRule.createOwnerAndOrganization( orgName, uniqueUsername(), uniqueEmail(),"Ed Anuff", "test" ); //setup.getMgmtSvc().getOrganizationsForAdminUser( organization.getOwner().getUuid() );
+        //createOrganization( orgName, user, false );
         assertNotNull( organization );
 
         setup.getEmf().getEntityManager( setup.getSmf().getManagementAppId() ).refreshIndex();
-
-        Map<UUID, String> userOrganizations = setup.getMgmtSvc().getOrganizationsForAdminUser( user.getUuid() );
+        Map<UUID, String> userOrganizations = setup.getMgmtSvc().getOrganizationsForAdminUser(
+            organization.getOwner().getUuid() );
         assertEquals( "wrong number of organizations", 1, userOrganizations.size() );
 
-        List<UserInfo> users = setup.getMgmtSvc().getAdminUsersForOrganization( organization.getUuid() );
+        List<UserInfo> users = setup.getMgmtSvc().getAdminUsersForOrganization(
+            organization.getOrganization().getUuid() );
         assertEquals( "wrong number of users", 1, users.size() );
 
-        UUID applicationId = setup.getMgmtSvc().createApplication( organization.getUuid(), "ed-application" ).getId();
+        UUID applicationId = setup.getMgmtSvc().createApplication( organization.getOrganization().getUuid(), "ed-application" ).getId();
         assertNotNull( applicationId );
 
         setup.getEmf().getEntityManager( setup.getSmf().getManagementAppId() ).refreshIndex();
         setup.getEmf().getEntityManager( applicationId ).refreshIndex();
 
-        Map<UUID, String> applications = setup.getMgmtSvc().getApplicationsForOrganization( organization.getUuid() );
+        Map<UUID, String> applications = setup.getMgmtSvc().getApplicationsForOrganization( organization.getOrganization().getUuid() );
         assertEquals( "wrong number of applications", 1, applications.size() );
 
         OrganizationInfo organization2 = setup.getMgmtSvc().getOrganizationForApplication( applicationId );
         assertNotNull( organization2 );
         assertEquals( "wrong organization name", orgName, organization2.getName() );
 
-        boolean verified = setup.getMgmtSvc().verifyAdminUserPassword( user.getUuid(), "test" );
+        boolean verified = setup.getMgmtSvc().verifyAdminUserPassword( organization.getOwner().getUuid(), "test" );
         assertTrue( verified );
 
         setup.getMgmtSvc().activateOrganization( organization2 );
 
         setup.getEmf().getEntityManager( setup.getSmf().getManagementAppId() ).refreshIndex();
 
-        UserInfo u = setup.getMgmtSvc().verifyAdminUserPasswordCredentials( user.getUuid().toString(), "test" );
+        UserInfo u = setup.getMgmtSvc().verifyAdminUserPasswordCredentials( organization.getOwner().getUuid().toString(), "test" );
         assertNotNull( u );
 
-        String token = setup.getMgmtSvc().getAccessTokenForAdminUser( user.getUuid(), 0 );
+        String token = setup.getMgmtSvc().getAccessTokenForAdminUser( organization.getOwner().getUuid(), 0 );
         assertNotNull( token );
 
         AuthPrincipalInfo principal =
                 ( ( ManagementServiceImpl ) setup.getMgmtSvc() ).getPrincipalFromAccessToken( token, null, null );
         assertNotNull( principal );
-        assertEquals( user.getUuid(), principal.getUuid() );
+        assertEquals( organization.getOwner().getUuid(), principal.getUuid() );
 
         UserInfo new_user = setup.getMgmtSvc()
                                  .createAdminUser(uniqueUsername(), "Test User", uniqueEmail(),

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/518b6799/stack/services/src/test/java/org/apache/usergrid/services/ApplicationsServiceIT.java
----------------------------------------------------------------------
diff --git a/stack/services/src/test/java/org/apache/usergrid/services/ApplicationsServiceIT.java b/stack/services/src/test/java/org/apache/usergrid/services/ApplicationsServiceIT.java
index a8b54bb..7c652ce 100644
--- a/stack/services/src/test/java/org/apache/usergrid/services/ApplicationsServiceIT.java
+++ b/stack/services/src/test/java/org/apache/usergrid/services/ApplicationsServiceIT.java
@@ -16,15 +16,15 @@
  */
 package org.apache.usergrid.services;
 
-
 import org.junit.Test;
 
-
-
-
 public class ApplicationsServiceIT extends AbstractServiceIT {
+
     @Test
     public void testPermissions() throws Exception {
+
+        clearShiroSubject.clear();
+
         app.createRole( "manager", null, 0 );
         app.createRole( "member", null, 0 );
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/518b6799/stack/test-utils/src/main/java/org/apache/usergrid/cassandra/ClearShiroSubject.java
----------------------------------------------------------------------
diff --git a/stack/test-utils/src/main/java/org/apache/usergrid/cassandra/ClearShiroSubject.java b/stack/test-utils/src/main/java/org/apache/usergrid/cassandra/ClearShiroSubject.java
index e24afe4..50d01c8 100644
--- a/stack/test-utils/src/main/java/org/apache/usergrid/cassandra/ClearShiroSubject.java
+++ b/stack/test-utils/src/main/java/org/apache/usergrid/cassandra/ClearShiroSubject.java
@@ -22,6 +22,8 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.mgt.*;
+import org.apache.shiro.mgt.SecurityManager;
 import org.apache.shiro.subject.Subject;
 import org.apache.shiro.subject.support.SubjectThreadState;
 
@@ -37,11 +39,27 @@ public class ClearShiroSubject extends ExternalResource {
         Subject subject = SecurityUtils.getSubject();
 
         if ( subject == null ) {
+
             LOG.info( "Shiro Subject was null. No need to clear." );
             return;
         }
 
         new SubjectThreadState( subject ).clear();
+
         LOG.info( "Shiro Subject was NOT null. Subject has been cleared." );
     }
+
+    public void clear(){
+        Subject subject = SecurityUtils.getSubject();
+
+        if ( subject == null ) {
+
+            LOG.info( "Shiro Subject was null. No need to clear manually." );
+            return;
+        }
+
+        new SubjectThreadState( subject ).clear();
+
+        LOG.info( "Shiro Subject was NOT null. Subject has been cleared manually." );
+    }
 }


[15/25] incubator-usergrid git commit: First pass at arquillian remote. Tomcat will need to be configured.

Posted by sn...@apache.org.
First pass at arquillian remote.  Tomcat will need to be configured.


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

Branch: refs/heads/app-rebuild-fix
Commit: 2ec6407be4d620f5b570d49452ccadb7d7e50f36
Parents: 3b85da7
Author: Todd Nine <tn...@apigee.com>
Authored: Wed Feb 18 11:18:11 2015 -0800
Committer: Todd Nine <tn...@apigee.com>
Committed: Wed Feb 18 11:18:11 2015 -0800

----------------------------------------------------------------------
 stack/rest/README.md                            | 11 ++++++++++
 stack/rest/pom.xml                              | 17 ++++++++++-----
 .../apache/usergrid/rest/AbstractRestIT.java    |  9 ++++----
 .../test/resource2point0/AbstractRestIT.java    | 22 +++++++++++++++++++
 stack/rest/src/test/resources/arquillian.xml    | 23 +++++++++++++++-----
 5 files changed, 68 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/2ec6407b/stack/rest/README.md
----------------------------------------------------------------------
diff --git a/stack/rest/README.md b/stack/rest/README.md
index e6016fb..33f9469 100644
--- a/stack/rest/README.md
+++ b/stack/rest/README.md
@@ -82,6 +82,17 @@ To test, add the following configuration to the TOMCAT_HOME/conf/tomcat-users.xm
 
 See the [documentation here](https://docs.jboss.org/author/display/ARQ/Tomcat+7.0+-+Managed) for more setup information.
 
+Also, you will need to set the runtime to allow JMX deployments.  [Add the following](https://docs.jboss.org/author/display/ARQ/Tomcat+7.0+-+Remote) java runtime options to your tomcat instance.
+
+
+```
+JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=8089 "
+JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false "
+JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"
+```
+
+
+
 
 Add the following properties to you maven settings.xml
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/2ec6407b/stack/rest/pom.xml
----------------------------------------------------------------------
diff --git a/stack/rest/pom.xml b/stack/rest/pom.xml
index d94c9e2..e6113bc 100644
--- a/stack/rest/pom.xml
+++ b/stack/rest/pom.xml
@@ -84,12 +84,19 @@
            <!--</dependency>-->
 
                 <!-- managed -->
+                <!--<dependency>-->
+                      <!--<groupId>org.jboss.arquillian.container</groupId>-->
+                      <!--<artifactId>arquillian-tomcat-managed-7</artifactId>-->
+                      <!--<version>1.0.0.CR7</version>-->
+                      <!--<scope>test</scope>-->
+                    <!--</dependency>-->
+
+                <!-- remote -->
                 <dependency>
-                      <groupId>org.jboss.arquillian.container</groupId>
-                      <artifactId>arquillian-tomcat-managed-7</artifactId>
-                      <version>1.0.0.CR7</version>
-                      <scope>test</scope>
-                    </dependency>
+                    <groupId>org.jboss.arquillian.container</groupId>
+                    <artifactId>arquillian-tomcat-remote-7</artifactId>
+                    <version>1.0.0.CR7</version>
+                </dependency>
 
             </dependencies>
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/2ec6407b/stack/rest/src/test/java/org/apache/usergrid/rest/AbstractRestIT.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/java/org/apache/usergrid/rest/AbstractRestIT.java b/stack/rest/src/test/java/org/apache/usergrid/rest/AbstractRestIT.java
index f1536b5..095c44a 100644
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/AbstractRestIT.java
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/AbstractRestIT.java
@@ -81,6 +81,8 @@ public abstract class AbstractRestIT extends JerseyTest {
 
     protected static final AppDescriptor descriptor;
 
+    //TODO, this needs removed.  Instead we need to hook into the arquillian event lifecycle
+    //to invoke /system/database/setup from the REST tier.
     public static ITSetup setup = new ITSetup(  );
 
     //private static final URI baseURI = setup.getBaseURI();
@@ -102,7 +104,7 @@ public abstract class AbstractRestIT extends JerseyTest {
 
 
     //We set testable = false so we deploy the archive to the server and test it locally
-    @Deployment(testable = false)
+    @Deployment( testable = false )
     public static WebArchive createTestArchive() {
 
         //we use the MavenImporter from shrinkwrap to just produce whatever maven would build then test with it
@@ -111,9 +113,8 @@ public abstract class AbstractRestIT extends JerseyTest {
 
         System.setProperty( "org.apache.maven.offline", "true" );
 
-      return  ShrinkWrap.create(MavenImporter.class)
-          .loadPomFromFile("pom.xml", "arquillian-tomcat" ).importBuildOutput().as(WebArchive.class);
-
+        return ShrinkWrap.create( MavenImporter.class ).loadPomFromFile( "pom.xml", "arquillian-tomcat" )
+                         .importBuildOutput().as( WebArchive.class );
     }
 
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/2ec6407b/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/AbstractRestIT.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/AbstractRestIT.java b/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/AbstractRestIT.java
index 78fe11e..cdba34c 100644
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/AbstractRestIT.java
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/AbstractRestIT.java
@@ -21,7 +21,13 @@ import java.net.URI;
 import java.net.URLClassLoader;
 import java.util.Arrays;
 
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.jboss.shrinkwrap.resolver.api.maven.archive.importer.MavenImporter;
 import org.junit.Rule;
+import org.junit.runner.RunWith;
 
 import org.apache.usergrid.rest.ITSetup;
 import org.apache.usergrid.rest.test.resource2point0.endpoints.ApplicationsResource;
@@ -50,6 +56,7 @@ import static org.junit.Assert.assertEquals;
 /**
  * How would we get the client from here
  */
+@RunWith( Arquillian.class )
 public class AbstractRestIT extends JerseyTest {
 
     private static ClientConfig clientConfig = new DefaultClientConfig();
@@ -78,6 +85,21 @@ public class AbstractRestIT extends JerseyTest {
         dumpClasspath( AbstractRestIT.class.getClassLoader() );
     }
 
+
+    //We set testable = false so we deploy the archive to the server and test it locally
+    @Deployment( testable = false )
+    public static WebArchive createTestArchive() {
+
+        //we use the MavenImporter from shrinkwrap to just produce whatever maven would build then test with it
+
+        //set maven to be in offline mode
+
+        System.setProperty( "org.apache.maven.offline", "true" );
+
+        return ShrinkWrap.create( MavenImporter.class ).loadPomFromFile( "pom.xml", "arquillian-tomcat" )
+                         .importBuildOutput().as( WebArchive.class );
+    }
+
     public static void dumpClasspath( ClassLoader loader ) {
         System.out.println( "Classloader " + loader + ":" );
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/2ec6407b/stack/rest/src/test/resources/arquillian.xml
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/resources/arquillian.xml b/stack/rest/src/test/resources/arquillian.xml
index 49b43f4..d73395e 100644
--- a/stack/rest/src/test/resources/arquillian.xml
+++ b/stack/rest/src/test/resources/arquillian.xml
@@ -29,19 +29,32 @@
     <!--</configuration>-->
     <!--</container>-->
 
+    <!--<container qualifier="tomcat" default="true">-->
+        <!--<configuration>-->
+            <!--<property name="bindHttpPort">8080</property>-->
+            <!--<property name="bindAddress">localhost</property>-->
+            <!--<property name="javaVmArguments">-Xmx512m -XX:MaxPermSize=128m</property>-->
+            <!--<property name="catalinaHome">${catalina.home}</property>-->
+            <!--<property name="user">usergrid</property>-->
+            <!--<property name="pass">testpassword</property>-->
+            <!--&lt;!&ndash;This is a workaround for this issue https://issues.jboss.org/browse/ARQ-1814&ndash;&gt;-->
+            <!--<property name="catalinaBase">${catalina.home}</property>-->
+            <!--<property name="allowConnectingToRunningServer">true</property>-->
+        <!--</configuration>-->
+    <!--</container>-->
+
+
     <container qualifier="tomcat" default="true">
         <configuration>
-            <property name="bindHttpPort">8080</property>
-            <property name="bindAddress">localhost</property>
-            <property name="javaVmArguments">-Xmx512m -XX:MaxPermSize=128m</property>
-            <property name="catalinaHome">${catalina.home}</property>
+            <property name="host">${catalina.host}</property>
             <property name="user">usergrid</property>
             <property name="pass">testpassword</property>
             <!--This is a workaround for this issue https://issues.jboss.org/browse/ARQ-1814-->
             <property name="catalinaBase">${catalina.home}</property>
-            <property name="allowConnectingToRunningServer">true</property>
+            <property name="jmxPort">${catalina.jmx.port}</property>
         </configuration>
     </container>
 
+
 </arquillian>
 


[16/25] incubator-usergrid git commit: Merge branch 'USERGRID-273' of https://git-wip-us.apache.org/repos/asf/incubator-usergrid into USERGRID-273

Posted by sn...@apache.org.
Merge branch 'USERGRID-273' of https://git-wip-us.apache.org/repos/asf/incubator-usergrid into USERGRID-273


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

Branch: refs/heads/app-rebuild-fix
Commit: 399d60e773f49e91dabe5caaa4e8e7ee218aea8c
Parents: 2ec6407 d87577e
Author: Todd Nine <tn...@apigee.com>
Authored: Wed Feb 18 11:18:19 2015 -0800
Committer: Todd Nine <tn...@apigee.com>
Committed: Wed Feb 18 11:18:19 2015 -0800

----------------------------------------------------------------------
 .../src/main/groovy/configure_usergrid.groovy   |  2 +-
 .../entities/FailedImportEntity.java            | 11 +---
 .../datagenerators/EntityDataGenerator.scala    | 17 +++---
 .../datagenerators/FeederGenerator.scala        | 24 ++++++++-
 .../usergrid/scenarios/EntityScenarios.scala    | 20 ++++---
 .../org/apache/usergrid/settings/Settings.scala |  2 +
 .../PostCustomEntitySimulation.scala            | 27 ++++++++--
 stack/mongo-emulator/pom.xml                    | 15 +-----
 stack/pom.xml                                   | 47 ++++-------------
 .../rest/management/OrganizationsIT.java        |  2 +-
 .../management/importer/ImportServiceImpl.java  |  5 +-
 .../usergrid/management/OrganizationIT.java     | 30 +++++------
 .../importer/FileImportTrackerTest.java         | 55 ++++++++------------
 .../management/importer/ImportCollectionIT.java | 49 ++++++++++-------
 .../services/ApplicationsServiceIT.java         |  8 +--
 .../usergrid/cassandra/ClearShiroSubject.java   | 18 +++++++
 16 files changed, 176 insertions(+), 156 deletions(-)
----------------------------------------------------------------------



[20/25] incubator-usergrid git commit: Merge branch 'USERGRID-273' of https://git-wip-us.apache.org/repos/asf/incubator-usergrid into USERGRID-273

Posted by sn...@apache.org.
Merge branch 'USERGRID-273' of https://git-wip-us.apache.org/repos/asf/incubator-usergrid into USERGRID-273


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

Branch: refs/heads/app-rebuild-fix
Commit: c6a96a86daf0a19f913fcbd881b3af6eb1c70537
Parents: 14051bc 072fab4
Author: Todd Nine <tn...@apigee.com>
Authored: Wed Feb 18 11:32:58 2015 -0800
Committer: Todd Nine <tn...@apigee.com>
Committed: Wed Feb 18 11:32:58 2015 -0800

----------------------------------------------------------------------
 stack/pom.xml                                         | 14 ++++++--------
 .../management/importer/ImportCollectionIT.java       |  2 +-
 2 files changed, 7 insertions(+), 9 deletions(-)
----------------------------------------------------------------------



[06/25] incubator-usergrid git commit: Fix ExportServiceIT, move to JClouds 1.8.0 because old JClouds does not work with Guava 18.

Posted by sn...@apache.org.
Fix ExportServiceIT, move to JClouds 1.8.0 because old JClouds does not work with Guava 18.


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

Branch: refs/heads/app-rebuild-fix
Commit: 32d52c348abb2f9588bd6c7db2ccc2d5750359f8
Parents: eba86ee
Author: Dave Johnson <dm...@apigee.com>
Authored: Tue Feb 17 14:14:01 2015 -0500
Committer: Dave Johnson <dm...@apigee.com>
Committed: Tue Feb 17 14:14:01 2015 -0500

----------------------------------------------------------------------
 stack/pom.xml                                   |   2 +-
 .../management/export/S3ExportImpl.java         |   6 +-
 .../management/importer/S3ImportImpl.java       |  28 ++-
 .../services/assets/data/BinaryStore.java       |   3 +-
 .../services/assets/data/S3BinaryStore.java     |  18 +-
 .../org/apache/usergrid/ServiceITSetupImpl.java |   1 +
 .../management/export/ExportServiceIT.java      | 183 ++++++++++++-------
 .../management/importer/ImportCollectionIT.java |  40 ++--
 .../usergrid/management/importer/S3Upload.java  |  18 +-
 .../src/test/resources/project.properties       |   1 +
 10 files changed, 193 insertions(+), 107 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/32d52c34/stack/pom.xml
----------------------------------------------------------------------
diff --git a/stack/pom.xml b/stack/pom.xml
index 3367317..60cdef4 100644
--- a/stack/pom.xml
+++ b/stack/pom.xml
@@ -102,7 +102,7 @@
       <hector-test-version>1.1-4</hector-test-version>
       <jackson-version>1.9.9</jackson-version>
       <jackson-2-version>2.3.3</jackson-2-version>
-      <jclouds.version>1.6.2-incubating</jclouds.version>
+      <jclouds.version>1.8.0</jclouds.version>
       <jersey-version>1.18.1</jersey-version>
       <junit-version>4.12</junit-version>
       <log4j-version>1.2.16</log4j-version>

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/32d52c34/stack/services/src/main/java/org/apache/usergrid/management/export/S3ExportImpl.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/management/export/S3ExportImpl.java b/stack/services/src/main/java/org/apache/usergrid/management/export/S3ExportImpl.java
index 006d838..4fff7c7 100644
--- a/stack/services/src/main/java/org/apache/usergrid/management/export/S3ExportImpl.java
+++ b/stack/services/src/main/java/org/apache/usergrid/management/export/S3ExportImpl.java
@@ -19,6 +19,8 @@ package org.apache.usergrid.management.export;
 
 import com.amazonaws.SDKGlobalConfiguration;
 import com.google.common.collect.ImmutableSet;
+import com.google.common.hash.Hashing;
+import com.google.common.io.Files;
 import com.google.inject.Module;
 import org.jclouds.ContextBuilder;
 import org.jclouds.blobstore.BlobStore;
@@ -81,8 +83,8 @@ public class S3ExportImpl implements S3Export {
         try {
             BlobStore blobStore = context.getBlobStore();
             BlobBuilder blobBuilder = blobStore.blobBuilder( filename )
-                .payload(ephemeral)
-                .calculateMD5()
+                .payload( ephemeral )
+                .contentMD5(Files.hash( ephemeral, Hashing.md5() ))
                 .contentType("application/json");
             Blob blob = blobBuilder.build();
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/32d52c34/stack/services/src/main/java/org/apache/usergrid/management/importer/S3ImportImpl.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/management/importer/S3ImportImpl.java b/stack/services/src/main/java/org/apache/usergrid/management/importer/S3ImportImpl.java
index f10eea9..d147fd7 100644
--- a/stack/services/src/main/java/org/apache/usergrid/management/importer/S3ImportImpl.java
+++ b/stack/services/src/main/java/org/apache/usergrid/management/importer/S3ImportImpl.java
@@ -20,6 +20,7 @@ package org.apache.usergrid.management.importer;
 import com.amazonaws.SDKGlobalConfiguration;
 import com.google.common.collect.ImmutableSet;
 import com.google.inject.Module;
+import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang.RandomStringUtils;
 import org.apache.lucene.document.StringField;
 import org.jclouds.ContextBuilder;
@@ -36,10 +37,8 @@ import org.jclouds.netty.config.NettyPayloadModule;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
+import java.io.*;
+import java.nio.file.Files;
 import java.util.*;
 
 
@@ -75,13 +74,22 @@ public class S3ImportImpl implements S3Import {
             throw new RuntimeException(
                 "Blob file name " + blobFileName + " not found in bucket " + bucketName );
         }
-        File tempFile = File.createTempFile( bucketName, RandomStringUtils.randomAlphabetic(10));
-        FileOutputStream fop = new FileOutputStream(tempFile);
-        blob.getPayload().writeTo(fop);
-        fop.close();
-        tempFile.deleteOnExit();
 
-        return tempFile;
+        FileOutputStream fop = null;
+        File tempFile;
+        try {
+            tempFile = File.createTempFile(bucketName, RandomStringUtils.randomAlphabetic(10));
+            tempFile.deleteOnExit();
+            fop = new FileOutputStream(tempFile);
+            InputStream is = blob.getPayload().openStream();
+            IOUtils.copyLarge(is, fop);
+            return tempFile;
+
+        } finally {
+            if ( fop != null ) {
+                fop.close();
+            }
+        }
     }
 
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/32d52c34/stack/services/src/main/java/org/apache/usergrid/services/assets/data/BinaryStore.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/services/assets/data/BinaryStore.java b/stack/services/src/main/java/org/apache/usergrid/services/assets/data/BinaryStore.java
index 904cedb..5ed2918 100644
--- a/stack/services/src/main/java/org/apache/usergrid/services/assets/data/BinaryStore.java
+++ b/stack/services/src/main/java/org/apache/usergrid/services/assets/data/BinaryStore.java
@@ -19,6 +19,7 @@ package org.apache.usergrid.services.assets.data;
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.security.NoSuchAlgorithmException;
 import java.util.UUID;
 
 import org.apache.usergrid.persistence.Entity;
@@ -30,7 +31,7 @@ public interface BinaryStore {
      * writes the inputStream to the store and updates the entity's file-metadata field. however, it doesn't persistent
      * the entity.
      */
-    void write( UUID appId, Entity entity, InputStream inputStream ) throws IOException;
+    void write( UUID appId, Entity entity, InputStream inputStream ) throws IOException, NoSuchAlgorithmException;
 
     /** read the entity's file data from the store */
     InputStream read( UUID appId, Entity entity ) throws IOException;

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/32d52c34/stack/services/src/main/java/org/apache/usergrid/services/assets/data/S3BinaryStore.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/services/assets/data/S3BinaryStore.java b/stack/services/src/main/java/org/apache/usergrid/services/assets/data/S3BinaryStore.java
index e1748d3..90bd24f 100644
--- a/stack/services/src/main/java/org/apache/usergrid/services/assets/data/S3BinaryStore.java
+++ b/stack/services/src/main/java/org/apache/usergrid/services/assets/data/S3BinaryStore.java
@@ -24,11 +24,17 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
 import java.util.Map;
 import java.util.UUID;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
+import com.google.common.hash.HashCode;
+import com.google.common.hash.HashFunction;
+import com.google.common.hash.Hashing;
+import com.google.common.io.Files;
 import org.jclouds.ContextBuilder;
 import org.jclouds.blobstore.AsyncBlobStore;
 import org.jclouds.blobstore.BlobStore;
@@ -117,8 +123,10 @@ public class S3BinaryStore implements BinaryStore {
         if ( written < FIVE_MB ) { // total smaller than 5mb
 
             BlobStore blobStore = getContext().getBlobStore();
-            BlobBuilder.PayloadBlobBuilder bb =
-                    blobStore.blobBuilder( uploadFileName ).payload( data ).calculateMD5().contentType( mimeType );
+            BlobBuilder.PayloadBlobBuilder bb = blobStore.blobBuilder(uploadFileName)
+                .payload(data)
+                .contentMD5(Hashing.md5().newHasher().putBytes( data ).hash())
+                .contentType(mimeType);
 
             fileMetadata.put( AssetUtils.CONTENT_LENGTH, written );
             if ( fileMetadata.get( AssetUtils.CONTENT_DISPOSITION ) != null ) {
@@ -149,8 +157,10 @@ public class S3BinaryStore implements BinaryStore {
                 IOUtils.closeQuietly( os );
             }
 
-            BlobBuilder.PayloadBlobBuilder bb =
-                    blobStore.blobBuilder( uploadFileName ).payload( tempFile ).calculateMD5().contentType( mimeType );
+            BlobBuilder.PayloadBlobBuilder bb = blobStore.blobBuilder( uploadFileName )
+                .payload(tempFile)
+                .contentMD5(Files.hash(tempFile, Hashing.md5()))
+                .contentType(mimeType);
 
             fileMetadata.put( AssetUtils.CONTENT_LENGTH, written );
             if ( fileMetadata.get( AssetUtils.CONTENT_DISPOSITION ) != null ) {

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/32d52c34/stack/services/src/test/java/org/apache/usergrid/ServiceITSetupImpl.java
----------------------------------------------------------------------
diff --git a/stack/services/src/test/java/org/apache/usergrid/ServiceITSetupImpl.java b/stack/services/src/test/java/org/apache/usergrid/ServiceITSetupImpl.java
index c466080..cb7040b 100644
--- a/stack/services/src/test/java/org/apache/usergrid/ServiceITSetupImpl.java
+++ b/stack/services/src/test/java/org/apache/usergrid/ServiceITSetupImpl.java
@@ -66,6 +66,7 @@ public class ServiceITSetupImpl extends CoreITSetupImpl implements ServiceITSetu
         properties = springResource.getBean( "properties", Properties.class );
         smf = springResource.getBean( ServiceManagerFactory.class );
         exportService = springResource.getBean( ExportService.class );
+        importService = springResource.getBean( ImportService.class );
 
         //set our security manager for shiro
         SecurityUtils.setSecurityManager(springResource.getBean( org.apache.shiro.mgt.SecurityManager.class ));

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/32d52c34/stack/services/src/test/java/org/apache/usergrid/management/export/ExportServiceIT.java
----------------------------------------------------------------------
diff --git a/stack/services/src/test/java/org/apache/usergrid/management/export/ExportServiceIT.java b/stack/services/src/test/java/org/apache/usergrid/management/export/ExportServiceIT.java
index 852f2d1..3a6d8f9 100644
--- a/stack/services/src/test/java/org/apache/usergrid/management/export/ExportServiceIT.java
+++ b/stack/services/src/test/java/org/apache/usergrid/management/export/ExportServiceIT.java
@@ -22,6 +22,8 @@ import java.io.File;
 import java.io.FileReader;
 import java.util.*;
 
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.common.util.concurrent.Service;
 import org.apache.commons.lang.RandomStringUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -33,8 +35,6 @@ import org.jclouds.blobstore.domain.Blob;
 import org.jclouds.http.config.JavaUrlHttpCommandExecutorServiceModule;
 import org.jclouds.logging.log4j.config.Log4JLoggingModule;
 import org.jclouds.netty.config.NettyPayloadModule;
-import org.json.simple.JSONObject;
-import org.json.simple.parser.JSONParser;
 import org.junit.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -43,7 +43,6 @@ import org.apache.usergrid.NewOrgAppAdminRule;
 import org.apache.usergrid.ServiceITSetup;
 import org.apache.usergrid.ServiceITSetupImpl;
 import org.apache.usergrid.batch.JobExecution;
-import org.apache.usergrid.cassandra.SpringResource;
 import org.apache.usergrid.cassandra.ClearShiroSubject;
 
 import org.apache.usergrid.management.ApplicationInfo;
@@ -53,7 +52,6 @@ import org.apache.usergrid.persistence.Entity;
 import org.apache.usergrid.persistence.EntityManager;
 import org.apache.usergrid.persistence.SimpleEntityRef;
 import org.apache.usergrid.persistence.entities.JobData;
-import org.apache.usergrid.persistence.index.impl.ElasticSearchResource;
 import org.apache.usergrid.setup.ConcurrentProcessSingleton;
 
 import com.amazonaws.SDKGlobalConfiguration;
@@ -103,10 +101,15 @@ public class ExportServiceIT {
         logger.info("in setup");
 
         // start the scheduler after we're all set up
-        JobSchedulerService jobScheduler = ConcurrentProcessSingleton.getInstance().getSpringResource().getBean( JobSchedulerService.class );
-        if ( jobScheduler.state() != Service.State.RUNNING ) {
-            jobScheduler.startAsync();
-            jobScheduler.awaitRunning();
+        try {
+
+            JobSchedulerService jobScheduler = ConcurrentProcessSingleton.getInstance().getSpringResource().getBean(JobSchedulerService.class);
+            if (jobScheduler.state() != Service.State.RUNNING) {
+                jobScheduler.startAsync();
+                jobScheduler.awaitRunning();
+            }
+        } catch ( Exception e ) {
+            logger.warn("Ignoring error starting jobScheduler, already started?", e);
         }
 
         adminUser = newOrgAppAdminRule.getAdminInfo();
@@ -194,30 +197,36 @@ public class ExportServiceIT {
 
         UUID exportUUID = exportService.schedule( payload );
 
-        JSONParser parser = new JSONParser();
+        TypeReference<HashMap<String,Object>> typeRef
+            = new TypeReference<HashMap<String,Object>>() {};
 
-        org.json.simple.JSONArray a = ( org.json.simple.JSONArray ) parser.parse( new FileReader( f ) );
-        //assertEquals(2, a.size() );
+        ObjectMapper mapper = new ObjectMapper();
+        HashMap<String,Object> jsonMap = mapper.readValue(new FileReader( f ), typeRef);
 
-        for ( indexCon = 0; indexCon < a.size(); indexCon++ ) {
-            JSONObject jObj = ( JSONObject ) a.get( indexCon );
-            JSONObject data = ( JSONObject ) jObj.get( "Metadata" );
-            String uuid = ( String ) data.get( "uuid" );
+        Map collectionsMap = (Map)jsonMap.get("collections");
+        List usersList = (List)collectionsMap.get("users");
+
+        int indexApp = 0;
+        for ( indexApp = 0; indexApp < usersList.size(); indexApp++ ) {
+            Map user = (Map)usersList.get( indexApp );
+            Map userProps = (Map)user.get("Metadata");
+            String uuid = ( String ) userProps.get( "uuid" );
             if ( entity[0].getUuid().toString().equals( uuid ) ) {
                 break;
             }
         }
 
-        org.json.simple.JSONObject objEnt = ( org.json.simple.JSONObject ) a.get( indexCon );
-        org.json.simple.JSONObject objConnections = ( org.json.simple.JSONObject ) objEnt.get( "connections" );
-
-        assertNotNull( objConnections );
+        assertTrue("Uuid was not found in exported files. ", indexApp < usersList.size());
 
-        org.json.simple.JSONArray objVibrations = ( org.json.simple.JSONArray ) objConnections.get( "Vibrations" );
+        Map userMap = (Map)usersList.get( indexApp );
+        Map connectionsMap = (Map)userMap.get("connections");
+        assertNotNull( connectionsMap );
 
-        assertNotNull( objVibrations );
+        List vibrationsList = (List)connectionsMap.get( "Vibrations" );
 
+        assertNotNull( vibrationsList );
 
+        f.deleteOnExit();
     }
 
 
@@ -279,31 +288,34 @@ public class ExportServiceIT {
 
         exportService.doExport( jobExecution );
 
-        JSONParser parser = new JSONParser();
+        TypeReference<HashMap<String,Object>> typeRef
+            = new TypeReference<HashMap<String,Object>>() {};
 
-        org.json.simple.JSONArray a = ( org.json.simple.JSONArray ) parser.parse( new FileReader( f ) );
-        int indexApp = 0;
+        ObjectMapper mapper = new ObjectMapper();
+        HashMap<String,Object> jsonMap = mapper.readValue(new FileReader( f ), typeRef);
+
+        Map collectionsMap = (Map)jsonMap.get("collections");
+        List usersList = (List)collectionsMap.get("users");
 
-        for ( indexApp = 0; indexApp < a.size(); indexApp++ ) {
-            JSONObject jObj = ( JSONObject ) a.get( indexApp );
-            JSONObject data = ( JSONObject ) jObj.get( "Metadata" );
-            String uuid = ( String ) data.get( "uuid" );
+        int indexApp = 0;
+        for ( indexApp = 0; indexApp < usersList.size(); indexApp++ ) {
+            Map user = (Map)usersList.get( indexApp );
+            Map userProps = (Map)user.get("Metadata");
+            String uuid = ( String ) userProps.get( "uuid" );
             if ( entity[0].getUuid().toString().equals( uuid ) ) {
                 break;
             }
         }
 
-       assertTrue( "Uuid was not found in exported files. ", indexApp < a.size() );
-
+        assertTrue("Uuid was not found in exported files. ", indexApp < usersList.size());
 
-        org.json.simple.JSONObject objEnt = ( org.json.simple.JSONObject ) a.get( indexApp );
-        org.json.simple.JSONObject objConnections = ( org.json.simple.JSONObject ) objEnt.get( "connections" );
+        Map userMap = (Map)usersList.get( indexApp );
+        Map connectionsMap = (Map)userMap.get("connections");
+        assertNotNull( connectionsMap );
 
-        assertNotNull( objConnections );
+        List vibrationsList = (List)connectionsMap.get( "Vibrations" );
 
-        org.json.simple.JSONArray objVibrations = ( org.json.simple.JSONArray ) objConnections.get( "Vibrations" );
-
-        assertNotNull( objVibrations );
+        assertNotNull( vibrationsList );
 
         f.deleteOnExit();
     }
@@ -351,16 +363,20 @@ public class ExportServiceIT {
 
         exportService.doExport( jobExecution );
 
-        JSONParser parser = new JSONParser();
+        TypeReference<HashMap<String,Object>> typeRef
+            = new TypeReference<HashMap<String,Object>>() {};
+
+        ObjectMapper mapper = new ObjectMapper();
+        Map<String,Object> jsonMap = mapper.readValue(new FileReader( f ), typeRef);
 
-        org.json.simple.JSONArray a = ( org.json.simple.JSONArray ) parser.parse( new FileReader( f ) );
+        Map collectionsMap = (Map)jsonMap.get("collections");
+        String collectionName = (String)collectionsMap.keySet().iterator().next();
+        List collection = (List)collectionsMap.get(collectionName);
 
-        assertEquals( 3, a.size() );
-        for ( int i = 0; i < a.size(); i++ ) {
-            org.json.simple.JSONObject entity = ( org.json.simple.JSONObject ) a.get( i );
-            org.json.simple.JSONObject entityData = ( JSONObject ) entity.get( "Metadata" );
-            String entityName = ( String ) entityData.get( "name" );
-            // assertNotEquals( "NotEqual","junkRealName",entityName );
+        for ( Object o : collection ) {
+            Map entityMap = (Map)o;
+            Map metadataMap = (Map)entityMap.get("Metadata");
+            String entityName = (String)metadataMap.get("name");
             assertFalse( "junkRealName".equals( entityName ) );
         }
         f.deleteOnExit();
@@ -422,15 +438,20 @@ public class ExportServiceIT {
 
         exportService.doExport( jobExecution );
 
-        JSONParser parser = new JSONParser();
+        TypeReference<HashMap<String,Object>> typeRef
+            = new TypeReference<HashMap<String,Object>>() {};
+
+        ObjectMapper mapper = new ObjectMapper();
+        Map<String,Object> jsonMap = mapper.readValue(new FileReader( f ), typeRef);
 
-        org.json.simple.JSONArray a = ( org.json.simple.JSONArray ) parser.parse( new FileReader( f ) );
+        Map collectionsMap = (Map)jsonMap.get("collections");
+        String collectionName = (String)collectionsMap.keySet().iterator().next();
+        List collection = (List)collectionsMap.get(collectionName);
 
-        //assertEquals( 3 , a.size() );
-        for ( int i = 0; i < a.size(); i++ ) {
-            org.json.simple.JSONObject data = ( org.json.simple.JSONObject ) a.get( i );
-            org.json.simple.JSONObject entityData = ( JSONObject ) data.get( "Metadata" );
-            String entityName = ( String ) entityData.get( "name" );
+        for ( Object o : collection ) {
+            Map entityMap = (Map)o;
+            Map metadataMap = (Map)entityMap.get("Metadata");
+            String entityName = (String)metadataMap.get("name");
             assertFalse( "junkRealName".equals( entityName ) );
         }
     }
@@ -485,14 +506,20 @@ public class ExportServiceIT {
 
         exportService.doExport( jobExecution );
 
-        JSONParser parser = new JSONParser();
+        TypeReference<HashMap<String,Object>> typeRef
+            = new TypeReference<HashMap<String,Object>>() {};
+
+        ObjectMapper mapper = new ObjectMapper();
+        Map<String,Object> jsonMap = mapper.readValue(new FileReader( f ), typeRef);
+
+        Map collectionsMap = (Map)jsonMap.get("collections");
+        String collectionName = (String)collectionsMap.keySet().iterator().next();
+        List collection = (List)collectionsMap.get( collectionName );
 
-        org.json.simple.JSONArray a = ( org.json.simple.JSONArray ) parser.parse( new FileReader( f ) );
-        assertEquals( 1, a.size() );
-        for ( int i = 0; i < a.size(); i++ ) {
-            org.json.simple.JSONObject data = ( org.json.simple.JSONObject ) a.get( i );
-            org.json.simple.JSONObject entityData = ( JSONObject ) data.get( "Metadata" );
-            String entityName = ( String ) entityData.get( "name" );
+        for ( Object o : collection ) {
+            Map entityMap = (Map)o;
+            Map metadataMap = (Map)entityMap.get("Metadata");
+            String entityName = (String)metadataMap.get("name");
             assertFalse( "junkRealName".equals( entityName ) );
         }
     }
@@ -515,6 +542,7 @@ public class ExportServiceIT {
         f.deleteOnExit();
 
         EntityManager em = setup.getEmf().getEntityManager( applicationId );
+
         // em.createApplicationCollection( "qtsMagics" );
         // intialize user object to be posted
         Map<String, Object> userProperties = null;
@@ -549,11 +577,17 @@ public class ExportServiceIT {
 
         exportService.doExport( jobExecution );
 
-        JSONParser parser = new JSONParser();
+        TypeReference<HashMap<String,Object>> typeRef
+            = new TypeReference<HashMap<String,Object>>() {};
+
+        ObjectMapper mapper = new ObjectMapper();
+        HashMap<String,Object> jsonMap = mapper.readValue(new FileReader( f ), typeRef);
 
-        org.json.simple.JSONArray a = ( org.json.simple.JSONArray ) parser.parse( new FileReader( f ) );
+        Map collectionsMap = (Map)jsonMap.get("collections");
+        String collectionName = (String)collectionsMap.keySet().iterator().next();
+        List collection = (List)collectionsMap.get( collectionName );
 
-        assertEquals( entitiesToCreate, a.size() );
+        assertEquals(entitiesToCreate, collection.size());
     }
 
 
@@ -611,16 +645,22 @@ public class ExportServiceIT {
 
         exportService.doExport( jobExecution );
 
-        JSONParser parser = new JSONParser();
+        TypeReference<HashMap<String,Object>> typeRef
+            = new TypeReference<HashMap<String,Object>>() {};
+
+        ObjectMapper mapper = new ObjectMapper();
+        Map<String,Object> jsonMap = mapper.readValue(new FileReader( f ), typeRef);
 
-        org.json.simple.JSONArray a = ( org.json.simple.JSONArray ) parser.parse( new FileReader( f ) );
+        Map collectionsMap = (Map)jsonMap.get("collections");
+        String collectionName = (String)collectionsMap.keySet().iterator().next();
+        List collectionList = (List)collectionsMap.get( collectionName );
 
-        // only one entity should match the query.
-        assertEquals( 1, a.size() );
+        assertEquals(1, collectionList.size());
     }
 
 
     @Test
+    @Ignore("this is a meaningless test because our export format does not support export of organizations")
     public void testExportOneOrganization() throws Exception {
 
         // create a bunch of organizations, each with applications and collections of entities
@@ -681,11 +721,16 @@ public class ExportServiceIT {
         File exportedFile = new File( exportFileName );
         exportedFile.deleteOnExit();
 
-        JSONParser parser = new JSONParser();
-        org.json.simple.JSONArray a = ( org.json.simple.JSONArray )
-            parser.parse( new FileReader( exportedFile ) );
+        TypeReference<HashMap<String,Object>> typeRef
+            = new TypeReference<HashMap<String,Object>>() {};
+
+        ObjectMapper mapper = new ObjectMapper();
+        Map<String,Object> jsonMap = mapper.readValue(new FileReader( exportedFile ), typeRef);
+        Map collectionsMap = (Map)jsonMap.get("collections");
+
+        List collectionList = (List)collectionsMap.get("users");
 
-        assertEquals( 23, a.size() );
+        assertEquals( 3, collectionList.size() );
     }
 
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/32d52c34/stack/services/src/test/java/org/apache/usergrid/management/importer/ImportCollectionIT.java
----------------------------------------------------------------------
diff --git a/stack/services/src/test/java/org/apache/usergrid/management/importer/ImportCollectionIT.java b/stack/services/src/test/java/org/apache/usergrid/management/importer/ImportCollectionIT.java
index e566512..c2e3161 100644
--- a/stack/services/src/test/java/org/apache/usergrid/management/importer/ImportCollectionIT.java
+++ b/stack/services/src/test/java/org/apache/usergrid/management/importer/ImportCollectionIT.java
@@ -18,6 +18,7 @@
 package org.apache.usergrid.management.importer;
 
 
+import java.io.File;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -97,8 +98,7 @@ public class ImportCollectionIT {
     public ClearShiroSubject clearShiroSubject = new ClearShiroSubject();
 
     @ClassRule
-    public static final ServiceITSetup setup =
-        new ServiceITSetupImpl(  );
+    public static final ServiceITSetup setup = new ServiceITSetupImpl(  );
 
     @Rule
     public NewOrgAppAdminRule newOrgAppAdminRule = new NewOrgAppAdminRule( setup );
@@ -110,7 +110,9 @@ public class ImportCollectionIT {
         bucketPrefix = System.getProperty( "bucketName" );
 
         // start the scheduler after we're all set up
-        JobSchedulerService jobScheduler = ConcurrentProcessSingleton.getInstance().getSpringResource().getBean( JobSchedulerService.class );
+        JobSchedulerService jobScheduler = ConcurrentProcessSingleton
+            .getInstance().getSpringResource().getBean( JobSchedulerService.class );
+
         if ( jobScheduler.state() != Service.State.RUNNING ) {
             jobScheduler.startAsync();
             jobScheduler.awaitRunning();
@@ -366,8 +368,12 @@ public class ImportCollectionIT {
 
         // export and upload a bad JSON file to the S3 bucket
 
+        File cwd = new File(".");
+        String basePath = System.getProperty("target.directory")
+            + File.separator + "test-classes" + File.separator;
+
         List<String> filenames = new ArrayList<>( 1 );
-        filenames.add( "testimport-bad-json.json");
+        filenames.add( basePath + "testimport-bad-json.json");
 
         S3Upload s3Upload = new S3Upload();
         s3Upload.copyToS3(
@@ -412,11 +418,16 @@ public class ImportCollectionIT {
 
         // upload good and badly formatted files to our S3 bucket
 
+        File cwd = new File(".");
+        String basePath = cwd.getAbsolutePath();
+        basePath = basePath.substring( 0 , basePath.length() - 1 );
+        basePath = basePath + "src" + File.separator + "test" + File.separator + "resource" + File.separator;
+
         List<String> filenames = new ArrayList<>( 3 );
-        filenames.add( "testimport-with-connections.json" );
-        filenames.add( "testimport-qtmagics.json" );
-        filenames.add( "testimport-bad-connection.json" );
-        filenames.add( "testimport-bad-json.json" );
+        filenames.add( basePath + "testimport-with-connections.json" );
+        filenames.add( basePath + "testimport-qtmagics.json" );
+        filenames.add( basePath + "testimport-bad-connection.json" );
+        filenames.add( basePath + "testimport-bad-json.json" );
 
         S3Upload s3Upload = new S3Upload();
         s3Upload.copyToS3(
@@ -481,11 +492,12 @@ public class ImportCollectionIT {
 
         ImportService importService = setup.getImportService();
 
-        Import importEntity = importService.schedule(em.getApplication().getUuid(),  new HashMap<String, Object>() {{
-            put( "path", organization.getName() + em.getApplication().getName() );
-            put( "organizationId", organization.getUuid() );
-            put( "applicationId", em.getApplication().getUuid() );
-            put( "properties", new HashMap<String, Object>() {{
+        Import importEntity = importService.schedule(em.getApplication().getUuid(),
+            new HashMap<String, Object>() {{
+                put( "path", organization.getName() + em.getApplication().getName() );
+                put( "organizationId", organization.getUuid() );
+                put( "applicationId", em.getApplication().getUuid() );
+                put( "properties", new HashMap<String, Object>() {{
                 put( "storage_provider", "s3" );
                 put( "storage_info", new HashMap<String, Object>() {{
                     put( "s3_access_id",
@@ -495,7 +507,7 @@ public class ImportCollectionIT {
                     put( "bucket_location", bucketName );
                 }} );
             }} );
-        }} );
+        }});
 
         int maxRetries = 30;
         int retries = 0;

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/32d52c34/stack/services/src/test/java/org/apache/usergrid/management/importer/S3Upload.java
----------------------------------------------------------------------
diff --git a/stack/services/src/test/java/org/apache/usergrid/management/importer/S3Upload.java b/stack/services/src/test/java/org/apache/usergrid/management/importer/S3Upload.java
index 5b639c2..c56ff66 100644
--- a/stack/services/src/test/java/org/apache/usergrid/management/importer/S3Upload.java
+++ b/stack/services/src/test/java/org/apache/usergrid/management/importer/S3Upload.java
@@ -17,12 +17,17 @@
 package org.apache.usergrid.management.importer;
 
 
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.InputStream;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
 
+import com.google.common.hash.Hashing;
+import com.google.common.io.Files;
 import org.jclouds.ContextBuilder;
 import org.jclouds.blobstore.BlobStore;
 import org.jclouds.blobstore.BlobStoreContext;
@@ -47,7 +52,8 @@ public class S3Upload {
 
     private static final Logger logger = LoggerFactory.getLogger( S3Upload.class );
 
-    public void copyToS3( String accessKey, String secretKey, String bucketName, List<String> filenames ) {
+    public void copyToS3( String accessKey, String secretKey, String bucketName, List<String> filenames )
+        throws FileNotFoundException {
 
         Properties overrides = new Properties();
         overrides.setProperty( "s3" + ".identity", accessKey );
@@ -77,16 +83,16 @@ public class S3Upload {
 
         Iterator<String> fileNameIterator = filenames.iterator();
 
-        while(fileNameIterator.hasNext()) {
+        while (fileNameIterator.hasNext()) {
 
             String filename = fileNameIterator.next();
-            InputStream fileStream = S3Upload.class.getResourceAsStream( "/" + filename );
-
+            File uploadFile = new File( filename );
+            
             try {
                 BlobStore blobStore = context.getBlobStore();
                 BlobBuilder blobBuilder = blobStore.blobBuilder( filename )
-                    .payload( fileStream )
-                    .calculateMD5()
+                    .payload( uploadFile )
+                    .contentMD5(Files.hash( uploadFile, Hashing.md5()))
                     .contentType( "application/json" );
                 Blob blob = blobBuilder.build();
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/32d52c34/stack/services/src/test/resources/project.properties
----------------------------------------------------------------------
diff --git a/stack/services/src/test/resources/project.properties b/stack/services/src/test/resources/project.properties
index 94ef3bd..d38e878 100644
--- a/stack/services/src/test/resources/project.properties
+++ b/stack/services/src/test/resources/project.properties
@@ -15,4 +15,5 @@
 # limitations under the License.
 
 target.directory=${project.build.directory}
+resources.dir=${project.build.directory}
 jamm.path=-javaagent:${settings.localRepository}/com/github/stephenc/jamm/0.2.5/jamm-0.2.5.jar