From f973f2af2fd4452c8e182caf6a4346cf2a2a394e Mon Sep 17 00:00:00 2001
From: Ben Pfaff <blp@nicira.com>
Date: Fri, 27 Jul 2012 15:52:21 -0700
Subject: [PATCH 1/7] Make the location of the database separately configurable.

The default is unchanged, /etc/openvswitch/conf.db.

This makes it possible to transition each Open vSwitch packaging from
/etc/openvswitch/conf.db to /var/lib/openvswitch/conf.db independently.

Signed-off-by: Ben Pfaff <blp@nicira.com>
---
 Makefile.am                                           |    1 +
 configure.ac                                          |    1 +
 lib/automake.mk                                       |    2 ++
 lib/dirs.c.in                                         |    7 +++++++
 lib/dirs.h                                            |    1 +
 m4/openvswitch.m4                                     |   10 ++++++++++
 ovsdb/ovsdb-server.1.in                               |    2 +-
 ovsdb/ovsdb-server.c                                  |    2 +-
 python/automake.mk                                    |    1 +
 python/ovs/dirs.py                                    |    1 +
 tests/ofproto-macros.at                               |    3 ++-
 tests/ovs-monitor-ipsec.at                            |    1 +
 tests/ovs-xapi-sync.at                                |    1 +
 utilities/bugtool/ovs-bugtool.in                      |    2 +-
 utilities/bugtool/plugins/system-logs/openvswitch.xml |    3 ++-
 utilities/ovs-ctl.8                                   |    3 ++-
 utilities/ovs-ctl.in                                  |    7 ++++---
 utilities/ovs-lib.in                                  |    2 ++
 18 files changed, 41 insertions(+), 9 deletions(-)

Index: b/Makefile.am
===================================================================
--- a/Makefile.am
+++ b/Makefile.am
@@ -96,6 +96,7 @@ SUFFIXES += .in
 	    sed \
 		-e 's,[@]PKIDIR[@],$(PKIDIR),g' \
                 -e 's,[@]LOGDIR[@],$(LOGDIR),g' \
+                -e 's,[@]DBDIR[@],$(DBDIR),g' \
                 -e 's,[@]PERL[@],$(PERL),g' \
                 -e 's,[@]PYTHON[@],$(PYTHON),g' \
                 -e 's,[@]RUNDIR[@],$(RUNDIR),g' \
Index: b/configure.ac
===================================================================
--- a/configure.ac
+++ b/configure.ac
@@ -61,6 +61,7 @@ AC_CHECK_HEADERS([mntent.h sys/statvfs.h
 
 OVS_CHECK_PKIDIR
 OVS_CHECK_RUNDIR
+OVS_CHECK_DBDIR
 OVS_CHECK_BACKTRACE
 OVS_CHECK_MALLOC_HOOKS
 OVS_CHECK_VALGRIND
Index: b/lib/automake.mk
===================================================================
--- a/lib/automake.mk
+++ b/lib/automake.mk
@@ -271,6 +271,7 @@ lib/dirs.c: lib/dirs.c.in Makefile
 		-e 's,[@]srcdir[@],$(srcdir),g' \
 		-e 's,[@]LOGDIR[@],"$(LOGDIR)",g' \
 		-e 's,[@]RUNDIR[@],"$(RUNDIR)",g' \
+		-e 's,[@]DBDIR[@],"$(DBDIR)",g' \
 		-e 's,[@]bindir[@],"$(bindir)",g' \
 		-e 's,[@]sysconfdir[@],"$(sysconfdir)",g' \
 		-e 's,[@]pkgdatadir[@],"$(pkgdatadir)",g') \
@@ -290,6 +291,7 @@ lib-install-data-local:
 	$(MKDIR_P) $(DESTDIR)$(RUNDIR)
 	$(MKDIR_P) $(DESTDIR)$(PKIDIR)
 	$(MKDIR_P) $(DESTDIR)$(LOGDIR)
+	$(MKDIR_P) $(DESTDIR)$(DBDIR)
 
 if !USE_LINKER_SECTIONS
 # All distributed sources, with names adjust properly for referencing
Index: b/lib/dirs.c.in
===================================================================
--- a/lib/dirs.c.in
+++ b/lib/dirs.c.in
@@ -66,6 +66,13 @@ ovs_logdir(void)
 }
 
 const char *
+ovs_dbdir(void)
+{
+    static struct directory d = { NULL, @DBDIR@, "OVS_DBDIR" };
+    return get_dir(&d);
+}
+
+const char *
 ovs_bindir(void)
 {
     static struct directory d = { NULL, @bindir@, "OVS_BINDIR" };
Index: b/lib/dirs.h
===================================================================
--- a/lib/dirs.h
+++ b/lib/dirs.h
@@ -21,6 +21,7 @@ const char *ovs_sysconfdir(void); /* /us
 const char *ovs_pkgdatadir(void); /* /usr/local/share/openvswitch */
 const char *ovs_rundir(void);     /* /usr/local/var/run/openvswitch */
 const char *ovs_logdir(void);     /* /usr/local/var/log/openvswitch */
+const char *ovs_dbdir(void);      /* /usr/local/etc/openvswitch */
 const char *ovs_bindir(void);     /* /usr/local/bin */
 
 #endif /* dirs.h */
Index: b/m4/openvswitch.m4
===================================================================
--- a/m4/openvswitch.m4
+++ b/m4/openvswitch.m4
@@ -132,6 +132,16 @@ AC_DEFUN([OVS_CHECK_LOGDIR],
      [LOGDIR='${localstatedir}/log/${PACKAGE}'])
    AC_SUBST([LOGDIR])])
 
+dnl Checks for the directory in which to store the Open vSwitch database.
+AC_DEFUN([OVS_CHECK_DBDIR],
+  [AC_ARG_WITH(
+     [dbdir],
+     AC_HELP_STRING([--with-dbdir=DIR],
+                    [directory used for conf.db [[SYSCONFDIR/PACKAGE]]]),
+     [DBDIR=$withval],
+     [DBDIR='${sysconfdir}/${PACKAGE}'])
+   AC_SUBST([DBDIR])])
+
 dnl Defines HAVE_BACKTRACE if backtrace() is declared in <execinfo.h>
 dnl and exists in libc.
 AC_DEFUN([OVS_CHECK_BACKTRACE],
Index: b/ovsdb/ovsdb-server.1.in
===================================================================
--- a/ovsdb/ovsdb-server.1.in
+++ b/ovsdb/ovsdb-server.1.in
@@ -26,7 +26,7 @@ vSwitch database (OVSDB).  It supports J
 over active or passive TCP/IP or Unix domain sockets.
 .PP
 The OVSDB file may be specified on the command line as \fIdatabase\fR.
-The default is \fB@sysconfdir@/openvswitch/conf.db\fR.  The database
+The default is \fB@DBDIR@/conf.db\fR.  The database
 file must already have been created and initialized using, for
 example, \fBovsdb\-tool create\fR.
 .
Index: b/ovsdb/ovsdb-server.c
===================================================================
--- a/ovsdb/ovsdb-server.c
+++ b/ovsdb/ovsdb-server.c
@@ -748,7 +748,7 @@ parse_options(int argc, char *argv[], ch
 
     switch (argc) {
     case 0:
-        *file_namep = xasprintf("%s/openvswitch/conf.db", ovs_sysconfdir());
+        *file_namep = xasprintf("%s/conf.db", ovs_dbdir());
         break;
 
     case 1:
Index: b/python/automake.mk
===================================================================
--- a/python/automake.mk
+++ b/python/automake.mk
@@ -40,6 +40,7 @@ ovs-install-data-local:
 	 echo 'PKGDATADIR = os.environ.get("OVS_PKGDATADIR", """$(pkgdatadir)""")' && \
 	 echo 'RUNDIR = os.environ.get("OVS_RUNDIR", """@RUNDIR@""")' && \
 	 echo 'LOGDIR = os.environ.get("OVS_LOGDIR", """@LOGDIR@""")' && \
+	 echo 'DBDIR = os.environ.get("OVS_DBDIR", """@DBDIR@""")' && \
 	 echo 'BINDIR = os.environ.get("OVS_BINDIR", """$(bindir)""")') \
 		> python/ovs/dirs.py.tmp
 	$(MKDIR_P) $(DESTDIR)$(pkgdatadir)/python/ovs
Index: b/python/ovs/dirs.py
===================================================================
--- a/python/ovs/dirs.py
+++ b/python/ovs/dirs.py
@@ -5,4 +5,5 @@ import os
 PKGDATADIR = os.environ.get("OVS_PKGDATADIR", "/usr/local/share/openvswitch")
 RUNDIR = os.environ.get("OVS_RUNDIR", "/var/run")
 LOGDIR = os.environ.get("OVS_LOGDIR", "/usr/local/var/log")
+LOGDIR = os.environ.get("OVS_DBDIR", "/usr/local/etc/openvswitch")
 BINDIR = os.environ.get("OVS_BINDIR", "/usr/local/bin")
Index: b/tests/ofproto-macros.at
===================================================================
--- a/tests/ofproto-macros.at
+++ b/tests/ofproto-macros.at
@@ -5,13 +5,14 @@ m4_define([TESTABLE_LOG], [-vPATTERN:ANY
 m4_define([OVS_VSWITCHD_START],
   [OVS_RUNDIR=$PWD; export OVS_RUNDIR
    OVS_LOGDIR=$PWD; export OVS_LOGDIR
+   OVS_DBDIR=`pwd`; export OVS_DBDIR
    OVS_SYSCONFDIR=$PWD; export OVS_SYSCONFDIR
    trap 'kill `cat ovsdb-server.pid ovs-vswitchd.pid`' 0
 
    dnl Create database.
    mkdir openvswitch
    touch openvswitch/.conf.db.~lock~
-   AT_CHECK([ovsdb-tool create openvswitch/conf.db $abs_top_srcdir/vswitchd/vswitch.ovsschema])
+   AT_CHECK([ovsdb-tool create conf.db $abs_top_srcdir/vswitchd/vswitch.ovsschema])
 
    dnl Start ovsdb-server.
    AT_CHECK([ovsdb-server --detach --pidfile --log-file --remote=punix:$OVS_RUNDIR/db.sock], [0], [], [stderr])
Index: b/tests/ovs-monitor-ipsec.at
===================================================================
--- a/tests/ovs-monitor-ipsec.at
+++ b/tests/ovs-monitor-ipsec.at
@@ -3,6 +3,7 @@ AT_BANNER([ovs-monitor-ipsec])
 AT_SETUP([ovs-monitor-ipsec])
 AT_SKIP_IF([test $HAVE_PYTHON = no])
 
+OVS_DBDIR=`pwd`; export OVS_DBDIR
 OVS_PKGDATADIR=`pwd`; export OVS_PKGDATADIR
 cp "$top_srcdir/vswitchd/vswitch.ovsschema" .
 
Index: b/tests/ovs-xapi-sync.at
===================================================================
--- a/tests/ovs-xapi-sync.at
+++ b/tests/ovs-xapi-sync.at
@@ -8,6 +8,7 @@ cp "$top_srcdir/tests/MockXenAPI.py" Xen
 PYTHONPATH=`pwd`:$PYTHONPATH
 export PYTHONPATH
 
+OVS_DBDIR=`pwd`; export OVS_DBDIR
 OVS_PKGDATADIR=`pwd`; export OVS_PKGDATADIR
 cp "$top_srcdir/vswitchd/vswitch.ovsschema" .
 
Index: b/utilities/bugtool/ovs-bugtool.in
===================================================================
--- a/utilities/bugtool/ovs-bugtool.in
+++ b/utilities/bugtool/ovs-bugtool.in
@@ -115,7 +115,7 @@ OPENVSWITCH_LOG_DIR = '@LOGDIR@/'
 OPENVSWITCH_DEFAULT_SWITCH = '/etc/default/openvswitch-switch' # Debian
 OPENVSWITCH_SYSCONFIG_SWITCH = '/etc/sysconfig/openvswitch'    # RHEL
 OPENVSWITCH_DEFAULT_CONTROLLER = '/etc/default/openvswitch-controller'
-OPENVSWITCH_CONF_DB = '@sysconfdir@/openvswitch/conf.db'
+OPENVSWITCH_CONF_DB = '@DBDIR@/conf.db'
 OPENVSWITCH_VSWITCHD_PID = '@RUNDIR@/ovs-vswitchd.pid'
 COLLECTD_LOGS_DIR = '/var/lib/collectd/rrd'
 VAR_LOG_DIR = '/var/log/'
Index: b/utilities/bugtool/plugins/system-logs/openvswitch.xml
===================================================================
--- a/utilities/bugtool/plugins/system-logs/openvswitch.xml
+++ b/utilities/bugtool/plugins/system-logs/openvswitch.xml
@@ -13,9 +13,10 @@
  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
  USA.
 
- Copyright (C) 2011 Nicira Networks.
+ Copyright (C) 2011, 2012 Nicira Networks.
 -->
 
 <collect>
   <directory label="ovsdb-backups" pattern=".*/conf.db.backup[0-9][^/]*$">/etc/openvswitch</directory>
+  <directory label="ovsdb-backups2" pattern=".*/conf.db.backup[0-9][^/]*$">/var/lib/openvswitch</directory>
 </collect>
Index: b/utilities/ovs-ctl.8
===================================================================
--- a/utilities/ovs-ctl.8
+++ b/utilities/ovs-ctl.8
@@ -361,6 +361,7 @@ that it runs.  \fBovs\-ctl\fR will add t
 .
 .IP "\fBOVS_LOGDIR\fR"
 .IQ "\fBOVS_RUNDIR\fR"
+.IQ "\fBOVS_DBDIR\fR"
 .IQ "\fBOVS_SYSCONFDIR\fR"
 .IQ "\fBOVS_PKGDATADIR\fR"
 .IQ "\fBOVS_BINDIR\fR"
@@ -388,7 +389,7 @@ process ID.
 The OVS database schema used to initialize the database (use
 \fB\-\-db\-schema to override this location).
 .
-.IP "\fIsysconfdir\fB/openvswitch/conf.db\fR"
+.IP "\fIdbdir\fB/conf.db\fR"
 The OVS database (use \fB\-\-db\-file\fR to override this location).
 .
 .IP "\fIrundir\fB/openvswitch/db.sock\fR"
Index: b/utilities/ovs-ctl.in
===================================================================
--- a/utilities/ovs-ctl.in
+++ b/utilities/ovs-ctl.in
@@ -371,7 +371,7 @@ set_defaults () {
     OVS_VSWITCHD_PRIORITY=-10
     OVS_BRCOMPATD_PRIORITY=-10
 
-    DB_FILE=$etcdir/conf.db
+    DB_FILE=$dbdir/conf.db
     DB_SOCK=$rundir/db.sock
     DB_SCHEMA=$datadir/vswitch.ovsschema
 
@@ -447,8 +447,9 @@ Other options:
   -V, --version               display version information
 
 Default directories with "configure" option and environment variable override:
-  logs: @LOGDIR@ (--log-dir, OVS_LOGDIR)
-  pidfiles and sockets: @RUNDIR@ (--run-dir, OVS_RUNDIR)
+  logs: @LOGDIR@ (--with-logdir, OVS_LOGDIR)
+  pidfiles and sockets: @RUNDIR@ (--with-rundir, OVS_RUNDIR)
+  conf.db: @DBDIR@ (--with-dbdir, OVS_DBDIR)
   system configuration: @sysconfdir@ (--sysconfdir, OVS_SYSCONFDIR)
   data files: @pkgdatadir@ (--pkgdatadir, OVS_PKGDATADIR)
   user binaries: @bindir@ (--bindir, OVS_BINDIR)
Index: b/utilities/ovs-lib.in
===================================================================
--- a/utilities/ovs-lib.in
+++ b/utilities/ovs-lib.in
@@ -22,6 +22,8 @@
 # All of these should be substituted by the Makefile at build time.
 logdir=${OVS_LOGDIR-'@LOGDIR@'}                 # /var/log/openvswitch
 rundir=${OVS_RUNDIR-'@RUNDIR@'}                 # /var/run/openvswitch
+dbdir=${OVS_DBDIR-'@DBDIR@'}                    # /etc/openvswitch
+                                                # or /var/lib/openvswitch
 sysconfdir=${OVS_SYSCONFDIR-'@sysconfdir@'}     # /etc
 etcdir=$sysconfdir/openvswitch                  # /etc/openvswitch
 datadir=${OVS_PKGDATADIR-'@pkgdatadir@'}        # /usr/share/openvswitch
