qmp/migration: new command migrate-recover
The first allow-oob=true command. It's used on destination side when the postcopy migration is paused and ready for a recovery. After execution, a new migration channel will be established for postcopy to continue. Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Signed-off-by: Peter Xu <peterx@redhat.com> Message-Id: <20180502104740.12123-21-peterx@redhat.com> Signed-off-by: Juan Quintela <quintela@redhat.com> --- s/2.12/2.13/
This commit is contained in:
		
							parent
							
								
									e1b1b1bc36
								
							
						
					
					
						commit
						02affd41b1
					
				| @ -1475,6 +1475,30 @@ void qmp_migrate_incoming(const char *uri, Error **errp) | ||||
|     once = false; | ||||
| } | ||||
| 
 | ||||
| void qmp_migrate_recover(const char *uri, Error **errp) | ||||
| { | ||||
|     MigrationIncomingState *mis = migration_incoming_get_current(); | ||||
| 
 | ||||
|     if (mis->state != MIGRATION_STATUS_POSTCOPY_PAUSED) { | ||||
|         error_setg(errp, "Migrate recover can only be run " | ||||
|                    "when postcopy is paused."); | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     if (atomic_cmpxchg(&mis->postcopy_recover_triggered, | ||||
|                        false, true) == true) { | ||||
|         error_setg(errp, "Migrate recovery is triggered already"); | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     /*
 | ||||
|      * Note that this call will never start a real migration; it will | ||||
|      * only re-setup the migration stream and poke existing migration | ||||
|      * to continue using that newly established channel. | ||||
|      */ | ||||
|     qemu_start_incoming_migration(uri, errp); | ||||
| } | ||||
| 
 | ||||
| bool migration_is_blocked(Error **errp) | ||||
| { | ||||
|     if (qemu_savevm_state_blocked(errp)) { | ||||
|  | ||||
| @ -77,6 +77,7 @@ struct MigrationIncomingState { | ||||
|     struct PostcopyBlocktimeContext *blocktime_ctx; | ||||
| 
 | ||||
|     /* notify PAUSED postcopy incoming migrations to try to continue */ | ||||
|     bool postcopy_recover_triggered; | ||||
|     QemuSemaphore postcopy_pause_sem_dst; | ||||
|     QemuSemaphore postcopy_pause_sem_fault; | ||||
| }; | ||||
|  | ||||
| @ -2190,6 +2190,9 @@ static bool postcopy_pause_incoming(MigrationIncomingState *mis) | ||||
| { | ||||
|     trace_postcopy_pause_incoming(); | ||||
| 
 | ||||
|     /* Clear the triggered bit to allow one recovery */ | ||||
|     mis->postcopy_recover_triggered = false; | ||||
| 
 | ||||
|     migrate_set_state(&mis->state, MIGRATION_STATUS_POSTCOPY_ACTIVE, | ||||
|                       MIGRATION_STATUS_POSTCOPY_PAUSED); | ||||
| 
 | ||||
|  | ||||
| @ -1191,3 +1191,23 @@ | ||||
| # Since: 2.9 | ||||
| ## | ||||
| { 'command': 'xen-colo-do-checkpoint' } | ||||
| 
 | ||||
| ## | ||||
| # @migrate-recover: | ||||
| # | ||||
| # Provide a recovery migration stream URI. | ||||
| # | ||||
| # @uri: the URI to be used for the recovery of migration stream. | ||||
| # | ||||
| # Returns: nothing. | ||||
| # | ||||
| # Example: | ||||
| # | ||||
| # -> { "execute": "migrate-recover", | ||||
| #      "arguments": { "uri": "tcp:192.168.1.200:12345" } } | ||||
| # <- { "return": {} } | ||||
| # | ||||
| # Since: 2.13 | ||||
| ## | ||||
| { 'command': 'migrate-recover', 'data': { 'uri': 'str' }, | ||||
|   'allow-oob': true } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Peter Xu
						Peter Xu