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/03/30 21:58:34 UTC

[30/50] incubator-usergrid git commit: Merge branch 'USERGRID-405' into USERGRID-448-appinfofix

Merge branch 'USERGRID-405' into USERGRID-448-appinfofix

Conflicts:
	stack/core/src/main/java/org/apache/usergrid/corepersistence/CoreModule.java
	stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java
	stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsEntityIndexImpl.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/c8fcf2de
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/c8fcf2de
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/c8fcf2de

Branch: refs/heads/two-dot-o-dev
Commit: c8fcf2de9cd3fe3fdbf4b480a4420062ee88d44b
Parents: 7d7c54b f1bf035
Author: Dave Johnson <dm...@apigee.com>
Authored: Thu Mar 19 17:10:00 2015 -0400
Committer: Dave Johnson <dm...@apigee.com>
Committed: Thu Mar 19 17:10:00 2015 -0400

----------------------------------------------------------------------
 .../main/dist/init_instance/init_rest_server.sh |   2 +
 .../dist/init_instance/install_elasticsearch.sh |  22 +-
 .../main/groovy/configure_elasticsearch.groovy  |  80 ++--
 .../src/main/groovy/configure_usergrid.groovy   |  12 +-
 stack/awscluster/ugcluster-cf.json              | 466 +++++++++++++------
 stack/core/pom.xml                              |  10 -
 .../batch/service/JobSchedulerService.java      |   5 -
 .../usergrid/corepersistence/CoreModule.java    |  20 +-
 .../corepersistence/CpEntityManager.java        |  64 ++-
 .../corepersistence/CpEntityManagerFactory.java |   5 -
 .../corepersistence/CpRelationManager.java      |  21 +-
 .../events/EntityDeletedHandler.java            |  58 ++-
 .../events/EntityVersionCreatedHandler.java     |  60 ++-
 .../events/EntityVersionDeletedHandler.java     |  55 ++-
 .../results/FilteringLoader.java                |  52 ++-
 .../usergrid/persistence/EntityManager.java     |  10 +-
 .../persistence/EntityManagerFactory.java       |   2 -
 .../cassandra/EntityManagerFactoryImpl.java     |   3 -
 .../cassandra/EntityManagerImpl.java            |  31 +-
 .../cassandra/RelationManagerImpl.java          |  58 +--
 .../cassandra/index/ConnectedIndexScanner.java  |   2 -
 .../cassandra/index/IndexBucketScanner.java     |   2 -
 .../corepersistence/StaleIndexCleanupTest.java  |  86 +++-
 .../usergrid/persistence/EntityManagerIT.java   |   1 +
 .../PerformanceEntityRebuildIndexTest.java      |   2 +
 .../collection/EntityCollectionManager.java     |  14 +-
 .../collection/EntityDeletedFactory.java        |  34 --
 .../collection/EntityVersionCleanupFactory.java |  35 --
 .../collection/EntityVersionCreatedFactory.java |  31 --
 .../persistence/collection/FieldSet.java        |  48 ++
 .../cache/CachedEntityCollectionManager.java    |  11 +-
 .../collection/guice/CollectionModule.java      |  11 +-
 .../EntityCollectionManagerFactoryImpl.java     |  30 +-
 .../impl/EntityCollectionManagerImpl.java       | 240 ++++++++--
 .../collection/impl/EntityDeletedTask.java      |   9 +-
 .../impl/EntityVersionCleanupTask.java          |  39 +-
 .../impl/EntityVersionTaskFactory.java          |  65 +++
 .../mvcc/stage/write/WriteUniqueVerify.java     | 140 +++---
 .../UniqueValueSerializationStrategy.java       |  12 +
 .../serialization/impl/MutableFieldSet.java     |  63 +++
 .../MvccEntitySerializationStrategyV1Impl.java  |   2 +-
 .../MvccEntitySerializationStrategyV3Impl.java  |   1 -
 .../UniqueValueSerializationStrategyImpl.java   |  27 +-
 .../migration/MvccEntityDataMigrationImpl.java  |   8 +-
 .../collection/util/EntityUtils.java            |   4 +-
 .../collection/EntityCollectionManagerIT.java   |  68 +++
 .../impl/EntityVersionCleanupTaskTest.java      |  13 +-
 .../mvcc/stage/write/WriteUniqueVerifyTest.java |   6 +-
 ...ntitySerializationStrategyProxyV1_3Test.java |   3 +
 ...ntitySerializationStrategyProxyV2_3Test.java |   3 +
 ...ccEntitySerializationStrategyV1ImplTest.java |   2 +
 .../core/astyanax/CassandraConfig.java          |   6 +
 .../core/astyanax/CassandraConfigImpl.java      |   8 +-
 .../persistence/core/astyanax/CassandraFig.java |   9 +-
 .../core/astyanax/MultiRowColumnIterator.java   |  12 +-
 .../persistence/core/future/BetterFuture.java   |  43 +-
 .../core/hystrix/HystrixCassandra.java          |  94 ----
 .../core/metrics/MetricsFactory.java            |   9 +
 .../core/metrics/MetricsFactoryImpl.java        | 121 +++--
 .../persistence/core/task/TaskExecutor.java     |   4 +-
 .../core/astyanax/ColumnNameIteratorTest.java   |   7 +-
 .../MultiKeyColumnNameIteratorTest.java         |   7 +-
 .../astyanax/MultiRowColumnIteratorTest.java    |   7 +-
 stack/corepersistence/graph/pom.xml             |  28 +-
 .../graph/impl/GraphManagerImpl.java            | 310 ++++++++++--
 .../graph/impl/stage/EdgeDeleteRepairImpl.java  |   9 +-
 .../graph/impl/stage/EdgeMetaRepairImpl.java    |  16 +-
 .../impl/stage/NodeDeleteListenerImpl.java      |  16 +-
 .../impl/GraphManagerFactoryImpl.java           |  17 +-
 .../impl/NodeSerializationImpl.java             |  36 +-
 .../shard/count/NodeShardApproximationImpl.java |   4 +-
 .../NodeShardCounterSerializationImpl.java      |  25 +-
 .../shard/impl/NodeShardAllocationImpl.java     |  16 +-
 .../shard/impl/ShardGroupCompactionImpl.java    |  64 +--
 .../usergrid/persistence/map/MapManager.java    |  14 +-
 .../persistence/map/impl/MapManagerImpl.java    |   8 +
 .../persistence/map/impl/MapSerialization.java  |   9 +
 .../map/impl/MapSerializationImpl.java          |  93 ++++
 .../persistence/map/MapManagerTest.java         |  49 +-
 stack/corepersistence/queryindex/pom.xml        |  17 +-
 .../usergrid/persistence/index/EntityIndex.java |  26 +-
 .../persistence/index/IndexBufferConsumer.java  |  11 +
 .../persistence/index/IndexBufferProducer.java  |   1 -
 .../usergrid/persistence/index/IndexFig.java    |  73 ++-
 .../index/IndexOperationMessage.java            | 115 ++++-
 .../persistence/index/guice/IndexModule.java    |   7 +
 .../persistence/index/guice/QueueProvider.java  | 116 +++++
 .../persistence/index/impl/BatchRequest.java    |  41 ++
 .../persistence/index/impl/BufferQueue.java     |  68 +++
 .../index/impl/BufferQueueInMemoryImpl.java     | 108 +++++
 .../index/impl/BufferQueueSQSImpl.java          | 307 ++++++++++++
 .../persistence/index/impl/DeIndexRequest.java  | 115 +++++
 .../index/impl/EsEntityIndexBatchImpl.java      |  64 ++-
 .../index/impl/EsEntityIndexImpl.java           | 349 +++++---------
 .../index/impl/EsIndexBufferConsumerImpl.java   | 286 ++++++++----
 .../index/impl/EsIndexBufferProducerImpl.java   |  16 +-
 .../persistence/index/impl/EsIndexCache.java    | 138 +++---
 .../persistence/index/impl/IndexRequest.java    | 125 +++++
 .../persistence/index/impl/IndexingUtils.java   | 109 +++--
 .../index/guice/TestIndexModule.java            |   3 +-
 .../index/impl/BufferQueueSQSImplTest.java      | 169 +++++++
 .../impl/EntityConnectionIndexImplTest.java     |   5 +-
 .../persistence/index/impl/EntityIndexTest.java |  58 +--
 .../persistence/index/impl/EsTestUtils.java     |  48 --
 .../persistence/queue/QueueManager.java         |   4 +-
 .../usergrid/persistence/queue/QueueScope.java  |   2 +-
 .../persistence/queue/QueueScopeFactory.java    |  34 --
 .../persistence/queue/guice/QueueModule.java    |  17 +-
 .../queue/impl/QueueScopeFactoryImpl.java       |  48 --
 .../persistence/queue/impl/QueueScopeImpl.java  |  27 +-
 .../queue/impl/SQSQueueManagerImpl.java         | 214 +++++----
 .../persistence/queue/NoAWSCredsRule.java       |  98 ++++
 .../persistence/queue/QueueManagerTest.java     |  29 +-
 stack/pom.xml                                   |  49 +-
 stack/rest/pom.xml                              |   4 -
 .../org/apache/usergrid/rest/RootResource.java  |   6 -
 .../applications/ApplicationsResource.java      |   6 -
 stack/services/pom.xml                          |  13 +-
 .../cassandra/ManagementServiceImpl.java        |   9 +-
 .../services/AbstractCollectionService.java     |  40 +-
 .../services/AbstractConnectionsService.java    |  39 +-
 .../notifications/NotificationsService.java     |  50 +-
 .../services/notifications/QueueListener.java   |   5 +-
 .../usergrid/services/queues/QueueListener.java |   5 +-
 .../notifications/NotifiersServiceIT.java       |   6 +
 stack/test-utils/pom.xml                        |   5 -
 126 files changed, 4188 insertions(+), 1986 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c8fcf2de/stack/core/src/main/java/org/apache/usergrid/batch/service/JobSchedulerService.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c8fcf2de/stack/core/src/main/java/org/apache/usergrid/corepersistence/CoreModule.java
----------------------------------------------------------------------
diff --cc stack/core/src/main/java/org/apache/usergrid/corepersistence/CoreModule.java
index adbc499,2e9b780..b62cdf8
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CoreModule.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CoreModule.java
@@@ -117,7 -117,7 +118,6 @@@ public class CoreModule  extends Abstra
  
          /**
           * Create our migrations for within our core plugin
--         *
           */
          Multibinder<DataMigration<EntityIdScope>> dataMigrationMultibinder =
                      Multibinder.newSetBinder( binder(), new TypeLiteral<DataMigration<EntityIdScope>>() {}, CoreMigration.class );
@@@ -129,14 -129,13 +129,10 @@@
          //wire up the collection migration plugin
          final Multibinder<MigrationPlugin> plugins = Multibinder.newSetBinder( binder(), MigrationPlugin.class );
          plugins.addBinding().to( CoreMigrationPlugin.class );
 -        plugins.addBinding().to(MigrationModuleVersionPlugin.class );
 +        plugins.addBinding().to( AppInfoMigrationPlugin.class );
 +        plugins.addBinding().to( MigrationModuleVersionPlugin.class );
  
          bind( AllApplicationsObservable.class).to(AllApplicationsObservableImpl.class);
--
--
--
--
      }
  
  

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c8fcf2de/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java
----------------------------------------------------------------------
diff --cc stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java
index efae477,f76b9fc..3b47fa2
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java
@@@ -15,18 -15,32 +15,16 @@@
   */
  package org.apache.usergrid.corepersistence;
  
- import com.google.common.base.Optional;
 -
 -import java.util.Arrays;
 -import java.util.HashMap;
 -import java.util.Iterator;
 -import java.util.List;
 -import java.util.Map;
 -import java.util.TreeMap;
 -import java.util.UUID;
 -import java.util.concurrent.atomic.AtomicBoolean;
 -
 -import org.slf4j.Logger;
 -import org.slf4j.LoggerFactory;
 -import org.springframework.beans.BeansException;
 -import org.springframework.context.ApplicationContext;
 -import org.springframework.context.ApplicationContextAware;
 -
 +import com.google.common.cache.CacheBuilder;
 +import com.google.common.cache.CacheLoader;
 +import com.google.common.cache.LoadingCache;
 +import com.google.inject.Injector;
 +import com.google.inject.Key;
 +import com.google.inject.TypeLiteral;
- import com.yammer.metrics.annotation.Metered;
  import org.apache.commons.lang.StringUtils;
 -
  import org.apache.usergrid.corepersistence.util.CpNamingUtils;
 -import org.apache.usergrid.persistence.AbstractEntity;
 -import org.apache.usergrid.persistence.Entity;
 -import org.apache.usergrid.persistence.EntityFactory;
 -import org.apache.usergrid.persistence.EntityManager;
 -import org.apache.usergrid.persistence.EntityManagerFactory;
 -import org.apache.usergrid.persistence.EntityRef;
 -import org.apache.usergrid.persistence.Results;
 +import org.apache.usergrid.exception.ConflictException;
 +import org.apache.usergrid.persistence.*;
  import org.apache.usergrid.persistence.cassandra.CassandraService;
  import org.apache.usergrid.persistence.cassandra.CounterUtils;
  import org.apache.usergrid.persistence.cassandra.Setup;
@@@ -391,9 -412,8 +389,8 @@@ public class CpEntityManagerFactory imp
  
  
      @Override
-     @Metered(group = "core", name = "EntityManagerFactory_getApplication")
      public Map<String, UUID> getApplications() throws Exception {
 -        return getApplications( false );
 +        return getApplications(false);
      }
  
  

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c8fcf2de/stack/core/src/main/java/org/apache/usergrid/persistence/EntityManagerFactory.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c8fcf2de/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/EntityManagerFactoryImpl.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c8fcf2de/stack/core/src/test/java/org/apache/usergrid/persistence/EntityManagerIT.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c8fcf2de/stack/core/src/test/java/org/apache/usergrid/persistence/PerformanceEntityRebuildIndexTest.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c8fcf2de/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsEntityIndexImpl.java
----------------------------------------------------------------------
diff --cc stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsEntityIndexImpl.java
index 88f02ab,8814583..e2d09b3
--- a/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsEntityIndexImpl.java
+++ b/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsEntityIndexImpl.java
@@@ -663,114 -649,8 +649,6 @@@ public class EsEntityIndexImpl implemen
          return parseResults(searchResponse, new Query());
      }
  
- 
-     @Override
-     public ListenableActionFuture deleteAllVersionsOfEntity(final Id entityId ) {
- 
-         String idString = IndexingUtils.idString(entityId).toLowerCase();
- 
-         final TermQueryBuilder tqb = QueryBuilders.termQuery(ENTITYID_ID_FIELDNAME, idString);
- 
-         //Added For Graphite Metrics
-         final Timer.Context timeDeleteAllVersions =allVersionsTimer.time();
-         final Timer.Context timeDeleteAllVersionsFuture = allVersionsTimerFuture.time();
-         final ListenableActionFuture<DeleteByQueryResponse> response = esProvider.getClient()
-             .prepareDeleteByQuery( alias.getWriteAlias() ).setQuery( tqb ).execute();
- 
-         response.addListener( new ActionListener<DeleteByQueryResponse>() {
- 
-             @Override
-             public void onResponse( DeleteByQueryResponse response) {
-                 timeDeleteAllVersions.stop();
-                 logger.debug( "Deleted entity {}:{} from all index scopes with response status = {}",
-                     entityId.getType(), entityId.getUuid(), response.status().toString() );
- 
-                 checkDeleteByQueryResponse(tqb, response);
-             }
- 
- 
-             @Override
-             public void onFailure( Throwable e ) {
-                 timeDeleteAllVersions.stop();
-                 logger.error( "Failed to delete entity {}:{} from all index scopes with error {}",
-                     entityId.getType(), entityId.getUuid(), e);
- 
- 
-             }
-         });
-         timeDeleteAllVersionsFuture.stop();
-         return response;
-     }
- 
- 
-     @Override
-     public ListenableActionFuture deletePreviousVersions(final Id entityId, final UUID version) {
- 
-         String idString = IndexingUtils.idString( entityId ).toLowerCase();
- 
-         final FilteredQueryBuilder fqb = QueryBuilders.filteredQuery(
-                 QueryBuilders.termQuery(ENTITYID_ID_FIELDNAME, idString),
-             FilterBuilders.rangeFilter(ENTITY_VERSION_FIELDNAME).lt(version.timestamp())
-         );
- 
-         //Added For Graphite Metrics
-         //Checks the time from the execute to the response below
-         final Timer.Context timeDeletePreviousVersions = deletePreviousTimer.time();
-         final Timer.Context timeDeletePreviousVersionFuture = deletePreviousTimerFuture.time();
-         final ListenableActionFuture<DeleteByQueryResponse> response = esProvider.getClient()
-             .prepareDeleteByQuery(alias.getWriteAlias()).setQuery(fqb).execute();
- 
-         //Added For Graphite Metrics
-         response.addListener(new ActionListener<DeleteByQueryResponse>() {
-             @Override
-             public void onResponse(DeleteByQueryResponse response) {
-                 timeDeletePreviousVersions.stop();
-                 //error message needs to be retooled so that it describes the entity more throughly
-                 logger
-                     .debug("Deleted entity {}:{} with version {} from all " + "index scopes with response status = {}",
-                         entityId.getType(), entityId.getUuid(), version, response.status().toString());
- 
-                 checkDeleteByQueryResponse( fqb, response );
-             }
- 
- 
-             @Override
-             public void onFailure( Throwable e ) {
-                 logger.error( "Deleted entity {}:{} from all index scopes with error {}", entityId.getType(),
-                     entityId.getUuid(), e );
-             }
-         } );
- 
-         timeDeletePreviousVersionFuture.stop();
- 
-         return response;
-     }
- 
- 
-     /**
-      * Validate the response doesn't contain errors, if it does, fail fast at the first error we encounter
-      */
-     private void checkDeleteByQueryResponse(
-             final QueryBuilder query, final DeleteByQueryResponse response ) {
- 
-         for ( IndexDeleteByQueryResponse indexDeleteByQueryResponse : response ) {
-             final ShardOperationFailedException[] failures = indexDeleteByQueryResponse.getFailures();
- 
-             for ( ShardOperationFailedException failedException : failures ) {
-                 logger.error( String.format("Unable to delete by query %s. "
-                         + "Failed with code %d and reason %s on shard %s in index %s",
-                     query.toString(),
-                     failedException.status().getStatus(),
-                     failedException.reason(),
-                         failedException.shardId(),
-                     failedException.index() )
-                 );
-             }
- 
-         }
-     }
--
--
      /**
       * Completely delete an index.
       */

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c8fcf2de/stack/rest/src/main/java/org/apache/usergrid/rest/management/organizations/applications/ApplicationsResource.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c8fcf2de/stack/services/src/main/java/org/apache/usergrid/management/cassandra/ManagementServiceImpl.java
----------------------------------------------------------------------
diff --cc stack/services/src/main/java/org/apache/usergrid/management/cassandra/ManagementServiceImpl.java
index 43617c4,854c3e0..16bb703
--- a/stack/services/src/main/java/org/apache/usergrid/management/cassandra/ManagementServiceImpl.java
+++ b/stack/services/src/main/java/org/apache/usergrid/management/cassandra/ManagementServiceImpl.java
@@@ -1606,98 -1636,40 +1605,98 @@@ public class ManagementServiceImpl impl
          }
  
          if ( properties == null ) {
 -            properties = new HashMap<String, Object>();
 +            properties = new HashMap<>();
          }
  
 +        EntityManager em = emf.getEntityManager( smf.getManagementAppId() );
 +
          OrganizationInfo organizationInfo = getOrganizationByUuid( organizationId );
 +        Entity appInfo = emf.createApplicationV2(
 +            organizationInfo.getName(), applicationName, properties);
 +        em.refreshIndex();
  
 -        UUID applicationId = emf.createApplication( organizationInfo.getName(), applicationName, properties );
 +        writeUserToken( smf.getManagementAppId(), appInfo,
 +            encryptionService.plainTextCredentials(
 +                generateOAuthSecretKey( AuthPrincipalType.APPLICATION ),
 +                null,
 +                smf.getManagementAppId() ) );
  
 -        EntityManager em = emf.getEntityManager( smf.getManagementAppId() );
 -        properties.put( "name", buildAppName( applicationName, organizationInfo ) );
 -        properties.put( "appUuid", applicationId );
 -        Entity appInfo = em.create( applicationId, APPLICATION_INFO, properties );
 +        UUID applicationId = addApplicationToOrganization( organizationId, appInfo );
  
 +        UserInfo user = null;
 +        try {
 +            user = SubjectUtils.getUser();
 +        }
 +        catch ( UnavailableSecurityManagerException e ) {
 +            // occurs in the rare case that this is called before the full stack is initialized
 +            logger.warn("Error getting user, application created activity will not be created", e);
 +        }
 +        if ( ( user != null ) && user.isAdminUser() ) {
 +            postOrganizationActivity( organizationId, user, "create", appInfo, "Application", applicationName,
 +                "<a href=\"mailto:" + user.getEmail() + "\">" + user.getName() + " (" + user.getEmail()
 +                    + ")</a> created a new application named " + applicationName, null );
 +        }
  
-         em.refreshIndex();
+ 
 -        writeUserToken( smf.getManagementAppId(), appInfo, encryptionService
 -                .plainTextCredentials( generateOAuthSecretKey( AuthPrincipalType.APPLICATION ), null,
 -                        smf.getManagementAppId() ) );
 -        addApplicationToOrganization( organizationId, applicationId, appInfo );
 +
 +        return new ApplicationInfo( applicationId, appInfo.getName() );
 +    }
 +
 +
 +    @Override
 +    public void deleteApplication(UUID applicationId) throws Exception {
 +        emf.deleteApplication( applicationId );
 +    }
 +
 +
 +    @Override
 +    public ApplicationInfo restoreApplication(UUID applicationId) throws Exception {
 +
 +        ApplicationInfo app = getDeletedApplicationInfo( applicationId );
 +        if ( app == null ) {
 +            throw new EntityNotFoundException("Deleted application ID " + applicationId + " not found");
 +        }
 +
 +        if ( emf.lookupApplication( app.getName() ) != null ) {
 +            throw new ConflictException("Cannot restore application, one with that name already exists.");
 +        }
 +
 +        // restore application_info entity
 +
 +        EntityManager em = emf.getEntityManager( emf.getManagementAppId() );
 +        Entity appInfo = emf.restoreApplication(applicationId);
 +
 +        // restore token
 +
 +        writeUserToken( smf.getManagementAppId(), appInfo,
 +            encryptionService.plainTextCredentials(
 +                generateOAuthSecretKey( AuthPrincipalType.APPLICATION ),
 +                null,
 +                smf.getManagementAppId() ) );
 +
 +        String orgName = appInfo.getName().split("/")[0];
 +        EntityRef alias = em.getAlias( Group.ENTITY_TYPE, orgName );
 +        Entity orgEntity = em.get( alias );
 +
 +        addApplicationToOrganization( orgEntity.getUuid(), appInfo );
 +
 +        // create activity
  
          UserInfo user = null;
 -        // if we call this method before the full stack is initialized
 -        // we'll get an exception
          try {
              user = SubjectUtils.getUser();
          }
          catch ( UnavailableSecurityManagerException e ) {
 +            // occurs in the rare case that this is called before the full stack is initialized
 +            logger.warn("Error getting user, application restored created activity will not be created", e);
          }
          if ( ( user != null ) && user.isAdminUser() ) {
 -            postOrganizationActivity( organizationId, user, "create", appInfo, "Application", applicationName,
 -                    "<a href=\"mailto:" + user.getEmail() + "\">" + user.getName() + " (" + user.getEmail()
 -                            + ")</a> created a new application named " + applicationName, null );
 +            postOrganizationActivity( orgEntity.getUuid(), user, "restore", appInfo, "Application", appInfo.getName(),
 +                "<a href=\"mailto:" + user.getEmail() + "\">" + user.getName() + " (" + user.getEmail()
 +                    + ")</a> restored an application named " + appInfo.getName(), null );
          }
  
-         em.refreshIndex();
+ 
  
          return new ApplicationInfo( applicationId, appInfo.getName() );
      }