Skip to content
This repository has been archived by the owner on Jan 5, 2022. It is now read-only.

Commit

Permalink
Move migrations to common interface
Browse files Browse the repository at this point in the history
  • Loading branch information
Shawn Feldman committed Feb 16, 2015
1 parent eace1cd commit ed20408
Show file tree
Hide file tree
Showing 10 changed files with 31 additions and 73 deletions.
Expand Up @@ -80,8 +80,8 @@ protected void configure() {
bind(AllEntitiesInSystemObservable.class).to( AllEntitiesInSystemObservableImpl.class );
bind(ApplicationObservable.class).to( ApplicationObservableImpl.class );

Multibinder<CollectionDataMigration> dataMigrationMultibinder =
Multibinder.newSetBinder( binder(), CollectionDataMigration.class );
Multibinder<DataMigration> dataMigrationMultibinder =
Multibinder.newSetBinder( binder(), DataMigration.class );
dataMigrationMultibinder.addBinding().to( EntityTypeMappingMigration.class );

Multibinder<EntityDeleted> entityBinder =
Expand Down
Expand Up @@ -56,8 +56,7 @@ protected void configure() {
bind(MvccEntitySerializationStrategy.class ).annotatedWith(ProxyImpl.class)
.to(MvccEntitySerializationStrategyProxyV2Impl.class);

Multibinder<CollectionDataMigration> dataMigrationMultibinder =
Multibinder.newSetBinder( binder(), CollectionDataMigration.class );
Multibinder<DataMigration> dataMigrationMultibinder = Multibinder.newSetBinder( binder(), DataMigration.class );
dataMigrationMultibinder.addBinding().to( MvccEntityDataMigrationImpl.class );

bind( MvccEntityMigrationStrategy.class ).to(MvccEntitySerializationStrategyProxyV2Impl.class);
Expand Down
Expand Up @@ -77,8 +77,7 @@ protected void configure() {


//do multibindings for migrations
Multibinder<ApplicationDataMigration> applicationDataMigrationMultibinder = Multibinder.newSetBinder( binder(), ApplicationDataMigration.class );
Multibinder<CollectionDataMigration> collectionDataMigrationMultibinder = Multibinder.newSetBinder( binder(), CollectionDataMigration.class );
Multibinder<DataMigration> applicationDataMigrationMultibinder = Multibinder.newSetBinder( binder(), DataMigration.class );
// dataMigrationMultibinder.addBinding();
// dataMigrationManagerMultibinder.addBinding().to( DataMigrationManagerImpl.class );
// migrationBinding.addBinding().to( Key.get( MigrationInfoSerialization.class ) );
Expand Down
Expand Up @@ -26,13 +26,7 @@
/**
* Migrate applications
*/
public interface ApplicationDataMigration extends DataMigration {
public interface ApplicationDataMigration extends DataMigration<ApplicationScope> {

/**
* Migrate the data to the specified version
* @param observer
* @throws Throwable
*/
public Observable migrate(final Observable<ApplicationScope> applicationEntityGroup, final ProgressObserver observer) throws Throwable;

}
Expand Up @@ -25,12 +25,6 @@
/**
* Migrate Collections
*/
public interface CollectionDataMigration extends DataMigration {
/**
* Migrate the data to the specified version
* @param observer
* @throws Throwable
*/
public Observable migrate(final Observable<ApplicationEntityGroup> applicationEntityGroup,final ProgressObserver observer) throws Throwable;
public interface CollectionDataMigration extends DataMigration<ApplicationEntityGroup> {

}
Expand Up @@ -40,9 +40,15 @@
*/


public interface DataMigration {
public interface DataMigration <T> {


/**
* Migrate the data to the specified version
* @param observer
* @throws Throwable
*/
public Observable migrate(final Observable<T> applicationEntityGroup,final ProgressObserver observer) throws Throwable;

/**
* Get the version of this migration. It must be unique.
Expand Down
Expand Up @@ -53,27 +53,22 @@ public class DataMigrationManagerImpl implements DataMigrationManager {


private final ApplicationObservable applicationObservable;
private final Set<ApplicationDataMigration> appMigrations;
private final Set<CollectionDataMigration> collectionMigrations;
private final Set<DataMigration> dataMigrations;


@Inject
public DataMigrationManagerImpl( final MigrationInfoSerialization migrationInfoSerialization,
final Set<ApplicationDataMigration> appMigrations,
final Set<CollectionDataMigration> collectionMigrations,
final Set<DataMigration> dataMigrations,
final AllEntitiesInSystemObservable allEntitiesInSystemObservable,
final ApplicationObservable applicationObservable
) {
this.appMigrations = appMigrations;
this.collectionMigrations = collectionMigrations;

Preconditions.checkNotNull( migrationInfoSerialization,
"migrationInfoSerialization must not be null" );
Preconditions.checkNotNull( collectionMigrations, "migrations must not be null" );
Preconditions.checkNotNull( appMigrations, "migrations must not be null" );
Preconditions.checkNotNull( dataMigrations, "migrations must not be null" );
Preconditions.checkNotNull( allEntitiesInSystemObservable, "allentitiesobservable must not be null" );
Preconditions.checkNotNull( applicationObservable, "applicationObservable must not be null" );

this.dataMigrations = dataMigrations;
this.migrationInfoSerialization = migrationInfoSerialization;
this.allEntitiesInSystemObservable = allEntitiesInSystemObservable;
this.applicationObservable = applicationObservable;
Expand Down Expand Up @@ -228,31 +223,7 @@ public void call(CollectionDataMigration dataMigration) {

private boolean populateTreeMap() {
if ( migrationTreeMap.isEmpty() ) {
for ( DataMigration migration : appMigrations ) {

Preconditions.checkNotNull(migration,
"A migration instance in the set of migrations was null. This is not allowed");

final int version = migration.getVersion();

final DataMigration existing = migrationTreeMap.get( version );

if ( existing != null ) {

final Class<? extends DataMigration> existingClass = existing.getClass();

final Class<? extends DataMigration> currentClass = migration.getClass();


throw new DataMigrationException( String.format(
"Data migrations must be unique. Both classes %s and %s have version %d",
existingClass, currentClass, version ) );
}

migrationTreeMap.put( version, migration );
}

for ( DataMigration migration : collectionMigrations ) {
for ( DataMigration migration : dataMigrations ) {

Preconditions.checkNotNull(migration,
"A migration instance in the set of migrations was null. This is not allowed");
Expand Down
Expand Up @@ -34,7 +34,7 @@
public class MaxMigrationModule extends AbstractModule {
@Override
protected void configure() {
Multibinder<ApplicationDataMigration> dataMigrationMultibinder = Multibinder.newSetBinder( binder(), ApplicationDataMigration.class );
Multibinder<DataMigration> dataMigrationMultibinder = Multibinder.newSetBinder( binder(), DataMigration.class );
dataMigrationMultibinder.addBinding().to( MaxMigrationVersion.class );
}
}
Expand Up @@ -88,10 +88,9 @@ public void noMigrations() throws MigrationException {
final MigrationInfoSerialization serialization = mock( MigrationInfoSerialization.class );
when(serialization.getCurrentVersion()).thenReturn(1);

Set<CollectionDataMigration> collectionDataMigrations = new HashSet<>();
Set<ApplicationDataMigration> emptyMigration = new HashSet<>();
Set<DataMigration> emptyMigration = new HashSet<>();

DataMigrationManagerImpl migrationManager = new DataMigrationManagerImpl( serialization, emptyMigration,collectionDataMigrations, allEntitiesInSystemObservable,allApplicationsObservable );
DataMigrationManagerImpl migrationManager = new DataMigrationManagerImpl( serialization, emptyMigration, allEntitiesInSystemObservable,allApplicationsObservable );

migrationManager.migrate();

Expand All @@ -116,14 +115,13 @@ public void multipleMigrations() throws Throwable {
when(v2.migrate(any(Observable.class), any(DataMigration.ProgressObserver.class))).thenReturn(Observable.empty());


Set<ApplicationDataMigration> migrations = new HashSet<>();
Set<DataMigration> migrations = new HashSet<>();
migrations.add( v1 );
migrations.add( v2 );

Set<CollectionDataMigration> collectionDataMigrations = new HashSet<>();


DataMigrationManagerImpl migrationManager = new DataMigrationManagerImpl( serialization, migrations,collectionDataMigrations,allEntitiesInSystemObservable,allApplicationsObservable );
DataMigrationManagerImpl migrationManager = new DataMigrationManagerImpl( serialization, migrations,allEntitiesInSystemObservable,allApplicationsObservable );

migrationManager.migrate();

Expand Down Expand Up @@ -166,14 +164,12 @@ public void shortCircuitVersionFails() throws Throwable {
when( v2.getType() ).thenReturn(DataMigration.MigrationType.Entities);
when( v2.getVersion() ).thenReturn( 3 );

Set<ApplicationDataMigration> migrations = new HashSet<>();
Set<DataMigration> migrations = new HashSet<>();
migrations.add( v1 );
migrations.add( v2 );
Set<CollectionDataMigration> collectionDataMigrations = new HashSet<>();


DataMigrationManagerImpl migrationManager
= new DataMigrationManagerImpl( serialization, migrations,collectionDataMigrations,allEntitiesInSystemObservable,allApplicationsObservable );
= new DataMigrationManagerImpl( serialization, migrations,allEntitiesInSystemObservable,allApplicationsObservable );

migrationManager.migrate();

Expand Down Expand Up @@ -234,13 +230,12 @@ public Object answer(final InvocationOnMock invocation) throws Throwable {
when( v2.getType() ).thenReturn(DataMigration.MigrationType.Entities);
when(v2.migrate(any(Observable.class), any(DataMigration.ProgressObserver.class))).thenReturn(Observable.empty());

Set<CollectionDataMigration> collectionMigrations = new HashSet<>();
collectionMigrations.add( v1 );
collectionMigrations.add(v2);
Set<ApplicationDataMigration> applicationDataMigrations = new HashSet<>();
Set<DataMigration> applicationDataMigrations = new HashSet<>();
applicationDataMigrations.add( v1 );
applicationDataMigrations.add(v2);


DataMigrationManagerImpl migrationManager = new DataMigrationManagerImpl( serialization, applicationDataMigrations,collectionMigrations,allEntitiesInSystemObservable, allApplicationsObservable );
DataMigrationManagerImpl migrationManager = new DataMigrationManagerImpl( serialization, applicationDataMigrations,allEntitiesInSystemObservable, allApplicationsObservable );

migrationManager.migrate();

Expand Down
Expand Up @@ -117,8 +117,8 @@ protected void configure() {
bind( EdgeMetaRepair.class ).to( EdgeMetaRepairImpl.class );
bind( EdgeDeleteRepair.class ).to( EdgeDeleteRepairImpl.class );

Multibinder<ApplicationDataMigration> dataMigrationMultibinder =
Multibinder.newSetBinder( binder(), ApplicationDataMigration.class );
Multibinder<DataMigration> dataMigrationMultibinder =
Multibinder.newSetBinder( binder(), DataMigration.class );
dataMigrationMultibinder.addBinding().to( EdgeDataMigrationImpl.class );

/**
Expand Down

0 comments on commit ed20408

Please sign in to comment.