You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by sf...@apache.org on 2015/08/11 22:33:56 UTC
incubator-usergrid git commit: adding new route for migration
Repository: incubator-usergrid
Updated Branches:
refs/heads/USERGRID-908 [created] 2ec1d237d
adding new route for migration
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/2ec1d237
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/2ec1d237
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/2ec1d237
Branch: refs/heads/USERGRID-908
Commit: 2ec1d237dc51f5a2a6dd62a86b0e3109e6905e88
Parents: f71be80
Author: Shawn Feldman <sf...@apache.org>
Authored: Tue Aug 11 14:33:45 2015 -0600
Committer: Shawn Feldman <sf...@apache.org>
Committed: Tue Aug 11 14:33:45 2015 -0600
----------------------------------------------------------------------
.../migration/data/DataMigrationManager.java | 6 ++-
.../data/DataMigrationManagerImpl.java | 15 +++++++
.../data/DataMigrationManagerImplTest.java | 42 +++++++++++++++++++
.../apache/usergrid/rest/MigrateResource.java | 43 +++++++++++++++++---
4 files changed, 99 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/2ec1d237/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/data/DataMigrationManager.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/data/DataMigrationManager.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/data/DataMigrationManager.java
index 7ddc6e1..3e24e6b 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/data/DataMigrationManager.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/data/DataMigrationManager.java
@@ -35,7 +35,11 @@ public interface DataMigrationManager {
* not exist
*/
public void migrate() throws MigrationException;
-
+ /**
+ * Perform any migration necessary in the application. Will only create keyspaces and column families if they do
+ * not exist
+ */
+ public void migrate(final String name) throws MigrationException;
/**
* Returns true if a migration is running. False otherwise
* @return
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/2ec1d237/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/data/DataMigrationManagerImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/data/DataMigrationManagerImpl.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/data/DataMigrationManagerImpl.java
index 5d41abe..ecf271a 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/data/DataMigrationManagerImpl.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/data/DataMigrationManagerImpl.java
@@ -96,6 +96,21 @@ public class DataMigrationManagerImpl implements DataMigrationManager {
@Override
+ public void migrate(final String name) throws MigrationException {
+ /**
+ * Invoke each plugin to attempt a migration
+ */
+ final MigrationPlugin plugin = migrationPlugins.get( name );
+ if(plugin != null){
+ final ProgressObserver observer = new CassandraProgressObserver(plugin.getName());
+ plugin.run(observer);
+ migrationInfoCache.invalidateAll();
+ }else {
+ throw new IllegalArgumentException(name + " does not match a current plugin.");
+ }
+ }
+
+ @Override
public void migrate() throws MigrationException {
/**
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/2ec1d237/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/migration/data/DataMigrationManagerImplTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/migration/data/DataMigrationManagerImplTest.java b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/migration/data/DataMigrationManagerImplTest.java
index e942be1..2012191 100644
--- a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/migration/data/DataMigrationManagerImplTest.java
+++ b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/migration/data/DataMigrationManagerImplTest.java
@@ -106,6 +106,48 @@ public class DataMigrationManagerImplTest {
}
@Test
+ public void testPluginByName() throws MigrationException {
+
+ final Set<MigrationPlugin> plugins = new HashSet<>();
+
+ MigrationPlugin plugin1 = mock( MigrationPlugin.class );
+ when( plugin1.getPhase() ).thenReturn( PluginPhase.MIGRATE );
+
+ when( plugin1.getName() ).thenReturn( "plugin1" );
+
+ MigrationPlugin plugin2 = mock( MigrationPlugin.class );
+ when( plugin2.getPhase() ).thenReturn( PluginPhase.MIGRATE );
+
+ when( plugin2.getName() ).thenReturn( "plugin2" );
+
+ plugins.add( plugin1 );
+ plugins.add( plugin2 );
+
+
+ final MigrationInfoSerialization migrationInfoSerialization = mock( MigrationInfoSerialization.class );
+ final MigrationInfoCache migrationInfoCache = mock(MigrationInfoCache.class);
+
+
+ DataMigrationManagerImpl migrationManager = new DataMigrationManagerImpl( plugins, migrationInfoSerialization,migrationInfoCache );
+
+
+ Set<String> pluginNames = migrationManager.getPluginNames();
+
+ assertEquals(2, pluginNames.size());
+
+ assertTrue( pluginNames.contains( "plugin1" ) );
+
+ assertTrue(pluginNames.contains("plugin2"));
+
+ //now run them
+
+ migrationManager.migrate("plugin1");
+
+ verify( plugin1 ).run(any(ProgressObserver.class));
+
+ }
+
+ @Test
public void test2PluginsPhaseOrder() throws MigrationException {
final Set<MigrationPlugin> plugins = new HashSet<>();
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/2ec1d237/stack/rest/src/main/java/org/apache/usergrid/rest/MigrateResource.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/main/java/org/apache/usergrid/rest/MigrateResource.java b/stack/rest/src/main/java/org/apache/usergrid/rest/MigrateResource.java
index da0ba0f..dad74f4 100644
--- a/stack/rest/src/main/java/org/apache/usergrid/rest/MigrateResource.java
+++ b/stack/rest/src/main/java/org/apache/usergrid/rest/MigrateResource.java
@@ -22,12 +22,7 @@ package org.apache.usergrid.rest;
import java.util.Map;
import java.util.Set;
-import javax.ws.rs.DefaultValue;
-import javax.ws.rs.GET;
-import javax.ws.rs.PUT;
-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.UriInfo;
@@ -116,6 +111,42 @@ public class MigrateResource extends AbstractContextResource {
return new JSONWithPadding( response, callback );
}
+ @RequireSystemAccess
+ @PUT
+ @Path( "run/{pluginName}" )
+ public JSONWithPadding migrateData(@PathParam("pluginName") String pluginName , @Context UriInfo ui,
+ @QueryParam( "callback" ) @DefaultValue( "callback" ) String callback )
+ throws Exception {
+
+ ApiResponse response = createApiResponse();
+ response.setAction( "Migrate Data: "+ pluginName );
+ //TODO make this use the task scheduler
+
+
+ final Thread migrate = new Thread() {
+
+ @Override
+ public void run() {
+
+ logger.info( "Migrating Data for plugin: " + pluginName );
+
+ try {
+ getDataMigrationManager().migrate(pluginName);
+ }
+ catch ( Exception e ) {
+ logger.error( "Unable to migrate data for plugin: " + pluginName, e );
+ }
+ }
+ };
+
+ migrate.setName( "Index migrate data formats: "+pluginName );
+ migrate.setDaemon( true );
+ migrate.start();
+
+ response.setSuccess();
+
+ return new JSONWithPadding( response, callback );
+ }
@RequireSystemAccess
@PUT