package com.hubspot.singularity.data.zkmigrations; import java.util.Collections; import java.util.List; import java.util.Set; import com.google.common.collect.Lists; import com.google.inject.Binder; import com.google.inject.Module; import com.google.inject.Provides; import com.google.inject.Scopes; import com.google.inject.multibindings.Multibinder; public class SingularityZkMigrationsModule implements Module { @Override public void configure(Binder binder) { binder.bind(ZkDataMigrationRunner.class).in(Scopes.SINGLETON); Multibinder<ZkDataMigration> dataMigrations = Multibinder.newSetBinder(binder, ZkDataMigration.class); dataMigrations.addBinding().to(LastTaskStatusMigration.class); dataMigrations.addBinding().to(SingularityPendingTaskIdMigration.class); dataMigrations.addBinding().to(SlaveAndRackMigration.class); dataMigrations.addBinding().to(SingularityCmdLineArgsMigration.class); dataMigrations.addBinding().to(TaskManagerRequiredParentsForTransactionsMigration.class); dataMigrations.addBinding().to(SlaveAndRackMigration2.class); dataMigrations.addBinding().to(ScheduleMigration.class); dataMigrations.addBinding().to(SingularityRequestTypeMigration.class); } @Provides public List<ZkDataMigration> getMigrationsInOrder(Set<ZkDataMigration> migrations) { final List<ZkDataMigration> sortedMigrationList = Lists.newArrayList(migrations); Collections.sort(sortedMigrationList); return sortedMigrationList; } }