[ovs-dev] [PATCH RFC 00/52] clustering implementation

Ben Pfaff blp at ovn.org
Tue Sep 19 22:00:33 UTC 2017


Here's a first version of the Raft-based clustering implementation.
There is still significant work to do, but this is ready for people
to take a basic look at.

If you want to try it out, the final commit message has some basic
instructions, and a to-do list before it's really ready.

You might find it easier to fetch this from my branch on github:
https://github.com/blp/ovs-reviews/tree/raft7

Ben Pfaff (52):
  replication: Avoid theoretical use-after-free error in
    reset_database().
  daemon-unix: With --monitor, only close standard fds if --detach also
    used.
  table: Avoid trailing white space in tables.
  util: Avoid trailing white space in hex dumps.
  ofp-print: Avoid trailing white space in OpenFlow dumps.
  jsonrpc: Allow jsonrpc_session to have more than one remote.
  socket-util: Make parse_bracketed_token() public, as
    inet_parse_token().
  uuid: New function uuid_random().
  json: New function json_nullable_clone().
  json: New function json_object_put_format().
  log: Allow client to specify magic.
  log: Require log entries to be JSON objects.
  log: Make json parameter to ovsdb_log_write() const.
  ovsdb-error: New function ovsdb_error_to_string_free().
  ovsdb-error: New function ovsdb_error_to_json_free().
  ovsdb-parser: New function ovsdb_parser_put_error().
  ovsdb-data: Add OVS_WARN_UNUSED_RESULT annotations to function
    definitions.
  ovsdb-server: Distinguish logs from other replicas.
  ovsdb: Drop distinction between monitors and replicas.
  ovsdb-server: Drop 'txn' member from struct db.
  stream-unix: Give accepted sockets distinct names for log messages.
  test-ovsdb: Simplify code in do_trigger().
  test-ovsdb: Triggers should wake up other triggers immediately.
  ovsdb-client: Show even invalid data in "dump" output.
  ovsdb-server: Document monitor_cond_change behavior for unmentioned
    tables.
  ovsdb-server: Forbid user-specified databases with reserved names.
  jsonrpc-server: Separate changing read_only status from reconnecting.
  table: Add --max-column-width option.
  jsonrpc-server: Enforce uniqueness of monitor IDs.
  jsonrpc-server: Report monitor session ID properly in error message.
  ovsdb-idl: Document state machine.
  ovsdb-idl: Fix assertion failure on error path parsing server reply.
  ovsdb-idl: Fix indentation in a couple of places.
  ovsdb-idl: Remove 'uuid' member of struct ovsdb_idl.
  ovsdb-idl: Add comments.
  ovsdb-idl: Fix spelling error in comment.
  ovsdb-idl: Verify insertion into singleton tables.
  ovsdb-idl: Break out database-specific stuff into new data structure.
  ovn-sbctl: Allow retries by default.
  tests: Always ignore "Broken pipe" and "Connection reset" log
    messages.
  reconnect: Add ability to do a number of retries without backoff.
  ovsdb-server: Add support for a built-in _Server database.
  ovsdb: Improve documentation.
  ovsdb-server: Add new RPC "set_db_change_aware".
  ovsdb-client: Move ovsdb-client specific tests to new .at file.
  ovsdb: Add support for online schema conversion.
  ovsdb-client; Add new "get-schema-cksum" command.
  ovsdb-client: Add new "backup" command.
  ovsdb-client: Add new "restore" command.
  ovsdb-client: Add new "query" command.
  ovsdb-tool: Add new "db-name" and "schema-name" commands.
  [RFC} ovsdb: Introduce support for clustered databases.

 Makefile.am                         |    8 -
 NEWS                                |   12 +
 build-aux/automake.mk               |   12 +-
 build-aux/text2c                    |   16 +
 include/openvswitch/json.h          |    7 +-
 lib/.gitignore                      |    3 +
 lib/automake.mk                     |   10 +
 lib/daemon-unix.c                   |    4 +-
 lib/json.c                          |   20 +-
 lib/jsonrpc.c                       |   66 +-
 lib/jsonrpc.h                       |    5 +-
 lib/ofp-print.c                     |    1 +
 lib/ovsdb-data.c                    |  115 +-
 lib/ovsdb-data.h                    |   16 +
 lib/ovsdb-error.c                   |   29 +-
 lib/ovsdb-error.h                   |    4 +-
 lib/ovsdb-idl-provider.h            |    3 +-
 lib/ovsdb-idl.c                     | 1612 ++++++++------
 lib/ovsdb-idl.h                     |    4 +-
 lib/ovsdb-parser.c                  |   14 +-
 lib/ovsdb-parser.h                  |    3 +-
 lib/ovsdb-server-idl.ann            |    9 +
 lib/ovsdb-session.c                 |   72 +
 lib/ovsdb-session.h                 |   25 +
 lib/reconnect.c                     |   52 +-
 lib/reconnect.h                     |    3 +
 lib/socket-util.c                   |   14 +-
 lib/socket-util.h                   |    3 +-
 lib/stream-unix.c                   |   15 +-
 lib/table.c                         |   25 +-
 lib/table.h                         |   13 +-
 lib/table.man                       |    5 +
 lib/util.c                          |    7 +-
 lib/uuid.c                          |    8 +
 lib/uuid.h                          |   13 +
 manpages.mk                         |   56 +-
 ovn/controller/ovn-controller.8.xml |    5 +-
 ovn/controller/ovn-controller.c     |    1 +
 ovn/northd/ovn-northd.8.xml         |    6 +-
 ovn/utilities/ovn-sbctl.8.in        |   19 +-
 ovn/utilities/ovn-sbctl.c           |    2 +-
 ovsdb/.gitignore                    |    5 +
 ovsdb/TODO.rst                      |   64 +
 ovsdb/_server.ovsschema             |   19 +
 ovsdb/_server.xml                   |  105 +
 ovsdb/automake.mk                   |   51 +-
 ovsdb/execution.c                   |  114 +-
 ovsdb/file.c                        |  651 +-----
 ovsdb/file.h                        |   33 +-
 ovsdb/jsonrpc-server.c              |  319 ++-
 ovsdb/jsonrpc-server.h              |   12 +-
 ovsdb/log.c                         |  457 +++-
 ovsdb/log.h                         |   32 +-
 ovsdb/monitor.c                     |   73 +-
 ovsdb/monitor.h                     |   10 +-
 ovsdb/ovsdb-client.1.in             |  222 +-
 ovsdb/ovsdb-client.c                |  533 ++++-
 ovsdb/ovsdb-idlc.in                 |    8 +-
 ovsdb/ovsdb-schemas.man             |   19 +
 ovsdb/ovsdb-server.1.in             |  286 ++-
 ovsdb/ovsdb-server.c                |  539 +++--
 ovsdb/ovsdb-tool.1.in               |  227 +-
 ovsdb/ovsdb-tool.c                  |  511 ++++-
 ovsdb/ovsdb-util.c                  |   93 +-
 ovsdb/ovsdb-util.h                  |    9 +
 ovsdb/ovsdb.5.xml                   |  352 +++
 ovsdb/ovsdb.7.xml                   |  742 +++++++
 ovsdb/ovsdb.c                       |  115 +-
 ovsdb/ovsdb.h                       |   43 +-
 ovsdb/raft-private.c                |  358 +++
 ovsdb/raft-private.h                |  123 ++
 ovsdb/raft-rpc.c                    |  788 +++++++
 ovsdb/raft-rpc.h                    |  271 +++
 ovsdb/raft.c                        | 4105 +++++++++++++++++++++++++++++++++++
 ovsdb/raft.h                        |  142 ++
 ovsdb/remote-active.man             |   17 -
 ovsdb/remote-active.xml             |   30 -
 ovsdb/remote-passive.man            |   19 -
 ovsdb/remote-passive.xml            |   36 -
 ovsdb/replication-syn.man           |    2 -
 ovsdb/replication.c                 |   10 +-
 ovsdb/replication.man               |   23 -
 ovsdb/row.c                         |    3 +
 ovsdb/server.c                      |   14 +-
 ovsdb/server.h                      |    2 +-
 ovsdb/storage.c                     |  528 +++++
 ovsdb/storage.h                     |   88 +
 ovsdb/transaction.c                 |  225 +-
 ovsdb/transaction.h                 |   20 +-
 ovsdb/trigger.c                     |  250 ++-
 ovsdb/trigger.h                     |   43 +-
 python/build/nroff.py               |   15 +-
 python/ovs/reconnect.py             |   53 +-
 tests/.gitignore                    |    1 +
 tests/automake.mk                   |   13 +-
 tests/ofp-errors.at                 |   44 +-
 tests/ofp-print.at                  |   16 +-
 tests/ofp-util.at                   |   18 +-
 tests/ofproto-macros.at             |   13 +
 tests/ofproto.at                    |    2 +-
 tests/ovn-controller-vtep.at        |   14 +-
 tests/ovn-nbctl.at                  |   14 +-
 tests/ovn-sbctl.at                  |   14 +-
 tests/ovs-ofctl.at                  |   20 +-
 tests/ovsdb-client.at               |   73 +
 tests/ovsdb-cluster.at              |   78 +
 tests/ovsdb-idl.at                  |    2 +-
 tests/ovsdb-log.at                  |  225 +-
 tests/ovsdb-monitor.at              |    4 +-
 tests/ovsdb-replication.at          |   12 +-
 tests/ovsdb-server.at               |  399 +++-
 tests/ovsdb-tool.at                 |   72 +-
 tests/ovsdb-trigger.at              |    2 +-
 tests/ovsdb.at                      |    2 +
 tests/reconnect.at                  |   56 +-
 tests/test-ovsdb.c                  |   69 +-
 tests/test-raft.c                   |  303 +++
 tests/test-raft.sh                  |   13 +
 tests/test-raft2.sh                 |   12 +
 tests/test-raft3.sh                 |   14 +
 tests/test-raft4.sh                 |   37 +
 tests/test-reconnect.c              |    8 +
 tests/test-reconnect.py             |    5 +
 tests/torture-raft4.sh              |   23 +
 tutorial/ovs-sandbox                |    2 +-
 utilities/ovs-vsctl.8.in            |   21 +-
 vswitchd/ovs-vswitchd.8.in          |    7 +-
 vtep/vtep-ctl.8.in                  |   23 +-
 128 files changed, 14116 insertions(+), 2641 deletions(-)
 create mode 100755 build-aux/text2c
 create mode 100644 lib/ovsdb-server-idl.ann
 create mode 100644 lib/ovsdb-session.c
 create mode 100644 lib/ovsdb-session.h
 create mode 100644 ovsdb/TODO.rst
 create mode 100644 ovsdb/_server.ovsschema
 create mode 100644 ovsdb/_server.xml
 create mode 100644 ovsdb/ovsdb-schemas.man
 create mode 100644 ovsdb/ovsdb.5.xml
 create mode 100644 ovsdb/ovsdb.7.xml
 create mode 100644 ovsdb/raft-private.c
 create mode 100644 ovsdb/raft-private.h
 create mode 100644 ovsdb/raft-rpc.c
 create mode 100644 ovsdb/raft-rpc.h
 create mode 100644 ovsdb/raft.c
 create mode 100644 ovsdb/raft.h
 delete mode 100644 ovsdb/remote-active.man
 delete mode 100644 ovsdb/remote-active.xml
 delete mode 100644 ovsdb/remote-passive.man
 delete mode 100644 ovsdb/remote-passive.xml
 delete mode 100644 ovsdb/replication-syn.man
 delete mode 100644 ovsdb/replication.man
 create mode 100644 ovsdb/storage.c
 create mode 100644 ovsdb/storage.h
 create mode 100644 tests/ovsdb-client.at
 create mode 100644 tests/ovsdb-cluster.at
 create mode 100644 tests/test-raft.c
 create mode 100755 tests/test-raft.sh
 create mode 100755 tests/test-raft2.sh
 create mode 100755 tests/test-raft3.sh
 create mode 100755 tests/test-raft4.sh
 create mode 100755 tests/torture-raft4.sh

-- 
2.10.2



More information about the dev mailing list