Skip to content

Commit

Permalink
dump-guest-memory: add qmp event DUMP_COMPLETED
Browse files Browse the repository at this point in the history
One new QMP event DUMP_COMPLETED is added. When a dump finishes, one
DUMP_COMPLETED event will occur to notify the user.

Signed-off-by: Peter Xu <peterx@redhat.com>
Reviewed-by:   Fam Zheng <famz@redhat.com>
Message-Id: <1455772616-8668-12-git-send-email-peterx@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  • Loading branch information
xzpeter authored and bonzini committed Feb 22, 2016
1 parent 4a6b52d commit d42a0d1
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 6 deletions.
18 changes: 18 additions & 0 deletions docs/qmp-events.txt
Expand Up @@ -220,6 +220,24 @@ Data:
},
"timestamp": { "seconds": 1265044230, "microseconds": 450486 } }

DUMP_COMPLETED
--------------

Emitted when the guest has finished one memory dump.

Data:

- "result": DumpQueryResult type described in qapi-schema.json
- "error": Error message when dump failed. This is only a
human-readable string provided when dump failed. It should not be
parsed in any way (json-string, optional)

Example:

{ "event": "DUMP_COMPLETED",
"data": {"result": {"total": 1090650112, "status": "completed",
"completed": 1090650112} } }

GUEST_PANICKED
--------------

Expand Down
18 changes: 12 additions & 6 deletions dump.c
Expand Up @@ -25,6 +25,7 @@
#include "sysemu/cpus.h"
#include "qapi/qmp/qerror.h"
#include "qmp-commands.h"
#include "qapi-event.h"

#include <zlib.h>
#ifdef CONFIG_LZO
Expand Down Expand Up @@ -1662,6 +1663,7 @@ static void dump_init(DumpState *s, int fd, bool has_format,
static void dump_process(DumpState *s, Error **errp)
{
Error *local_err = NULL;
DumpQueryResult *result = NULL;

if (s->has_format && s->format != DUMP_GUEST_MEMORY_FORMAT_ELF) {
create_kdump_vmcore(s, &local_err);
Expand All @@ -1674,6 +1676,15 @@ static void dump_process(DumpState *s, Error **errp)
atomic_set(&s->status,
(local_err ? DUMP_STATUS_FAILED : DUMP_STATUS_COMPLETED));

/* send DUMP_COMPLETED message (unconditionally) */
result = qmp_query_dump(NULL);
/* should never fail */
assert(result);
qapi_event_send_dump_completed(result, !!local_err, (local_err ? \
error_get_pretty(local_err) : NULL),
&error_abort);
qapi_free_DumpQueryResult(result);

error_propagate(errp, local_err);
dump_cleanup(s);
}
Expand All @@ -1682,13 +1693,8 @@ static void *dump_thread(void *data)
{
Error *err = NULL;
DumpState *s = (DumpState *)data;

dump_process(s, &err);

if (err) {
/* TODO: notify user the error */
error_free(err);
}
error_free(err);
return NULL;
}

Expand Down
16 changes: 16 additions & 0 deletions qapi/event.json
Expand Up @@ -369,3 +369,19 @@
##
{ 'event': 'MEM_UNPLUG_ERROR',
'data': { 'device': 'str', 'msg': 'str' } }

##
# @DUMP_COMPLETED
#
# Emitted when background dump has completed
#
# @result: DumpQueryResult type described in qapi-schema.json.
#
# @error: #optional human-readable error string that provides
# hint on why dump failed. Only presents on failure. The
# user should not try to interpret the error string.
#
# Since: 2.6
##
{ 'event': 'DUMP_COMPLETED' ,
'data': { 'result': 'DumpQueryResult', '*error': 'str' } }

0 comments on commit d42a0d1

Please sign in to comment.