{"id":815866,"url":"http://patchwork.ozlabs.org/api/covers/815866/?format=json","web_url":"http://patchwork.ozlabs.org/project/openvswitch/cover/20170919220125.32535-1-blp@ovn.org/","project":{"id":47,"url":"http://patchwork.ozlabs.org/api/projects/47/?format=json","name":"Open vSwitch","link_name":"openvswitch","list_id":"ovs-dev.openvswitch.org","list_email":"ovs-dev@openvswitch.org","web_url":"http://openvswitch.org/","scm_url":"git@github.com:openvswitch/ovs.git","webscm_url":"https://github.com/openvswitch/ovs","list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"msgid":"<20170919220125.32535-1-blp@ovn.org>","list_archive_url":null,"date":"2017-09-19T22:00:33","name":"[ovs-dev,RFC,00/52] clustering implementation","submitter":{"id":67603,"url":"http://patchwork.ozlabs.org/api/people/67603/?format=json","name":"Ben Pfaff","email":"blp@ovn.org"},"mbox":"http://patchwork.ozlabs.org/project/openvswitch/cover/20170919220125.32535-1-blp@ovn.org/mbox/","series":[{"id":3975,"url":"http://patchwork.ozlabs.org/api/series/3975/?format=json","web_url":"http://patchwork.ozlabs.org/project/openvswitch/list/?series=3975","date":"2017-09-19T22:00:34","name":"clustering implementation","version":1,"mbox":"http://patchwork.ozlabs.org/series/3975/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/covers/815866/comments/","headers":{"Return-Path":"<ovs-dev-bounces@openvswitch.org>","X-Original-To":["incoming@patchwork.ozlabs.org","dev@openvswitch.org"],"Delivered-To":["patchwork-incoming@bilbo.ozlabs.org","ovs-dev@mail.linuxfoundation.org"],"Authentication-Results":"ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=openvswitch.org\n\t(client-ip=140.211.169.12; helo=mail.linuxfoundation.org;\n\tenvelope-from=ovs-dev-bounces@openvswitch.org;\n\treceiver=<UNKNOWN>)","Received":["from mail.linuxfoundation.org (mail.linuxfoundation.org\n\t[140.211.169.12])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xxcKx3Blsz9sBW\n\tfor <incoming@patchwork.ozlabs.org>;\n\tWed, 20 Sep 2017 08:02:13 +1000 (AEST)","from mail.linux-foundation.org (localhost [127.0.0.1])\n\tby mail.linuxfoundation.org (Postfix) with ESMTP id 293B4B94;\n\tTue, 19 Sep 2017 22:01:39 +0000 (UTC)","from smtp1.linuxfoundation.org (smtp1.linux-foundation.org\n\t[172.17.192.35])\n\tby mail.linuxfoundation.org (Postfix) with ESMTPS id 57C28AF7\n\tfor <dev@openvswitch.org>; Tue, 19 Sep 2017 22:01:36 +0000 (UTC)","from relay4-d.mail.gandi.net (relay4-d.mail.gandi.net\n\t[217.70.183.196])\n\tby smtp1.linuxfoundation.org (Postfix) with ESMTPS id 5374D3D4\n\tfor <dev@openvswitch.org>; Tue, 19 Sep 2017 22:01:35 +0000 (UTC)","from sigabrt.benpfaff.org (unknown [208.91.2.3])\n\t(Authenticated sender: blp@ovn.org)\n\tby relay4-d.mail.gandi.net (Postfix) with ESMTPSA id 02A25172098;\n\tWed, 20 Sep 2017 00:01:31 +0200 (CEST)"],"X-Greylist":"domain auto-whitelisted by SQLgrey-1.7.6","X-Originating-IP":"208.91.2.3","From":"Ben Pfaff <blp@ovn.org>","To":"dev@openvswitch.org","Date":"Tue, 19 Sep 2017 15:00:33 -0700","Message-Id":"<20170919220125.32535-1-blp@ovn.org>","X-Mailer":"git-send-email 2.10.2","X-Spam-Status":"No, score=-0.7 required=5.0 tests=RCVD_IN_DNSWL_LOW\n\tautolearn=disabled version=3.3.1","X-Spam-Checker-Version":"SpamAssassin 3.3.1 (2010-03-16) on\n\tsmtp1.linux-foundation.org","Cc":"Ben Pfaff <blp@ovn.org>","Subject":"[ovs-dev] [PATCH RFC 00/52] clustering implementation","X-BeenThere":"ovs-dev@openvswitch.org","X-Mailman-Version":"2.1.12","Precedence":"list","List-Id":"<ovs-dev.openvswitch.org>","List-Unsubscribe":"<https://mail.openvswitch.org/mailman/options/ovs-dev>,\n\t<mailto:ovs-dev-request@openvswitch.org?subject=unsubscribe>","List-Archive":"<http://mail.openvswitch.org/pipermail/ovs-dev/>","List-Post":"<mailto:ovs-dev@openvswitch.org>","List-Help":"<mailto:ovs-dev-request@openvswitch.org?subject=help>","List-Subscribe":"<https://mail.openvswitch.org/mailman/listinfo/ovs-dev>,\n\t<mailto:ovs-dev-request@openvswitch.org?subject=subscribe>","MIME-Version":"1.0","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Sender":"ovs-dev-bounces@openvswitch.org","Errors-To":"ovs-dev-bounces@openvswitch.org"},"content":"Here's a first version of the Raft-based clustering implementation.\nThere is still significant work to do, but this is ready for people\nto take a basic look at.\n\nIf you want to try it out, the final commit message has some basic\ninstructions, and a to-do list before it's really ready.\n\nYou might find it easier to fetch this from my branch on github:\nhttps://github.com/blp/ovs-reviews/tree/raft7\n\nBen Pfaff (52):\n  replication: Avoid theoretical use-after-free error in\n    reset_database().\n  daemon-unix: With --monitor, only close standard fds if --detach also\n    used.\n  table: Avoid trailing white space in tables.\n  util: Avoid trailing white space in hex dumps.\n  ofp-print: Avoid trailing white space in OpenFlow dumps.\n  jsonrpc: Allow jsonrpc_session to have more than one remote.\n  socket-util: Make parse_bracketed_token() public, as\n    inet_parse_token().\n  uuid: New function uuid_random().\n  json: New function json_nullable_clone().\n  json: New function json_object_put_format().\n  log: Allow client to specify magic.\n  log: Require log entries to be JSON objects.\n  log: Make json parameter to ovsdb_log_write() const.\n  ovsdb-error: New function ovsdb_error_to_string_free().\n  ovsdb-error: New function ovsdb_error_to_json_free().\n  ovsdb-parser: New function ovsdb_parser_put_error().\n  ovsdb-data: Add OVS_WARN_UNUSED_RESULT annotations to function\n    definitions.\n  ovsdb-server: Distinguish logs from other replicas.\n  ovsdb: Drop distinction between monitors and replicas.\n  ovsdb-server: Drop 'txn' member from struct db.\n  stream-unix: Give accepted sockets distinct names for log messages.\n  test-ovsdb: Simplify code in do_trigger().\n  test-ovsdb: Triggers should wake up other triggers immediately.\n  ovsdb-client: Show even invalid data in \"dump\" output.\n  ovsdb-server: Document monitor_cond_change behavior for unmentioned\n    tables.\n  ovsdb-server: Forbid user-specified databases with reserved names.\n  jsonrpc-server: Separate changing read_only status from reconnecting.\n  table: Add --max-column-width option.\n  jsonrpc-server: Enforce uniqueness of monitor IDs.\n  jsonrpc-server: Report monitor session ID properly in error message.\n  ovsdb-idl: Document state machine.\n  ovsdb-idl: Fix assertion failure on error path parsing server reply.\n  ovsdb-idl: Fix indentation in a couple of places.\n  ovsdb-idl: Remove 'uuid' member of struct ovsdb_idl.\n  ovsdb-idl: Add comments.\n  ovsdb-idl: Fix spelling error in comment.\n  ovsdb-idl: Verify insertion into singleton tables.\n  ovsdb-idl: Break out database-specific stuff into new data structure.\n  ovn-sbctl: Allow retries by default.\n  tests: Always ignore \"Broken pipe\" and \"Connection reset\" log\n    messages.\n  reconnect: Add ability to do a number of retries without backoff.\n  ovsdb-server: Add support for a built-in _Server database.\n  ovsdb: Improve documentation.\n  ovsdb-server: Add new RPC \"set_db_change_aware\".\n  ovsdb-client: Move ovsdb-client specific tests to new .at file.\n  ovsdb: Add support for online schema conversion.\n  ovsdb-client; Add new \"get-schema-cksum\" command.\n  ovsdb-client: Add new \"backup\" command.\n  ovsdb-client: Add new \"restore\" command.\n  ovsdb-client: Add new \"query\" command.\n  ovsdb-tool: Add new \"db-name\" and \"schema-name\" commands.\n  [RFC} ovsdb: Introduce support for clustered databases.\n\n Makefile.am                         |    8 -\n NEWS                                |   12 +\n build-aux/automake.mk               |   12 +-\n build-aux/text2c                    |   16 +\n include/openvswitch/json.h          |    7 +-\n lib/.gitignore                      |    3 +\n lib/automake.mk                     |   10 +\n lib/daemon-unix.c                   |    4 +-\n lib/json.c                          |   20 +-\n lib/jsonrpc.c                       |   66 +-\n lib/jsonrpc.h                       |    5 +-\n lib/ofp-print.c                     |    1 +\n lib/ovsdb-data.c                    |  115 +-\n lib/ovsdb-data.h                    |   16 +\n lib/ovsdb-error.c                   |   29 +-\n lib/ovsdb-error.h                   |    4 +-\n lib/ovsdb-idl-provider.h            |    3 +-\n lib/ovsdb-idl.c                     | 1612 ++++++++------\n lib/ovsdb-idl.h                     |    4 +-\n lib/ovsdb-parser.c                  |   14 +-\n lib/ovsdb-parser.h                  |    3 +-\n lib/ovsdb-server-idl.ann            |    9 +\n lib/ovsdb-session.c                 |   72 +\n lib/ovsdb-session.h                 |   25 +\n lib/reconnect.c                     |   52 +-\n lib/reconnect.h                     |    3 +\n lib/socket-util.c                   |   14 +-\n lib/socket-util.h                   |    3 +-\n lib/stream-unix.c                   |   15 +-\n lib/table.c                         |   25 +-\n lib/table.h                         |   13 +-\n lib/table.man                       |    5 +\n lib/util.c                          |    7 +-\n lib/uuid.c                          |    8 +\n lib/uuid.h                          |   13 +\n manpages.mk                         |   56 +-\n ovn/controller/ovn-controller.8.xml |    5 +-\n ovn/controller/ovn-controller.c     |    1 +\n ovn/northd/ovn-northd.8.xml         |    6 +-\n ovn/utilities/ovn-sbctl.8.in        |   19 +-\n ovn/utilities/ovn-sbctl.c           |    2 +-\n ovsdb/.gitignore                    |    5 +\n ovsdb/TODO.rst                      |   64 +\n ovsdb/_server.ovsschema             |   19 +\n ovsdb/_server.xml                   |  105 +\n ovsdb/automake.mk                   |   51 +-\n ovsdb/execution.c                   |  114 +-\n ovsdb/file.c                        |  651 +-----\n ovsdb/file.h                        |   33 +-\n ovsdb/jsonrpc-server.c              |  319 ++-\n ovsdb/jsonrpc-server.h              |   12 +-\n ovsdb/log.c                         |  457 +++-\n ovsdb/log.h                         |   32 +-\n ovsdb/monitor.c                     |   73 +-\n ovsdb/monitor.h                     |   10 +-\n ovsdb/ovsdb-client.1.in             |  222 +-\n ovsdb/ovsdb-client.c                |  533 ++++-\n ovsdb/ovsdb-idlc.in                 |    8 +-\n ovsdb/ovsdb-schemas.man             |   19 +\n ovsdb/ovsdb-server.1.in             |  286 ++-\n ovsdb/ovsdb-server.c                |  539 +++--\n ovsdb/ovsdb-tool.1.in               |  227 +-\n ovsdb/ovsdb-tool.c                  |  511 ++++-\n ovsdb/ovsdb-util.c                  |   93 +-\n ovsdb/ovsdb-util.h                  |    9 +\n ovsdb/ovsdb.5.xml                   |  352 +++\n ovsdb/ovsdb.7.xml                   |  742 +++++++\n ovsdb/ovsdb.c                       |  115 +-\n ovsdb/ovsdb.h                       |   43 +-\n ovsdb/raft-private.c                |  358 +++\n ovsdb/raft-private.h                |  123 ++\n ovsdb/raft-rpc.c                    |  788 +++++++\n ovsdb/raft-rpc.h                    |  271 +++\n ovsdb/raft.c                        | 4105 +++++++++++++++++++++++++++++++++++\n ovsdb/raft.h                        |  142 ++\n ovsdb/remote-active.man             |   17 -\n ovsdb/remote-active.xml             |   30 -\n ovsdb/remote-passive.man            |   19 -\n ovsdb/remote-passive.xml            |   36 -\n ovsdb/replication-syn.man           |    2 -\n ovsdb/replication.c                 |   10 +-\n ovsdb/replication.man               |   23 -\n ovsdb/row.c                         |    3 +\n ovsdb/server.c                      |   14 +-\n ovsdb/server.h                      |    2 +-\n ovsdb/storage.c                     |  528 +++++\n ovsdb/storage.h                     |   88 +\n ovsdb/transaction.c                 |  225 +-\n ovsdb/transaction.h                 |   20 +-\n ovsdb/trigger.c                     |  250 ++-\n ovsdb/trigger.h                     |   43 +-\n python/build/nroff.py               |   15 +-\n python/ovs/reconnect.py             |   53 +-\n tests/.gitignore                    |    1 +\n tests/automake.mk                   |   13 +-\n tests/ofp-errors.at                 |   44 +-\n tests/ofp-print.at                  |   16 +-\n tests/ofp-util.at                   |   18 +-\n tests/ofproto-macros.at             |   13 +\n tests/ofproto.at                    |    2 +-\n tests/ovn-controller-vtep.at        |   14 +-\n tests/ovn-nbctl.at                  |   14 +-\n tests/ovn-sbctl.at                  |   14 +-\n tests/ovs-ofctl.at                  |   20 +-\n tests/ovsdb-client.at               |   73 +\n tests/ovsdb-cluster.at              |   78 +\n tests/ovsdb-idl.at                  |    2 +-\n tests/ovsdb-log.at                  |  225 +-\n tests/ovsdb-monitor.at              |    4 +-\n tests/ovsdb-replication.at          |   12 +-\n tests/ovsdb-server.at               |  399 +++-\n tests/ovsdb-tool.at                 |   72 +-\n tests/ovsdb-trigger.at              |    2 +-\n tests/ovsdb.at                      |    2 +\n tests/reconnect.at                  |   56 +-\n tests/test-ovsdb.c                  |   69 +-\n tests/test-raft.c                   |  303 +++\n tests/test-raft.sh                  |   13 +\n tests/test-raft2.sh                 |   12 +\n tests/test-raft3.sh                 |   14 +\n tests/test-raft4.sh                 |   37 +\n tests/test-reconnect.c              |    8 +\n tests/test-reconnect.py             |    5 +\n tests/torture-raft4.sh              |   23 +\n tutorial/ovs-sandbox                |    2 +-\n utilities/ovs-vsctl.8.in            |   21 +-\n vswitchd/ovs-vswitchd.8.in          |    7 +-\n vtep/vtep-ctl.8.in                  |   23 +-\n 128 files changed, 14116 insertions(+), 2641 deletions(-)\n create mode 100755 build-aux/text2c\n create mode 100644 lib/ovsdb-server-idl.ann\n create mode 100644 lib/ovsdb-session.c\n create mode 100644 lib/ovsdb-session.h\n create mode 100644 ovsdb/TODO.rst\n create mode 100644 ovsdb/_server.ovsschema\n create mode 100644 ovsdb/_server.xml\n create mode 100644 ovsdb/ovsdb-schemas.man\n create mode 100644 ovsdb/ovsdb.5.xml\n create mode 100644 ovsdb/ovsdb.7.xml\n create mode 100644 ovsdb/raft-private.c\n create mode 100644 ovsdb/raft-private.h\n create mode 100644 ovsdb/raft-rpc.c\n create mode 100644 ovsdb/raft-rpc.h\n create mode 100644 ovsdb/raft.c\n create mode 100644 ovsdb/raft.h\n delete mode 100644 ovsdb/remote-active.man\n delete mode 100644 ovsdb/remote-active.xml\n delete mode 100644 ovsdb/remote-passive.man\n delete mode 100644 ovsdb/remote-passive.xml\n delete mode 100644 ovsdb/replication-syn.man\n delete mode 100644 ovsdb/replication.man\n create mode 100644 ovsdb/storage.c\n create mode 100644 ovsdb/storage.h\n create mode 100644 tests/ovsdb-client.at\n create mode 100644 tests/ovsdb-cluster.at\n create mode 100644 tests/test-raft.c\n create mode 100755 tests/test-raft.sh\n create mode 100755 tests/test-raft2.sh\n create mode 100755 tests/test-raft3.sh\n create mode 100755 tests/test-raft4.sh\n create mode 100755 tests/torture-raft4.sh"}