From 7c9b00732c633ddd35b9d92fb9fa4c4f8e3ce390 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Mon, 6 Dec 2010 09:56:38 -0800 Subject: [PATCH] docs: Only regenerate vswitch.pic when the schema really changes. Until now, vswitch.pic has been rebuilt whenever the schema changed. This is OK when the E-R diagram would really change, but many changes to the schema don't change the E-R diagram, and it surprises people when vswitch.pic changes in such a situation. This commit fixes the problem. Requested-by: Justin Pettit --- configure.ac | 2 +- m4/openvswitch.m4 | 15 +------ vswitchd/automake.mk | 37 ++++++++++++----- vswitchd/vswitch.gv | 94 ++++++++++++++++++++++++++++++++++++++++++++ vswitchd/vswitch.pic | 1 + 5 files changed, 124 insertions(+), 25 deletions(-) create mode 100644 vswitchd/vswitch.gv diff --git a/configure.ac b/configure.ac index 8a5dc5ce..adeb956c 100644 --- a/configure.ac +++ b/configure.ac @@ -50,7 +50,7 @@ OVS_CHECK_LOGDIR OVS_CHECK_PYTHON OVS_CHECK_PYUIC4 OVS_CHECK_OVSDBMONITOR -OVS_CHECK_ER_DIAGRAMS +OVS_CHECK_DOT OVS_CHECK_IF_PACKET OVS_CHECK_STRTOK_R AC_CHECK_MEMBERS([struct stat.st_mtim.tv_nsec, struct stat.st_mtimensec], diff --git a/m4/openvswitch.m4 b/m4/openvswitch.m4 index 6dda3508..077c29b9 100644 --- a/m4/openvswitch.m4 +++ b/m4/openvswitch.m4 @@ -202,21 +202,8 @@ AC_DEFUN([OVS_CHECK_DOT], ovs_cv_dot=yes else ovs_cv_dot=no - fi])]) - -dnl Check whether to build E-R diagrams. -AC_DEFUN([OVS_CHECK_ER_DIAGRAMS], - [AC_REQUIRE([OVS_CHECK_DOT]) - AC_REQUIRE([OVS_CHECK_PYTHON]) - AC_CACHE_CHECK( - [whether to build E-R diagrams for database], - [ovs_cv_er_diagrams], - [if test $ovs_cv_dot != no && test $ovs_cv_python != no; then - ovs_cv_er_diagrams=yes - else - ovs_cv_er_diagrams=no fi]) - AM_CONDITIONAL([BUILD_ER_DIAGRAMS], [test $ovs_cv_er_diagrams = yes])]) + AM_CONDITIONAL([HAVE_DOT], [test "$ovs_cv_dot" = yes])]) dnl Checks for pyuic4. AC_DEFUN([OVS_CHECK_PYUIC4], diff --git a/vswitchd/automake.mk b/vswitchd/automake.mk index 6ef77634..4c3c0762 100644 --- a/vswitchd/automake.mk +++ b/vswitchd/automake.mk @@ -49,19 +49,36 @@ vswitchd/vswitch-idl.ovsidl: $(VSWITCH_IDL_FILES) mv $@.tmp $@ # vswitch E-R diagram -if BUILD_ER_DIAGRAMS -$(srcdir)/vswitchd/vswitch.pic: ovsdb/ovsdb-dot.in ovsdb/dot2pic \ - vswitchd/vswitch.ovsschema - $(OVSDB_DOT) $(srcdir)/vswitchd/vswitch.ovsschema \ - | dot -T plain \ - | $(srcdir)/ovsdb/dot2pic \ - > $@.tmp - mv $@.tmp $@ +# +# There are two complications here. First, if "python" or "dot" is not +# available, then we have to just use the existing diagram. Second, different +# "dot" versions produce slightly different output for the same input, but we +# don't want to gratuitously change vswitch.pic if someone tweaks the schema in +# some minor way that doesn't affect the table structure. To avoid that we +# store a checksum of vswitch.gv in vswitch.pic and only regenerate vswitch.pic +# if vswitch.gv actually changes. +$(srcdir)/vswitchd/vswitch.gv: ovsdb/ovsdb-dot.in vswitchd/vswitch.ovsschema +if HAVE_PYTHON + $(OVSDB_DOT) $(srcdir)/vswitchd/vswitch.ovsschema > $@ +else + touch $@ +endif +$(srcdir)/vswitchd/vswitch.pic: $(srcdir)/vswitchd/vswitch.gv ovsdb/dot2pic +if HAVE_DOT + sum=`cksum < $(srcdir)/vswitchd/vswitch.gv`; \ + if grep "$$sum" $@ >/dev/null 2>&1; then \ + echo "vswitch.gv unchanged, not regenerating vswitch.pic"; \ + touch $@; \ + else \ + echo "regenerating vswitch.pic"; \ + (echo ".\\\" Generated from vswitch.gv with cksum \"$$sum\""; \ + dot -T plain < $(srcdir)/vswitchd/vswitch.gv \ + | $(srcdir)/ovsdb/dot2pic) > $@; \ + fi else -$(srcdir)/vswitchd/vswitch.pic: ovsdb/ovsdb-dot.in vswitchd/vswitch.ovsschema touch $@ endif -EXTRA_DIST += vswitchd/vswitch.pic +EXTRA_DIST += vswitchd/vswitch.gv vswitchd/vswitch.pic # vswitch schema documentation EXTRA_DIST += vswitchd/vswitch.xml diff --git a/vswitchd/vswitch.gv b/vswitchd/vswitch.gv new file mode 100644 index 00000000..1ab56e65 --- /dev/null +++ b/vswitchd/vswitch.gv @@ -0,0 +1,94 @@ +digraph Open_vSwitch { + size="6.5,4"; + margin="0"; + node [shape=box]; + edge [dir=none, arrowhead=none, arrowtail=none]; + Bridge; + Bridge -> sFlow [label="sflow"]; + Bridge -> Mirror [label="mirrors"]; + Bridge -> Port [label="ports"]; + Bridge -> Controller [label="controller"]; + Bridge -> NetFlow [label="netflow"]; + size="6.5,4"; + margin="0"; + node [shape=box]; + edge [dir=none, arrowhead=none, arrowtail=none]; + QoS; + QoS -> Queue [label="queues value"]; + size="6.5,4"; + margin="0"; + node [shape=box]; + edge [dir=none, arrowhead=none, arrowtail=none]; + Monitor; + Monitor -> Maintenance_Point [label="remote_mps"]; + size="6.5,4"; + margin="0"; + node [shape=box]; + edge [dir=none, arrowhead=none, arrowtail=none]; + sFlow; + size="6.5,4"; + margin="0"; + node [shape=box]; + edge [dir=none, arrowhead=none, arrowtail=none]; + Open_vSwitch; + Open_vSwitch -> Bridge [label="bridges"]; + Open_vSwitch -> Capability [label="capabilities value"]; + Open_vSwitch -> SSL [label="ssl"]; + Open_vSwitch -> Manager [label="manager_options"]; + size="6.5,4"; + margin="0"; + node [shape=box]; + edge [dir=none, arrowhead=none, arrowtail=none]; + Controller; + size="6.5,4"; + margin="0"; + node [shape=box]; + edge [dir=none, arrowhead=none, arrowtail=none]; + Queue; + size="6.5,4"; + margin="0"; + node [shape=box]; + edge [dir=none, arrowhead=none, arrowtail=none]; + SSL; + size="6.5,4"; + margin="0"; + node [shape=box]; + edge [dir=none, arrowhead=none, arrowtail=none]; + Manager; + size="6.5,4"; + margin="0"; + node [shape=box]; + edge [dir=none, arrowhead=none, arrowtail=none]; + Capability; + size="6.5,4"; + margin="0"; + node [shape=box]; + edge [dir=none, arrowhead=none, arrowtail=none]; + Mirror; + Mirror -> Port [constraint=false, label="select_src_port"]; + Mirror -> Port [constraint=false, label="output_port"]; + Mirror -> Port [constraint=false, label="select_dst_port"]; + size="6.5,4"; + margin="0"; + node [shape=box]; + edge [dir=none, arrowhead=none, arrowtail=none]; + Interface; + Interface -> Monitor [label="monitor"]; + size="6.5,4"; + margin="0"; + node [shape=box]; + edge [dir=none, arrowhead=none, arrowtail=none]; + NetFlow; + size="6.5,4"; + margin="0"; + node [shape=box]; + edge [dir=none, arrowhead=none, arrowtail=none]; + Maintenance_Point; + size="6.5,4"; + margin="0"; + node [shape=box]; + edge [dir=none, arrowhead=none, arrowtail=none]; + Port; + Port -> QoS [label="qos"]; + Port -> Interface [label="interfaces"]; +} diff --git a/vswitchd/vswitch.pic b/vswitchd/vswitch.pic index 507a89b9..99bcaaae 100644 --- a/vswitchd/vswitch.pic +++ b/vswitchd/vswitch.pic @@ -1,3 +1,4 @@ +.\" Generated from vswitch.gv with cksum "3734436941 2390" .PS linethick = 1; box at 2.320997253,3.1110975 wid 0.5020540998 height 0.296295 "Bridge" -- 2.30.2