Skip to content

Commit

Permalink
docs: Only regenerate vswitch.pic when the schema really changes.
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
blp committed Dec 6, 2010
1 parent 4230c96 commit 7c9b007
Show file tree
Hide file tree
Showing 5 changed files with 124 additions and 25 deletions.
2 changes: 1 addition & 1 deletion configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -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],
Expand Down
15 changes: 1 addition & 14 deletions m4/openvswitch.m4
Original file line number Diff line number Diff line change
Expand Up @@ -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],
Expand Down
37 changes: 27 additions & 10 deletions vswitchd/automake.mk
Original file line number Diff line number Diff line change
Expand Up @@ -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 \
> [email protected]
mv [email protected] $@
#
# 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
Expand Down
94 changes: 94 additions & 0 deletions vswitchd/vswitch.gv
Original file line number Diff line number Diff line change
@@ -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"];
}
1 change: 1 addition & 0 deletions vswitchd/vswitch.pic
Original file line number Diff line number Diff line change
@@ -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"
Expand Down

0 comments on commit 7c9b007

Please sign in to comment.