Looks Good. On Tue, Feb 8, 2011 at 4:00 PM, Ben Pfaff <b...@nicira.com> wrote: > --- > ovsdb/SPECS | 4 ++++ > ovsdb/ovsdb-tool.1.in | 31 +++++++++++++++++++------------ > ovsdb/ovsdb-tool.c | 26 ++++++++++++++++++++++++++ > ovsdb/ovsdb.c | 18 ++++++++++++------ > ovsdb/ovsdb.h | 6 ++++-- > tests/ovsdb-execution.at | 3 ++- > tests/ovsdb-server.at | 2 +- > tests/ovsdb-tool.at | 20 +++++++++++++++++++- > 8 files changed, 87 insertions(+), 23 deletions(-) > > diff --git a/ovsdb/SPECS b/ovsdb/SPECS > index 97f9882..2c83cf2 100644 > --- a/ovsdb/SPECS > +++ b/ovsdb/SPECS > @@ -108,6 +108,7 @@ is represented by <database-schema>, as described below. > > "name": <id> required > "version": <version> required > + "cksum": <string> optional > "tables": {<id>: <table-schema>, ...} required > > The "name" identifies the database as a whole. It must be > @@ -121,6 +122,9 @@ is represented by <database-schema>, as described below. > present. Open vSwitch semantics for "version" are described in > ovs-vswitchd.conf.db(5). > > + The "cksum" optionally reports an implementation-defined checksum > + for the database schema. > + > <table-schema> > > A JSON object with the following members: > diff --git a/ovsdb/ovsdb-tool.1.in b/ovsdb/ovsdb-tool.1.in > index 069ab1a..79bd2a6 100644 > --- a/ovsdb/ovsdb-tool.1.in > +++ b/ovsdb/ovsdb-tool.1.in > @@ -23,6 +23,10 @@ ovsdb\-tool \- Open vSwitch database management utility > .br > \fBovsdb\-tool \fR[\fIoptions\fR] \fBschema\-version\fI schema\fR > .br > +\fBovsdb\-tool \fR[\fIoptions\fR] \fBdb\-cksum\fI db\fR > +.br > +\fBovsdb\-tool \fR[\fIoptions\fR] \fBschema\-cksum\fI schema\fR > +.br > \fBovsdb\-tool \fR[\fIoptions\fR] \fBquery\fI db transaction\fR > .br > \fBovsdb\-tool \fR[\fIoptions\fR] \fBtransact\fI db transaction\fR > @@ -73,24 +77,27 @@ set to their default values. All of \fIschema\fR's > constraints apply > in full. > . > .IP "\fBdb\-version\fI db\fR" > -Reads \fIdb\fR and prints the version number of the schema embedded > -within the database on stdout. A schema version number has the form > -\fIx\fB.\fIy\fB.\fIz\fR. See \fBovs\-vswitchd.conf.db\fR(5) for > -details. > +.IQ "\fBschema\-version\fI schema\fR" > +Prints the version number in the schema embedded within the database > +\fIdb\fR or in the standalone schema \fIschema\fR on stdout. A schema > +version number has the form \fIx\fB.\fIy\fB.\fIz\fR. See > +\fBovs\-vswitchd.conf.db\fR(5) for details. > .IP > Schema version numbers and Open vSwitch version numbers are > independent. > .IP > -If \fIdb\fR was created before schema versioning was introduced, then > -it will not have a version number and this command will print a blank > -line. > +If \fIschema\fR or \fIdb\fR was created before schema versioning was > +introduced, then it will not have a version number and this command > +will print a blank line. > . > -.IP "\fBschema\-version\fI schema\fR" > -Reads \fIschema\fR and prints the schema's version number on stdout. > +.IP "\fBdb\-cksum\fI db\fR" > +.IQ "\fBschema\-cksum\fI schema\fR" > +Prints the checksum in the schema embedded within the database > +\fIdb\fR or of the standalone schema \fIschema\fR on stdout. > .IP > -If \fIschema\fR was created before versioning was introduced, then it > -does not have a version number and this command will print a blank > -line. > +If \fIschema\fR or \fIdb\fR was created before schema versioning was > +introduced, then it will not have a version number and this command > +will print a blank line. > . > .IP "\fBquery\fI db transaction\fR" > Opens \fIdb\fR, executes \fItransaction\fR on it, and prints the > diff --git a/ovsdb/ovsdb-tool.c b/ovsdb/ovsdb-tool.c > index 2e134ce..3730e67 100644 > --- a/ovsdb/ovsdb-tool.c > +++ b/ovsdb/ovsdb-tool.c > @@ -111,7 +111,9 @@ usage(void) > " compact DB [DST] compact DB in-place (or to DST)\n" > " convert DB SCHEMA [DST] convert DB to SCHEMA (to DST)\n" > " db-version DB report version of schema used by DB\n" > + " db-cksum DB report checksum of schema used by DB\n" > " schema-version SCHEMA report SCHEMA's schema version\n" > + " schema-cksum SCHEMA report SCHEMA's checksum\n" > " query DB TRNS execute read-only 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", > @@ -253,6 +255,17 @@ do_db_version(int argc OVS_UNUSED, char *argv[]) > } > > static void > +do_db_cksum(int argc OVS_UNUSED, char *argv[]) > +{ > + const char *db_file_name = argv[1]; > + struct ovsdb_schema *schema; > + > + check_ovsdb_error(ovsdb_file_read_schema(db_file_name, &schema)); > + puts(schema->cksum); > + ovsdb_schema_destroy(schema); > +} > + > +static void > do_schema_version(int argc OVS_UNUSED, char *argv[]) > { > const char *schema_file_name = argv[1]; > @@ -264,6 +277,17 @@ do_schema_version(int argc OVS_UNUSED, char *argv[]) > } > > static void > +do_schema_cksum(int argc OVS_UNUSED, char *argv[]) > +{ > + const char *schema_file_name = argv[1]; > + struct ovsdb_schema *schema; > + > + check_ovsdb_error(ovsdb_schema_from_file(schema_file_name, &schema)); > + puts(schema->cksum); > + ovsdb_schema_destroy(schema); > +} > + > +static void > transact(bool read_only, const char *db_file_name, const char *transaction) > { > struct json *request, *result; > @@ -435,7 +459,9 @@ static const struct command all_commands[] = { > { "compact", 1, 2, do_compact }, > { "convert", 2, 3, do_convert }, > { "db-version", 1, 1, do_db_version }, > + { "db-cksum", 1, 1, do_db_cksum }, > { "schema-version", 1, 1, do_schema_version }, > + { "schema-cksum", 1, 1, do_schema_cksum }, > { "query", 2, 2, do_query }, > { "transact", 2, 2, do_transact }, > { "show-log", 1, 1, do_show_log }, > diff --git a/ovsdb/ovsdb.c b/ovsdb/ovsdb.c > index b767d38..46d06a0 100644 > --- a/ovsdb/ovsdb.c > +++ b/ovsdb/ovsdb.c > @@ -1,4 +1,4 @@ > -/* Copyright (c) 2009, 2010 Nicira Networks > +/* Copyright (c) 2009, 2010, 2011 Nicira Networks > * > * Licensed under the Apache License, Version 2.0 (the "License"); > * you may not use this file except in compliance with the License. > @@ -26,13 +26,14 @@ > #include "transaction.h" > > struct ovsdb_schema * > -ovsdb_schema_create(const char *name, const char *version) > +ovsdb_schema_create(const char *name, const char *version, const char *cksum) > { > struct ovsdb_schema *schema; > > schema = xzalloc(sizeof *schema); > schema->name = xstrdup(name); > schema->version = xstrdup(version); > + schema->cksum = xstrdup(cksum); > shash_init(&schema->tables); > > return schema; > @@ -44,7 +45,7 @@ ovsdb_schema_clone(const struct ovsdb_schema *old) > struct ovsdb_schema *new; > struct shash_node *node; > > - new = ovsdb_schema_create(old->name, old->version); > + new = ovsdb_schema_create(old->name, old->version, old->cksum); > SHASH_FOR_EACH (node, &old->tables) { > const struct ovsdb_table_schema *ts = node->data; > > @@ -68,6 +69,7 @@ ovsdb_schema_destroy(struct ovsdb_schema *schema) > shash_destroy(&schema->tables); > free(schema->name); > free(schema->version); > + free(schema->cksum); > free(schema); > } > > @@ -129,7 +131,7 @@ struct ovsdb_error * > ovsdb_schema_from_json(struct json *json, struct ovsdb_schema **schemap) > { > struct ovsdb_schema *schema; > - const struct json *name, *tables, *version_json; > + const struct json *name, *tables, *version_json, *cksum; > struct ovsdb_error *error; > struct shash_node *node; > struct ovsdb_parser parser; > @@ -141,7 +143,7 @@ ovsdb_schema_from_json(struct json *json, struct > ovsdb_schema **schemap) > name = ovsdb_parser_member(&parser, "name", OP_ID); > version_json = ovsdb_parser_member(&parser, "version", > OP_STRING | OP_OPTIONAL); > - ovsdb_parser_member(&parser, "cksum", OP_STRING | OP_OPTIONAL); > + cksum = ovsdb_parser_member(&parser, "cksum", OP_STRING | OP_OPTIONAL); > tables = ovsdb_parser_member(&parser, "tables", OP_OBJECT); > error = ovsdb_parser_finish(&parser); > if (error) { > @@ -159,7 +161,8 @@ ovsdb_schema_from_json(struct json *json, struct > ovsdb_schema **schemap) > version = ""; > } > > - schema = ovsdb_schema_create(json_string(name), version); > + schema = ovsdb_schema_create(json_string(name), version, > + cksum ? json_string(cksum) : ""); > SHASH_FOR_EACH (node, json_object(tables)) { > struct ovsdb_table_schema *table; > > @@ -217,6 +220,9 @@ ovsdb_schema_to_json(const struct ovsdb_schema *schema) > if (schema->version[0]) { > json_object_put_string(json, "version", schema->version); > } > + if (schema->cksum[0]) { > + json_object_put_string(json, "cksum", schema->cksum); > + } > > tables = json_object_create(); > > diff --git a/ovsdb/ovsdb.h b/ovsdb/ovsdb.h > index 642f686..ae743bb 100644 > --- a/ovsdb/ovsdb.h > +++ b/ovsdb/ovsdb.h > @@ -1,4 +1,4 @@ > -/* Copyright (c) 2009, 2010 Nicira Networks > +/* Copyright (c) 2009, 2010, 2011 Nicira Networks > * > * Licensed under the Apache License, Version 2.0 (the "License"); > * you may not use this file except in compliance with the License. > @@ -30,11 +30,13 @@ struct uuid; > struct ovsdb_schema { > char *name; > char *version; > + char *cksum; > struct shash tables; /* Contains "struct ovsdb_table_schema *"s. */ > }; > > struct ovsdb_schema *ovsdb_schema_create(const char *name, > - const char *version); > + const char *version, > + const char *cksum); > struct ovsdb_schema *ovsdb_schema_clone(const struct ovsdb_schema *); > void ovsdb_schema_destroy(struct ovsdb_schema *); > > diff --git a/tests/ovsdb-execution.at b/tests/ovsdb-execution.at > index a457b2a..d4f2380 100644 > --- a/tests/ovsdb-execution.at > +++ b/tests/ovsdb-execution.at > @@ -7,7 +7,8 @@ m4_define([ORDINAL_SCHEMA], > "columns": { > "number": {"type": "integer"}, > "name": {"type": "string"}}}}, > - "version": "5.1.3"}]]) > + "version": "5.1.3", > + "cksum": "12345678 9"}]]) > > m4_define([CONSTRAINT_SCHEMA], > [[{"name": "constraints", > diff --git a/tests/ovsdb-server.at b/tests/ovsdb-server.at > index c9168f8..dbaacd5 100644 > --- a/tests/ovsdb-server.at > +++ b/tests/ovsdb-server.at > @@ -192,7 +192,7 @@ AT_CHECK( > [0], [stdout], [ignore], [test ! -e pid || kill `cat pid`]) > dnl Check that all the crap is in fact in the database log. > AT_CHECK([[perl $srcdir/uuidfilt.pl db | grep -v ^OVSDB | sed > 's/"_date":[0-9]*/"_date":0/' | test-json --multiple -]], [0], > - > [[{"name":"ordinals","tables":{"ordinals":{"columns":{"name":{"type":"string"},"number":{"type":"integer"}}}},"version":"5.1.3"} > + [[{"cksum":"12345678 > 9","name":"ordinals","tables":{"ordinals":{"columns":{"name":{"type":"string"},"number":{"type":"integer"}}}},"version":"5.1.3"} > {"_comment":"add row for zero > 0","_date":0,"ordinals":{"<0>":{"name":"zero"}}} > {"_comment":"delete row for 0","_date":0,"ordinals":{"<0>":null}} > {"_comment":"add back row for zero > 0","_date":0,"ordinals":{"<1>":{"name":"zero"}}} > diff --git a/tests/ovsdb-tool.at b/tests/ovsdb-tool.at > index 664e616..0f11668 100644 > --- a/tests/ovsdb-tool.at > +++ b/tests/ovsdb-tool.at > @@ -83,7 +83,7 @@ AT_CHECK( > [0], [stdout], [ignore]) > dnl Check that all the crap is in fact in the database log. > AT_CHECK([[perl $srcdir/uuidfilt.pl db | grep -v ^OVSDB | sed > 's/"_date":[0-9]*/"_date":0/' | test-json --multiple -]], [0], > - > [[{"name":"ordinals","tables":{"ordinals":{"columns":{"name":{"type":"string"},"number":{"type":"integer"}}}},"version":"5.1.3"} > + [[{"cksum":"12345678 > 9","name":"ordinals","tables":{"ordinals":{"columns":{"name":{"type":"string"},"number":{"type":"integer"}}}},"version":"5.1.3"} > {"_comment":"add row for zero > 0","_date":0,"ordinals":{"<0>":{"name":"zero"}}} > {"_comment":"delete row for 0","_date":0,"ordinals":{"<0>":null}} > {"_comment":"add back row for zero > 0","_date":0,"ordinals":{"<1>":{"name":"zero"}}} > @@ -288,3 +288,21 @@ AT_CHECK([ovsdb-tool create db schema], [0], [], > [ignore]) > AT_CHECK([ovsdb-tool db-version db], [0], [5.1.3 > ]) > AT_CLEANUP > + > +AT_SETUP([ovsdb-tool schema-cksum]) > +AT_KEYWORDS([ovsdb file positive]) > +AT_DATA([schema], [ORDINAL_SCHEMA > +]) > +AT_CHECK([ovsdb-tool schema-cksum schema], [0], [12345678 9 > +]) > +AT_CLEANUP > + > +AT_SETUP([ovsdb-tool db-cksum]) > +AT_KEYWORDS([ovsdb file positive]) > +AT_DATA([schema], [ORDINAL_SCHEMA > +]) > +touch .db.~lock~ > +AT_CHECK([ovsdb-tool create db schema], [0], [], [ignore]) > +AT_CHECK([ovsdb-tool db-cksum db], [0], [12345678 9 > +]) > +AT_CLEANUP > -- > 1.7.1 > > > _______________________________________________ > dev mailing list > dev@openvswitch.org > http://openvswitch.org/mailman/listinfo/dev_openvswitch.org >
_______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev_openvswitch.org