do_log_io(int argc, char *argv[])
{
const char *name = argv[1];
- char *mode = argv[2];
+ char *mode_string = argv[2];
struct ovsdb_error *error;
+ enum ovsdb_log_open_mode mode;
struct ovsdb_log *log;
- char *save_ptr = NULL;
- const char *token;
- int flags;
int i;
- for (flags = 0, token = strtok_r(mode, " |", &save_ptr); token != NULL;
- token = strtok_r(NULL, " |", &save_ptr))
- {
- if (!strcmp(token, "O_RDONLY")) {
- flags |= O_RDONLY;
- } else if (!strcmp(token, "O_RDWR")) {
- flags |= O_RDWR;
- } else if (!strcmp(token, "O_TRUNC")) {
- flags |= O_TRUNC;
- } else if (!strcmp(token, "O_CREAT")) {
- flags |= O_CREAT;
- } else if (!strcmp(token, "O_EXCL")) {
- flags |= O_EXCL;
- } else if (!strcmp(token, "O_TRUNC")) {
- flags |= O_TRUNC;
- }
+ if (!strcmp(mode_string, "read-only")) {
+ mode = OVSDB_LOG_READ_ONLY;
+ } else if (!strcmp(mode_string, "read/write")) {
+ mode = OVSDB_LOG_READ_WRITE;
+ } else if (!strcmp(mode_string, "create")) {
+ mode = OVSDB_LOG_CREATE;
+ } else {
+ ovs_fatal(0, "unknown log-io open mode \"%s\"", mode_string);
}
- check_ovsdb_error(ovsdb_log_open(name, flags, &log));
+ check_ovsdb_error(ovsdb_log_open(name, mode, -1, &log));
printf("%s: open successful\n", name);
for (i = 3; i < argc; i++) {
union ovsdb_atom atom;
struct ds out;
- die_if_error(ovsdb_atom_from_string(&atom, &base, argv[i]));
+ die_if_error(ovsdb_atom_from_string(&atom, &base, argv[i], NULL));
ds_init(&out);
ovsdb_atom_to_string(&atom, base.type, &out);
struct ovsdb_datum datum;
struct ds out;
- die_if_error(ovsdb_datum_from_string(&datum, &type, argv[i]));
+ die_if_error(ovsdb_datum_from_string(&datum, &type, argv[i], NULL));
ds_init(&out);
ovsdb_datum_to_string(&datum, &type, &out);
json_destroy(json);
for (i = 0; i < n_conditions; i++) {
- printf("condition %2d:", i);
+ printf("condition %2zu:", i);
for (j = 0; j < n_rows; j++) {
bool result = ovsdb_condition_evaluate(rows[j], &conditions[i]);
if (j % 5 == 0) {
json_destroy(json);
for (i = 0; i < n_sets; i++) {
- printf("mutation %2d:\n", i);
+ printf("mutation %2zu:\n", i);
for (j = 0; j < n_rows; j++) {
struct ovsdb_error *error;
struct ovsdb_row *row;
memset(cbdata.counts, 0, cbdata.n_rows * sizeof *cbdata.counts);
ovsdb_query(table, &cnd, do_query_cb, &cbdata);
- printf("query %2d:", i);
+ printf("query %2zu:", i);
for (j = 0; j < cbdata.n_rows; j++) {
if (j % 5 == 0) {
putchar(' ');
}
ovsdb_row_set_destroy(&results);
- printf("query %2d:", i);
+ printf("query %2zu:", i);
for (j = 0; j < n_rows; j++) {
int count = rows[j].class->count;
}
}
-static unsigned int
-print_updated_idl(struct ovsdb_idl *idl, struct jsonrpc *rpc,
- int step, unsigned int seqno)
-{
- for (;;) {
- unsigned int new_seqno;
-
- if (rpc) {
- jsonrpc_run(rpc);
- }
- ovsdb_idl_run(idl);
- new_seqno = ovsdb_idl_get_seqno(idl);
- if (new_seqno != seqno) {
- print_idl(idl, step);
- return new_seqno;
- }
-
- if (rpc) {
- jsonrpc_wait(rpc);
- }
- ovsdb_idl_wait(idl);
- poll_block();
- }
-}
-
static void
parse_uuids(const struct json *json, struct ovsdb_symbol_table *symtab,
size_t *n)
struct uuid uuid;
if (json->type == JSON_STRING && uuid_from_string(&uuid, json->u.string)) {
- char *name = xasprintf("#%d#", *n);
+ char *name = xasprintf("#%zu#", *n);
fprintf(stderr, "%s = "UUID_FMT"\n", name, UUID_ARGS(&uuid));
ovsdb_symbol_table_put(symtab, name, &uuid, false);
free(name);
}
}
- while ((status = ovsdb_idl_txn_commit(txn)) == TXN_INCOMPLETE) {
- ovsdb_idl_run(idl);
- ovsdb_idl_wait(idl);
- ovsdb_idl_txn_wait(txn);
- poll_block();
- }
+ status = ovsdb_idl_txn_commit_block(txn);
printf("%03d: commit, status=%s",
step, ovsdb_idl_txn_status_to_string(status));
if (increment) {
if (argc > 2) {
struct stream *stream;
- error = stream_open_block(argv[1], &stream);
+ error = stream_open_block(jsonrpc_stream_open(argv[1], &stream),
+ &stream);
if (error) {
ovs_fatal(error, "failed to connect to \"%s\"", argv[1]);
}
/* The previous transaction didn't change anything. */
arg++;
} else {
- seqno = print_updated_idl(idl, rpc, step++, seqno);
+ /* Wait for update. */
+ while (ovsdb_idl_get_seqno(idl) == seqno && !ovsdb_idl_run(idl)) {
+ jsonrpc_run(rpc);
+
+ ovsdb_idl_wait(idl);
+ jsonrpc_wait(rpc);
+ poll_block();
+ }
+
+ /* Print update. */
+ print_idl(idl, step++);
}
+ seqno = ovsdb_idl_get_seqno(idl);
if (!strcmp(arg, "reconnect")) {
printf("%03d: reconnect\n", step++);
if (rpc) {
jsonrpc_close(rpc);
}
- print_updated_idl(idl, NULL, step++, seqno);
+ while (ovsdb_idl_get_seqno(idl) == seqno && !ovsdb_idl_run(idl)) {
+ ovsdb_idl_wait(idl);
+ poll_block();
+ }
+ print_idl(idl, step++);
ovsdb_idl_destroy(idl);
printf("%03d: done\n", step);
}