summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Pfaff <blp@nicira.com>2009-12-16 13:58:33 -0800
committerBen Pfaff <blp@nicira.com>2009-12-16 13:58:33 -0800
commit722f63016f302da114e3afb145bd0c1af5aaeb8f (patch)
treea988962f504a34f1e97f034bd97bd9ecbdd11385
parent6c1b89ed0e6b9934d63ae4d71ba885bfcb87891a (diff)
downloadopenvswitch-722f63016f302da114e3afb145bd0c1af5aaeb8f.tar.gz
ovsdb-tool: Add "show-log" command for use in debugging.
-rw-r--r--ovsdb/ovsdb-tool.1.in9
-rw-r--r--ovsdb/ovsdb-tool.c43
2 files changed, 50 insertions, 2 deletions
diff --git a/ovsdb/ovsdb-tool.1.in b/ovsdb/ovsdb-tool.1.in
index 567131039..b96bdd738 100644
--- a/ovsdb/ovsdb-tool.1.in
+++ b/ovsdb/ovsdb-tool.1.in
@@ -18,6 +18,8 @@ ovsdb\-tool \- Open vSwitch database management utility
.br
\fBovsdb\-tool \fR[\fIoptions\fR] \fBtransact\fI db transaction\fR
.br
+\fBovsdb\-tool \fR[\fIoptions\fR] \fBshow\-log\fI db\fR
+.br
\fBovsdb\-tool help\fR
.so lib/vlog-syn.man
.so lib/common-syn.man
@@ -50,7 +52,7 @@ safely run concurrently with other database activity, including
may specify database modifications, but these will have no effect on
\fIdb\fR.
.
-.IQ "\fBtransact\fI db transaction\fR"
+.IP "\fBtransact\fI db transaction\fR"
Opens \fIdb\fR, executes \fItransaction\fR on it, prints the results,
and commits any changes to \fIdb\fR. The \fItransaction\fR must be a
JSON array in the format of the \fBparams\fR array for the JSON-RPC
@@ -62,6 +64,11 @@ process, including \fBovsdb-server\fR(1). Use \fBovsdb\-client\fR(1),
instead, to write to a database that is served by
\fBovsdb-server\fR(1).
.
+.IP "\fBshow-log\fI db\fR"
+Prints a summary of the records in \fBdb\fR's log, including the time
+and date at which each database change occurred and any associated
+comment. This may be useful for debugging.
+.
.SH OPTIONS
.SS "Logging Options"
.so lib/vlog.man
diff --git a/ovsdb/ovsdb-tool.c b/ovsdb/ovsdb-tool.c
index 61aea75dc..c318be5f3 100644
--- a/ovsdb/ovsdb-tool.c
+++ b/ovsdb/ovsdb-tool.c
@@ -103,7 +103,8 @@ usage(void)
" compact DB [DST] compact DB in-place (or to DST)\n"
" extract-schema DB print DB's schema on stdout\n"
" query DB TRNS execute read-only transaction on DB\n"
- " transact DB TRNS execute read/write transaction on DB\n",
+ " transact DB TRNS execute read/write transaction on DB\n"
+ " show-log DB prints information about DB's log entries\n",
program_name, program_name);
vlog_usage();
printf("\nOther options:\n"
@@ -191,6 +192,45 @@ do_transact(int argc UNUSED, char *argv[])
}
static void
+do_show_log(int argc UNUSED, char *argv[])
+{
+ const char *db_file_name = argv[1];
+ struct ovsdb_log *log;
+ unsigned int i;
+
+ check_ovsdb_error(ovsdb_log_open(db_file_name, O_RDONLY, &log));
+ for (i = 0; ; i++) {
+ struct json *json;
+
+ check_ovsdb_error(ovsdb_log_read(log, &json));
+ if (!json) {
+ break;
+ }
+
+ printf("record %u:", i);
+ if (json->type == JSON_OBJECT) {
+ struct json *date, *comment;
+
+ date = shash_find_data(json_object(json), "_date");
+ if (date && date->type == JSON_INTEGER) {
+ time_t t = json_integer(date);
+ char s[128];
+
+ strftime(s, sizeof s, "%Y-%m-%d %H:%M:%S", localtime(&t));
+ printf(" %s", s);
+ }
+
+ comment = shash_find_data(json_object(json), "_comment");
+ if (comment && comment->type == JSON_STRING) {
+ printf(" \"%s\"", json_string(comment));
+ }
+ }
+ json_destroy(json);
+ putchar('\n');
+ }
+}
+
+static void
do_help(int argc UNUSED, char *argv[] UNUSED)
{
usage();
@@ -200,6 +240,7 @@ static const struct command all_commands[] = {
{ "create", 2, 2, do_create },
{ "query", 2, 2, do_query },
{ "transact", 2, 2, do_transact },
+ { "show-log", 1, 1, do_show_log },
{ "help", 0, INT_MAX, do_help },
{ NULL, 0, 0, NULL },
};