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/09/20 22:44:58 UTC
[44/54] usergrid git commit: Fixes issue with incorrectly not rolling
version when no app-infos are present.
Fixes issue with incorrectly not rolling version when no app-infos are present.
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/9294af73
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/9294af73
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/9294af73
Branch: refs/heads/usergrid-1007-shiro-cache
Commit: 9294af73ff1af563fd06d9b5dc6a04e37dc76788
Parents: 65d2608
Author: Todd Nine <tn...@apigee.com>
Authored: Thu Sep 17 11:53:09 2015 -0600
Committer: Todd Nine <tn...@apigee.com>
Committed: Thu Sep 17 11:53:09 2015 -0600
----------------------------------------------------------------------
.../management/AppInfoMigrationPlugin.java | 234 +++++++++----------
1 file changed, 116 insertions(+), 118 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/9294af73/stack/services/src/main/java/org/apache/usergrid/management/AppInfoMigrationPlugin.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/management/AppInfoMigrationPlugin.java b/stack/services/src/main/java/org/apache/usergrid/management/AppInfoMigrationPlugin.java
index ff73402..54779b9 100644
--- a/stack/services/src/main/java/org/apache/usergrid/management/AppInfoMigrationPlugin.java
+++ b/stack/services/src/main/java/org/apache/usergrid/management/AppInfoMigrationPlugin.java
@@ -20,11 +20,21 @@
package org.apache.usergrid.management;
-import com.google.common.base.Optional;
-import com.google.inject.Inject;
+import java.util.Map;
+import java.util.UUID;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.BeanFactory;
+
import org.apache.usergrid.corepersistence.util.CpEntityMapUtils;
import org.apache.usergrid.corepersistence.util.CpNamingUtils;
-import org.apache.usergrid.persistence.*;
+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.Schema;
import org.apache.usergrid.persistence.collection.EntityCollectionManager;
import org.apache.usergrid.persistence.collection.EntityCollectionManagerFactory;
import org.apache.usergrid.persistence.core.migration.data.MigrationInfoSerialization;
@@ -42,21 +52,17 @@ import org.apache.usergrid.persistence.graph.impl.SimpleSearchByEdge;
import org.apache.usergrid.persistence.graph.impl.SimpleSearchByEdgeType;
import org.apache.usergrid.persistence.model.entity.Entity;
import org.apache.usergrid.persistence.model.entity.Id;
-import org.apache.usergrid.persistence.model.entity.SimpleId;
import org.apache.usergrid.utils.UUIDUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.BeanFactory;
-import rx.Observable;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.UUID;
-import java.util.concurrent.atomic.AtomicInteger;
+import com.google.common.base.Optional;
+import com.google.inject.Inject;
+
+import rx.Observable;
import static org.apache.usergrid.corepersistence.util.CpNamingUtils.getApplicationScope;
import static org.apache.usergrid.persistence.Schema.PROPERTY_NAME;
+
/**
* Migration of appinfos collection to application_info collection.
*
@@ -68,7 +74,7 @@ public class AppInfoMigrationPlugin implements MigrationPlugin {
/** Old and deprecated SYSTEM_APP */
public static final UUID SYSTEM_APP_ID = UUID.fromString( "b6768a08-b5d5-11e3-a495-10ddb1de66c3" );
- private static final Logger logger = LoggerFactory.getLogger(AppInfoMigrationPlugin.class);
+ private static final Logger logger = LoggerFactory.getLogger( AppInfoMigrationPlugin.class );
public static String PLUGIN_NAME = "appinfo-migration";
@@ -85,27 +91,23 @@ public class AppInfoMigrationPlugin implements MigrationPlugin {
final private GraphManagerFactory graphManagerFactory;
private final ManagementService managementService;
+
@Inject
- public AppInfoMigrationPlugin(
- EntityManagerFactory emf,
- MigrationInfoSerialization migrationInfoSerialization,
- EntityCollectionManagerFactory entityCollectionManagerFactory,
- GraphManagerFactory graphManagerFactory,
- BeanFactory beanFactory) {
+ public AppInfoMigrationPlugin( EntityManagerFactory emf, MigrationInfoSerialization migrationInfoSerialization,
+ EntityCollectionManagerFactory entityCollectionManagerFactory,
+ GraphManagerFactory graphManagerFactory, BeanFactory beanFactory ) {
this.emf = emf;
this.migrationInfoSerialization = migrationInfoSerialization;
this.entityCollectionManagerFactory = entityCollectionManagerFactory;
this.graphManagerFactory = graphManagerFactory;
- this.managementService = beanFactory.getBean(ManagementService.class);
+ this.managementService = beanFactory.getBean( ManagementService.class );
}
- public AppInfoMigrationPlugin(
- EntityManagerFactory emf,
- MigrationInfoSerialization migrationInfoSerialization,
- EntityCollectionManagerFactory entityCollectionManagerFactory,
- GraphManagerFactory graphManagerFactory,
- ManagementService managementService) {
+
+ public AppInfoMigrationPlugin( EntityManagerFactory emf, MigrationInfoSerialization migrationInfoSerialization,
+ EntityCollectionManagerFactory entityCollectionManagerFactory,
+ GraphManagerFactory graphManagerFactory, ManagementService managementService ) {
this.emf = emf;
this.migrationInfoSerialization = migrationInfoSerialization;
@@ -134,12 +136,12 @@ public class AppInfoMigrationPlugin implements MigrationPlugin {
@Override
- public void run(ProgressObserver observer) {
+ public void run( ProgressObserver observer ) {
- final int version = migrationInfoSerialization.getVersion(getName());
+ final int version = migrationInfoSerialization.getVersion( getName() );
- if (version == getMaxVersion()) {
- logger.debug("Skipping Migration Plugin: " + getName());
+ if ( version == getMaxVersion() ) {
+ logger.debug( "Skipping Migration Plugin: " + getName() );
return;
}
@@ -147,80 +149,78 @@ public class AppInfoMigrationPlugin implements MigrationPlugin {
AtomicInteger count = new AtomicInteger();
//get old app infos to migrate
final Observable<Entity> oldAppInfos = getOldAppInfos();
- oldAppInfos
- .doOnNext(oldAppInfoEntity -> {
- try {
- migrateAppInfo(oldAppInfoEntity, observer);
+ oldAppInfos.doOnNext( oldAppInfoEntity -> {
+ try {
+ migrateAppInfo( oldAppInfoEntity, observer );
+ count.incrementAndGet();
+ }
+ catch ( Exception e ) {
+ if ( e.getCause() instanceof ApplicationAlreadyExistsException ) {
count.incrementAndGet();
- }catch (Exception e){
- if(e.getCause() instanceof ApplicationAlreadyExistsException){
- count.incrementAndGet();
- logger.info("Application already migrated",oldAppInfoEntity.getId().getUuid());
- }else {
- logger.error("Failed to migrate app info" + oldAppInfoEntity.getId().getUuid(), e);
- throw new RuntimeException(e);
- }
+ logger.info( "Application already migrated", oldAppInfoEntity.getId().getUuid() );
}
-
- })
- .doOnCompleted(() -> {
- if(count.get()>0) {
- migrationInfoSerialization.setVersion(getName(), getMaxVersion());
- }else{
- logger.error("Failed to migrate any app infos");
+ else {
+ logger.error( "Failed to migrate app info" + oldAppInfoEntity.getId().getUuid(), e );
+ throw new RuntimeException( e );
}
- observer.complete();
- }).toBlocking().lastOrDefault(null);
-
+ }
+ } ).doOnCompleted( () -> {
+ migrationInfoSerialization.setVersion( getName(), getMaxVersion() );
+ observer.complete();
+ } ).toBlocking().lastOrDefault( null );
}
- private void migrateAppInfo( org.apache.usergrid.persistence.model.entity.Entity oldAppInfoEntity, ProgressObserver observer) {
+ private void migrateAppInfo( org.apache.usergrid.persistence.model.entity.Entity oldAppInfoEntity,
+ ProgressObserver observer ) {
// Get appinfos from the Graph, we don't expect many so use iterator
final EntityManager managementEm = emf.getManagementEntityManager();
- Map oldAppInfoMap = CpEntityMapUtils.toMap(oldAppInfoEntity);
+ Map oldAppInfoMap = CpEntityMapUtils.toMap( oldAppInfoEntity );
- final String name = (String) oldAppInfoMap.get(PROPERTY_NAME);
+ final String name = ( String ) oldAppInfoMap.get( PROPERTY_NAME );
try {
- final String orgName = name.split("/")[0];
- final String appName = name.split("/")[1];
- UUID applicationId = getUuid(oldAppInfoMap,"applicationUuid") ;
- applicationId = applicationId == null ? getUuid(oldAppInfoMap,"appUuid") : applicationId ;
+ final String orgName = name.split( "/" )[0];
+ final String appName = name.split( "/" )[1];
+ UUID applicationId = getUuid( oldAppInfoMap, "applicationUuid" );
+ applicationId = applicationId == null ? getUuid( oldAppInfoMap, "appUuid" ) : applicationId;
//get app info from graph to see if it has been migrated already
- org.apache.usergrid.persistence.Entity appInfo = getApplicationInfo(applicationId);
- if (appInfo == null) {
+ org.apache.usergrid.persistence.Entity appInfo = getApplicationInfo( applicationId );
+ if ( appInfo == null ) {
- observer.update(getMaxVersion(), "Created application_info for " + appName);
+ observer.update( getMaxVersion(), "Created application_info for " + appName );
// create org->app connections, but not for apps in dummy "usergrid" internal organization
- if(!orgName.equals("usergrid")) { //avoid management org
+ if ( !orgName.equals( "usergrid" ) ) { //avoid management org
- EntityRef orgRef = managementEm.getAlias(Group.ENTITY_TYPE, orgName);
+ EntityRef orgRef = managementEm.getAlias( Group.ENTITY_TYPE, orgName );
// create and connect new APPLICATION_INFO oldAppInfo to Organization
- managementService.createApplication(orgRef.getUuid(), name, applicationId, null);
+ managementService.createApplication( orgRef.getUuid(), name, applicationId, null );
}
- } else {
+ }
+ else {
//already migrated don't do anything
- observer.update(getMaxVersion(), "Received existing application_info for " + appName + " don't do anything");
+ observer.update( getMaxVersion(),
+ "Received existing application_info for " + appName + " don't do anything" );
}
-
- } catch (Exception e) {
+ }
+ catch ( Exception e ) {
String msg = "Exception writing application_info for " + name;
- logger.error(msg, e);
- observer.failed(getMaxVersion(), msg);
- throw new RuntimeException(e);
+ logger.error( msg, e );
+ observer.failed( getMaxVersion(), msg );
+ throw new RuntimeException( e );
}
-
}
- private UUID getUuid(Map oldAppInfoMap, String key) {
+
+ private UUID getUuid( Map oldAppInfoMap, String key ) {
UUID applicationId;
- Object uuidObject = oldAppInfoMap.get(key);
- if (uuidObject instanceof UUID) {
- applicationId = (UUID) uuidObject;
- } else {
- applicationId = uuidObject == null ? null : UUIDUtils.tryExtractUUID(uuidObject.toString());
+ Object uuidObject = oldAppInfoMap.get( key );
+ if ( uuidObject instanceof UUID ) {
+ applicationId = ( UUID ) uuidObject;
+ }
+ else {
+ applicationId = uuidObject == null ? null : UUIDUtils.tryExtractUUID( uuidObject.toString() );
}
return applicationId;
}
@@ -231,84 +231,82 @@ public class AppInfoMigrationPlugin implements MigrationPlugin {
*/
private org.apache.usergrid.persistence.Entity getApplicationInfo( final UUID appId ) throws Exception {
- final ApplicationScope managementAppScope = getApplicationScope(CpNamingUtils.MANAGEMENT_APPLICATION_ID);
- final EntityCollectionManager managementCollectionManager = entityCollectionManagerFactory.createCollectionManager(managementAppScope);
+ final ApplicationScope managementAppScope = getApplicationScope( CpNamingUtils.MANAGEMENT_APPLICATION_ID );
+ final EntityCollectionManager managementCollectionManager =
+ entityCollectionManagerFactory.createCollectionManager( managementAppScope );
- Observable<Edge> edgesObservable = getApplicationInfoEdges(appId);
+ Observable<Edge> edgesObservable = getApplicationInfoEdges( appId );
//get the graph for all app infos
- Observable<org.apache.usergrid.persistence.model.entity.Entity> entityObs =
- edgesObservable.flatMap(edge -> {
- final Id appInfoId = edge.getTargetNode();
- return managementCollectionManager
- .load(appInfoId)
- .filter( entity ->{
- //check for app id
- return entity != null ? entity.getId().getUuid().equals(appId) : false;
- });
- });
+ Observable<org.apache.usergrid.persistence.model.entity.Entity> entityObs = edgesObservable.flatMap( edge -> {
+ final Id appInfoId = edge.getTargetNode();
+ return managementCollectionManager.load( appInfoId ).filter( entity -> {
+ //check for app id
+ return entity != null ? entity.getId().getUuid().equals( appId ) : false;
+ } );
+ } );
// don't expect many applications, so we block
org.apache.usergrid.persistence.model.entity.Entity applicationInfo =
- entityObs.toBlocking().lastOrDefault(null);
+ entityObs.toBlocking().lastOrDefault( null );
if ( applicationInfo == null ) {
return null;
}
- Class clazz = Schema.getDefaultSchema().getEntityClass(applicationInfo.getId().getType());
+ Class clazz = Schema.getDefaultSchema().getEntityClass( applicationInfo.getId().getType() );
- org.apache.usergrid.persistence.Entity entity = EntityFactory.newEntity(
- applicationInfo.getId().getUuid(), applicationInfo.getId().getType(), clazz);
+ org.apache.usergrid.persistence.Entity entity =
+ EntityFactory.newEntity( applicationInfo.getId().getUuid(), applicationInfo.getId().getType(), clazz );
entity.setProperties( CpEntityMapUtils.toMap( applicationInfo ) );
return entity;
-
}
/**
* Use Graph to get old appinfos from the old and deprecated System App.
*/
- public Observable<org.apache.usergrid.persistence.model.entity.Entity> getOldAppInfos( ) {
+ public Observable<org.apache.usergrid.persistence.model.entity.Entity> getOldAppInfos() {
- final ApplicationScope systemAppScope = getApplicationScope(SYSTEM_APP_ID);
+ final ApplicationScope systemAppScope = getApplicationScope( SYSTEM_APP_ID );
final EntityCollectionManager systemCollectionManager =
- entityCollectionManagerFactory.createCollectionManager(systemAppScope);
+ entityCollectionManagerFactory.createCollectionManager( systemAppScope );
- final GraphManager gm = graphManagerFactory.createEdgeManager(systemAppScope);
+ final GraphManager gm = graphManagerFactory.createEdgeManager( systemAppScope );
- String edgeType = CpNamingUtils.getEdgeTypeFromCollectionName("appinfos");
+ String edgeType = CpNamingUtils.getEdgeTypeFromCollectionName( "appinfos" );
Id rootAppId = systemAppScope.getApplication();
- final SimpleSearchByEdgeType simpleSearchByEdgeType = new SimpleSearchByEdgeType(
- rootAppId, edgeType, Long.MAX_VALUE, SearchByEdgeType.Order.DESCENDING, Optional.absent());
+ final SimpleSearchByEdgeType simpleSearchByEdgeType =
+ new SimpleSearchByEdgeType( rootAppId, edgeType, Long.MAX_VALUE, SearchByEdgeType.Order.DESCENDING,
+ Optional.absent() );
Observable<org.apache.usergrid.persistence.model.entity.Entity> entityObs =
- gm.loadEdgesFromSource( simpleSearchByEdgeType )
- .flatMap(edge -> {
- final Id appInfoId = edge.getTargetNode();
+ gm.loadEdgesFromSource( simpleSearchByEdgeType ).flatMap( edge -> {
+ final Id appInfoId = edge.getTargetNode();
- return systemCollectionManager.load(appInfoId)
- .filter(entity -> (entity != null));
- });
+ return systemCollectionManager.load( appInfoId ).filter( entity -> ( entity != null ) );
+ } );
return entityObs;
}
- public Observable<Edge> getApplicationInfoEdges(final UUID applicationId) {
- final ApplicationScope managementAppScope = getApplicationScope(CpNamingUtils.MANAGEMENT_APPLICATION_ID);
- final GraphManager gm = graphManagerFactory.createEdgeManager(managementAppScope);
- String edgeType = CpNamingUtils.getEdgeTypeFromCollectionName(CpNamingUtils.APPLICATION_INFOS);
+ public Observable<Edge> getApplicationInfoEdges( final UUID applicationId ) {
+ final ApplicationScope managementAppScope = getApplicationScope( CpNamingUtils.MANAGEMENT_APPLICATION_ID );
+ final GraphManager gm = graphManagerFactory.createEdgeManager( managementAppScope );
+
+ String edgeType = CpNamingUtils.getEdgeTypeFromCollectionName( CpNamingUtils.APPLICATION_INFOS );
- final SimpleSearchByEdge simpleSearchByEdgeType = new SimpleSearchByEdge(
- CpNamingUtils.generateApplicationId(CpNamingUtils.MANAGEMENT_APPLICATION_ID), edgeType, CpNamingUtils.generateApplicationId( applicationId ), Long.MAX_VALUE, SearchByEdgeType.Order.DESCENDING,
- Optional.absent());
+ final SimpleSearchByEdge simpleSearchByEdgeType =
+ new SimpleSearchByEdge( CpNamingUtils.generateApplicationId( CpNamingUtils.MANAGEMENT_APPLICATION_ID ),
+ edgeType, CpNamingUtils.generateApplicationId( applicationId ), Long.MAX_VALUE,
+ SearchByEdgeType.Order.DESCENDING, Optional.absent() );
- return gm.loadEdgeVersions(simpleSearchByEdgeType );
+ return gm.loadEdgeVersions( simpleSearchByEdgeType );
}
}