Add a new qmp command to start/stop replication
We can call this qmp command to start/stop replication outside of qemu. Like Xen colo need this function. Signed-off-by: Zhang Chen <zhangchen.fnst@cn.fujitsu.com> Signed-off-by: Wen Congyang <wencongyang@gmail.com> Reviewed-by: Eric Blake <eblake@redhat.com> Reviewed-by: Stefano Stabellini <sstabellini@kernel.org> Reviewed-by: zhanghailiang <zhang.zhanghailiang@huawei.com> Signed-off-by: Stefano Stabellini <sstabellini@kernel.org>
This commit is contained in:
		
							parent
							
								
									7d1730b7d9
								
							
						
					
					
						commit
						2c9639ecab
					
				@ -19,6 +19,8 @@
 | 
			
		||||
#include "qemu/error-report.h"
 | 
			
		||||
#include "qapi/error.h"
 | 
			
		||||
#include "migration/failover.h"
 | 
			
		||||
#include "replication.h"
 | 
			
		||||
#include "qmp-commands.h"
 | 
			
		||||
 | 
			
		||||
static bool vmstate_loading;
 | 
			
		||||
 | 
			
		||||
@ -147,6 +149,30 @@ void colo_do_failover(MigrationState *s)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void qmp_xen_set_replication(bool enable, bool primary,
 | 
			
		||||
                             bool has_failover, bool failover,
 | 
			
		||||
                             Error **errp)
 | 
			
		||||
{
 | 
			
		||||
    ReplicationMode mode = primary ?
 | 
			
		||||
                           REPLICATION_MODE_PRIMARY :
 | 
			
		||||
                           REPLICATION_MODE_SECONDARY;
 | 
			
		||||
 | 
			
		||||
    if (has_failover && enable) {
 | 
			
		||||
        error_setg(errp, "Parameter 'failover' is only for"
 | 
			
		||||
                   " stopping replication");
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (enable) {
 | 
			
		||||
        replication_start_all(mode, errp);
 | 
			
		||||
    } else {
 | 
			
		||||
        if (!has_failover) {
 | 
			
		||||
            failover = NULL;
 | 
			
		||||
        }
 | 
			
		||||
        replication_stop_all(failover, failover ? NULL : errp);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void colo_send_message(QEMUFile *f, COLOMessage msg,
 | 
			
		||||
                              Error **errp)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
@ -5989,6 +5989,31 @@
 | 
			
		||||
##
 | 
			
		||||
{ 'command': 'xen-load-devices-state', 'data': {'filename': 'str'} }
 | 
			
		||||
 | 
			
		||||
##
 | 
			
		||||
# @xen-set-replication:
 | 
			
		||||
#
 | 
			
		||||
# Enable or disable replication.
 | 
			
		||||
#
 | 
			
		||||
# @enable: true to enable, false to disable.
 | 
			
		||||
#
 | 
			
		||||
# @primary: true for primary or false for secondary.
 | 
			
		||||
#
 | 
			
		||||
# @failover: #optional true to do failover, false to stop. but cannot be
 | 
			
		||||
#            specified if 'enable' is true. default value is false.
 | 
			
		||||
#
 | 
			
		||||
# Returns: nothing.
 | 
			
		||||
#
 | 
			
		||||
# Example:
 | 
			
		||||
#
 | 
			
		||||
# -> { "execute": "xen-set-replication",
 | 
			
		||||
#      "arguments": {"enable": true, "primary": false} }
 | 
			
		||||
# <- { "return": {} }
 | 
			
		||||
#
 | 
			
		||||
# Since: 2.9
 | 
			
		||||
##
 | 
			
		||||
{ 'command': 'xen-set-replication',
 | 
			
		||||
  'data': { 'enable': 'bool', 'primary': 'bool', '*failover' : 'bool' } }
 | 
			
		||||
 | 
			
		||||
##
 | 
			
		||||
# @GICCapability:
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user