From: Paolo Bonzini Date: Mon, 17 May 2021 11:36:56 +0000 (-0400) Subject: replication: move include out of root directory X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=b02629550d7bdea405364124a356f88791c56260;p=qemu.git replication: move include out of root directory The replication.h file is included from migration/colo.c and tests/unit/test-replication.c, so it should be in include/. Signed-off-by: Paolo Bonzini --- diff --git a/block/replication.c b/block/replication.c index 97be7ef4de..52163f2d1f 100644 --- a/block/replication.c +++ b/block/replication.c @@ -22,7 +22,7 @@ #include "sysemu/block-backend.h" #include "qapi/error.h" #include "qapi/qmp/qdict.h" -#include "replication.h" +#include "block/replication.h" typedef enum { BLOCK_REPLICATION_NONE, /* block replication is not started */ diff --git a/include/block/replication.h b/include/block/replication.h new file mode 100644 index 0000000000..21931b4f0c --- /dev/null +++ b/include/block/replication.h @@ -0,0 +1,175 @@ +/* + * Replication filter + * + * Copyright (c) 2016 HUAWEI TECHNOLOGIES CO., LTD. + * Copyright (c) 2016 Intel Corporation + * Copyright (c) 2016 FUJITSU LIMITED + * + * Author: + * Changlong Xie + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + */ + +#ifndef REPLICATION_H +#define REPLICATION_H + +#include "qapi/qapi-types-block-core.h" +#include "qemu/module.h" +#include "qemu/queue.h" + +typedef struct ReplicationOps ReplicationOps; +typedef struct ReplicationState ReplicationState; + +/** + * SECTION:block/replication.h + * @title:Base Replication System + * @short_description: interfaces for handling replication + * + * The Replication Model provides a framework for handling Replication + * + * + * How to use replication interfaces + * + * #include "block/replication.h" + * + * typedef struct BDRVReplicationState { + * ReplicationState *rs; + * } BDRVReplicationState; + * + * static void replication_start(ReplicationState *rs, ReplicationMode mode, + * Error **errp); + * static void replication_do_checkpoint(ReplicationState *rs, Error **errp); + * static void replication_get_error(ReplicationState *rs, Error **errp); + * static void replication_stop(ReplicationState *rs, bool failover, + * Error **errp); + * + * static ReplicationOps replication_ops = { + * .start = replication_start, + * .checkpoint = replication_do_checkpoint, + * .get_error = replication_get_error, + * .stop = replication_stop, + * } + * + * static int replication_open(BlockDriverState *bs, QDict *options, + * int flags, Error **errp) + * { + * BDRVReplicationState *s = bs->opaque; + * s->rs = replication_new(bs, &replication_ops); + * return 0; + * } + * + * static void replication_close(BlockDriverState *bs) + * { + * BDRVReplicationState *s = bs->opaque; + * replication_remove(s->rs); + * } + * + * BlockDriver bdrv_replication = { + * .format_name = "replication", + * .instance_size = sizeof(BDRVReplicationState), + * + * .bdrv_open = replication_open, + * .bdrv_close = replication_close, + * }; + * + * static void bdrv_replication_init(void) + * { + * bdrv_register(&bdrv_replication); + * } + * + * block_init(bdrv_replication_init); + * + * + * + * We create an example about how to use replication interfaces in above. + * Then in migration, we can use replication_(start/stop/do_checkpoint/ + * get_error)_all to handle all replication operations. + */ + +/** + * ReplicationState: + * @opaque: opaque pointer value passed to this ReplicationState + * @ops: replication operation of this ReplicationState + * @node: node that we will insert into @replication_states QLIST + */ +struct ReplicationState { + void *opaque; + ReplicationOps *ops; + QLIST_ENTRY(ReplicationState) node; +}; + +/** + * ReplicationOps: + * @start: callback to start replication + * @stop: callback to stop replication + * @checkpoint: callback to do checkpoint + * @get_error: callback to check if error occurred during replication + */ +struct ReplicationOps { + void (*start)(ReplicationState *rs, ReplicationMode mode, Error **errp); + void (*stop)(ReplicationState *rs, bool failover, Error **errp); + void (*checkpoint)(ReplicationState *rs, Error **errp); + void (*get_error)(ReplicationState *rs, Error **errp); +}; + +/** + * replication_new: + * @opaque: opaque pointer value passed to ReplicationState + * @ops: replication operation of the new relevant ReplicationState + * + * Called to create a new ReplicationState instance, and then insert it + * into @replication_states QLIST + * + * Returns: the new ReplicationState instance + */ +ReplicationState *replication_new(void *opaque, ReplicationOps *ops); + +/** + * replication_remove: + * @rs: the ReplicationState instance to remove + * + * Called to remove a ReplicationState instance, and then delete it from + * @replication_states QLIST + */ +void replication_remove(ReplicationState *rs); + +/** + * replication_start_all: + * @mode: replication mode that could be "primary" or "secondary" + * @errp: returns an error if this function fails + * + * Start replication, called in migration/checkpoint thread + * + * Note: the caller of the function MUST make sure vm stopped + */ +void replication_start_all(ReplicationMode mode, Error **errp); + +/** + * replication_do_checkpoint_all: + * @errp: returns an error if this function fails + * + * This interface is called after all VM state is transferred to Secondary QEMU + */ +void replication_do_checkpoint_all(Error **errp); + +/** + * replication_get_error_all: + * @errp: returns an error if this function fails + * + * This interface is called to check if error occurred during replication + */ +void replication_get_error_all(Error **errp); + +/** + * replication_stop_all: + * @failover: boolean value that indicates if we need do failover or not + * @errp: returns an error if this function fails + * + * It is called on failover. The vm should be stopped before calling it, if you + * use this API to shutdown the guest, or other things except failover + */ +void replication_stop_all(bool failover, Error **errp); + +#endif /* REPLICATION_H */ diff --git a/migration/colo.c b/migration/colo.c index de27662cab..e498fdb125 100644 --- a/migration/colo.c +++ b/migration/colo.c @@ -28,7 +28,7 @@ #include "migration/failover.h" #include "migration/ram.h" #ifdef CONFIG_REPLICATION -#include "replication.h" +#include "block/replication.h" #endif #include "net/colo-compare.h" #include "net/colo.h" diff --git a/replication.c b/replication.c index be3a42f9c9..4acd3f8004 100644 --- a/replication.c +++ b/replication.c @@ -14,7 +14,7 @@ #include "qemu/osdep.h" #include "qapi/error.h" -#include "replication.h" +#include "block/replication.h" static QLIST_HEAD(, ReplicationState) replication_states; diff --git a/replication.h b/replication.h deleted file mode 100644 index d49fc22cb9..0000000000 --- a/replication.h +++ /dev/null @@ -1,175 +0,0 @@ -/* - * Replication filter - * - * Copyright (c) 2016 HUAWEI TECHNOLOGIES CO., LTD. - * Copyright (c) 2016 Intel Corporation - * Copyright (c) 2016 FUJITSU LIMITED - * - * Author: - * Changlong Xie - * - * This work is licensed under the terms of the GNU GPL, version 2 or later. - * See the COPYING file in the top-level directory. - */ - -#ifndef REPLICATION_H -#define REPLICATION_H - -#include "qapi/qapi-types-block-core.h" -#include "qemu/module.h" -#include "qemu/queue.h" - -typedef struct ReplicationOps ReplicationOps; -typedef struct ReplicationState ReplicationState; - -/** - * SECTION:replication.h - * @title:Base Replication System - * @short_description: interfaces for handling replication - * - * The Replication Model provides a framework for handling Replication - * - * - * How to use replication interfaces - * - * #include "replication.h" - * - * typedef struct BDRVReplicationState { - * ReplicationState *rs; - * } BDRVReplicationState; - * - * static void replication_start(ReplicationState *rs, ReplicationMode mode, - * Error **errp); - * static void replication_do_checkpoint(ReplicationState *rs, Error **errp); - * static void replication_get_error(ReplicationState *rs, Error **errp); - * static void replication_stop(ReplicationState *rs, bool failover, - * Error **errp); - * - * static ReplicationOps replication_ops = { - * .start = replication_start, - * .checkpoint = replication_do_checkpoint, - * .get_error = replication_get_error, - * .stop = replication_stop, - * } - * - * static int replication_open(BlockDriverState *bs, QDict *options, - * int flags, Error **errp) - * { - * BDRVReplicationState *s = bs->opaque; - * s->rs = replication_new(bs, &replication_ops); - * return 0; - * } - * - * static void replication_close(BlockDriverState *bs) - * { - * BDRVReplicationState *s = bs->opaque; - * replication_remove(s->rs); - * } - * - * BlockDriver bdrv_replication = { - * .format_name = "replication", - * .instance_size = sizeof(BDRVReplicationState), - * - * .bdrv_open = replication_open, - * .bdrv_close = replication_close, - * }; - * - * static void bdrv_replication_init(void) - * { - * bdrv_register(&bdrv_replication); - * } - * - * block_init(bdrv_replication_init); - * - * - * - * We create an example about how to use replication interfaces in above. - * Then in migration, we can use replication_(start/stop/do_checkpoint/ - * get_error)_all to handle all replication operations. - */ - -/** - * ReplicationState: - * @opaque: opaque pointer value passed to this ReplicationState - * @ops: replication operation of this ReplicationState - * @node: node that we will insert into @replication_states QLIST - */ -struct ReplicationState { - void *opaque; - ReplicationOps *ops; - QLIST_ENTRY(ReplicationState) node; -}; - -/** - * ReplicationOps: - * @start: callback to start replication - * @stop: callback to stop replication - * @checkpoint: callback to do checkpoint - * @get_error: callback to check if error occurred during replication - */ -struct ReplicationOps { - void (*start)(ReplicationState *rs, ReplicationMode mode, Error **errp); - void (*stop)(ReplicationState *rs, bool failover, Error **errp); - void (*checkpoint)(ReplicationState *rs, Error **errp); - void (*get_error)(ReplicationState *rs, Error **errp); -}; - -/** - * replication_new: - * @opaque: opaque pointer value passed to ReplicationState - * @ops: replication operation of the new relevant ReplicationState - * - * Called to create a new ReplicationState instance, and then insert it - * into @replication_states QLIST - * - * Returns: the new ReplicationState instance - */ -ReplicationState *replication_new(void *opaque, ReplicationOps *ops); - -/** - * replication_remove: - * @rs: the ReplicationState instance to remove - * - * Called to remove a ReplicationState instance, and then delete it from - * @replication_states QLIST - */ -void replication_remove(ReplicationState *rs); - -/** - * replication_start_all: - * @mode: replication mode that could be "primary" or "secondary" - * @errp: returns an error if this function fails - * - * Start replication, called in migration/checkpoint thread - * - * Note: the caller of the function MUST make sure vm stopped - */ -void replication_start_all(ReplicationMode mode, Error **errp); - -/** - * replication_do_checkpoint_all: - * @errp: returns an error if this function fails - * - * This interface is called after all VM state is transferred to Secondary QEMU - */ -void replication_do_checkpoint_all(Error **errp); - -/** - * replication_get_error_all: - * @errp: returns an error if this function fails - * - * This interface is called to check if error occurred during replication - */ -void replication_get_error_all(Error **errp); - -/** - * replication_stop_all: - * @failover: boolean value that indicates if we need do failover or not - * @errp: returns an error if this function fails - * - * It is called on failover. The vm should be stopped before calling it, if you - * use this API to shutdown the guest, or other things except failover - */ -void replication_stop_all(bool failover, Error **errp); - -#endif /* REPLICATION_H */ diff --git a/tests/unit/test-replication.c b/tests/unit/test-replication.c index b067240add..afff908d77 100644 --- a/tests/unit/test-replication.c +++ b/tests/unit/test-replication.c @@ -14,7 +14,7 @@ #include "qapi/qmp/qdict.h" #include "qemu/option.h" #include "qemu/main-loop.h" -#include "replication.h" +#include "block/replication.h" #include "block/block_int.h" #include "block/qdict.h" #include "sysemu/block-backend.h"