@@ -39,23 +39,30 @@ import (
3939
4040var  (
4141	MIGRATE_ETCD_STEPS  =  []int {
42- 		playbook .STOP_SERVICE ,
43- 		playbook .CLEAN_SERVICE , // only container 
42+ 		playbook .ADD_ETCD_MEMBER ,
4443		playbook .PULL_IMAGE ,
4544		playbook .CREATE_CONTAINER ,
4645		playbook .SYNC_CONFIG ,
46+ 		playbook .AMEND_ETCD_CONFIG ,
4747		playbook .START_ETCD ,
48+ 		playbook .REMOVE_ETCD_MEMBER ,
49+ 		playbook .AMEND_SERVER_CONFIG , // modify the etcd endpoint in mds.conf 
50+ 		playbook .RESTART_SERVICE ,     // restart all mds then modify the etcd endpoint 
51+ 		playbook .STOP_SERVICE ,
52+ 		playbook .CLEAN_SERVICE , // only container 
4853		playbook .UPDATE_TOPOLOGY ,
4954	}
5055
5156	// mds 
5257	MIGRATE_MDS_STEPS  =  []int {
53- 		playbook .STOP_SERVICE ,
54- 		playbook .CLEAN_SERVICE , // only container 
5558		playbook .PULL_IMAGE ,
5659		playbook .CREATE_CONTAINER ,
5760		playbook .SYNC_CONFIG ,
5861		playbook .START_MDS ,
62+ 		playbook .AMEND_SERVER_CONFIG , // modify the mds.listen.addr in metaserver.conf 
63+ 		playbook .RESTART_SERVICE ,     // restart all metaserver then modify the mds.listen.addr 
64+ 		playbook .STOP_SERVICE ,
65+ 		playbook .CLEAN_SERVICE , // only container 
5966		playbook .UPDATE_TOPOLOGY ,
6067	}
6168
6774		playbook .CREATE_CONTAINER ,
6875		playbook .SYNC_CONFIG ,
6976		playbook .START_SNAPSHOTCLONE ,
77+ 		playbook .AMEND_SERVER_CONFIG , // modify the mds.listen.addr in metaserver.conf 
78+ 		playbook .RESTART_SERVICE ,     // restart all metaserver then modify the mds.listen.addr 
7079		playbook .UPDATE_TOPOLOGY ,
7180	}
7281
@@ -157,7 +166,7 @@ func checkMigrateTopology(curveadm *cli.CurveAdm, data string) error {
157166	} else  if  len (dcs2add ) <  len (dcs2del ) {
158167		return  errno .ERR_DELETE_SERVICE_WHILE_MIGRATING_IS_DENIED 
159168	}
160- 	 // len(dcs2add) == len(dcs2del) 
169+ 
161170	if  len (dcs2add ) ==  0  {
162171		return  errno .ERR_NO_SERVICES_FOR_MIGRATING 
163172	}
@@ -199,6 +208,7 @@ func genMigratePlaybook(curveadm *cli.CurveAdm,
199208	migrates  :=  getMigrates (curveadm , data )
200209	role  :=  migrates [0 ].From .GetRole ()
201210	steps  :=  MIGRATE_ROLE_STEPS [role ]
211+ 	etcdDCs  :=  curveadm .FilterDeployConfigByRole (dcs , topology .ROLE_ETCD )
202212
203213	// post clean 
204214	if  options .clean  {
@@ -221,10 +231,25 @@ func genMigratePlaybook(curveadm *cli.CurveAdm,
221231		config  :=  dcs2add 
222232		switch  step  {
223233		case  playbook .STOP_SERVICE ,
224- 			playbook .CLEAN_SERVICE :
234+ 			playbook .CLEAN_SERVICE ,
235+ 			playbook .ADD_ETCD_MEMBER ,
236+ 			playbook .REMOVE_ETCD_MEMBER :
225237			config  =  dcs2del 
226238		case  playbook .BACKUP_ETCD_DATA :
227239			config  =  curveadm .FilterDeployConfigByRole (dcs , topology .ROLE_ETCD )
240+ 		// 1. migrate etcd, need to override mds config and restart all mds 
241+ 		// 2. (FS)migrate mds, need to override metaserver config and restart all metaservers 
242+ 		// 3. (BS)migrate mds, need to override chunkserver and snapshot config and restart all chunkservers and snapshotclones 
243+ 		case  playbook .AMEND_SERVER_CONFIG ,
244+ 			playbook .RESTART_SERVICE :
245+ 			if  role  ==  topology .ROLE_ETCD  {
246+ 				config  =  curveadm .FilterDeployConfigByRole (dcs , topology .ROLE_MDS )
247+ 			} else  if  role  ==  topology .ROLE_MDS  &&  dcs [0 ].GetKind () ==  topology .KIND_CURVEFS  {
248+ 				config  =  curveadm .FilterDeployConfigByRole (dcs , topology .ROLE_METASERVER )
249+ 			} else  if  role  ==  topology .ROLE_MDS  &&  dcs [0 ].GetKind () ==  topology .KIND_CURVEBS  {
250+ 				config  =  curveadm .FilterDeployConfigByRole (dcs , topology .ROLE_CHUNKSERVER )
251+ 				config  =  append (config , curveadm .FilterDeployConfigByRole (dcs , topology .ROLE_SNAPSHOTCLONE )... )
252+ 			}
228253		case 
229254			playbook .CREATE_PHYSICAL_POOL ,
230255			playbook .CREATE_LOGICAL_POOL ,
@@ -251,6 +276,11 @@ func genMigratePlaybook(curveadm *cli.CurveAdm,
251276			optionsKV [comm .KEY_POOLSET ] =  poolset 
252277		case  playbook .UPDATE_TOPOLOGY :
253278			optionsKV [comm .KEY_NEW_TOPOLOGY_DATA ] =  data 
279+ 		case  playbook .ADD_ETCD_MEMBER ,
280+ 			playbook .AMEND_ETCD_CONFIG ,
281+ 			playbook .AMEND_SERVER_CONFIG :
282+ 			optionsKV [comm .KEY_MIGRATE_SERVERS ] =  migrates 
283+ 			optionsKV [comm .KEY_CLUSTER_DCS ] =  etcdDCs 
254284		}
255285
256286		pb .AddStep (& playbook.PlaybookStep {
0 commit comments