diff mbox

[OSSTEST,23/33] tcl daemons: db-ensure-open, -close: Make idempotent

Message ID 1468002385-4407-24-git-send-email-ian.jackson@eu.citrix.com (mailing list archive)
State New, archived
Headers show

Commit Message

Ian Jackson July 8, 2016, 6:26 p.m. UTC
Track whether we think the connection is open in dbopen.

It is now therefore OK to call db-ensure-open and db-ensure-closed in
other contexts.

Signed-off-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
---
 tcl/JobDB-Executive.tcl | 10 ++++++++++
 1 file changed, 10 insertions(+)
diff mbox

Patch

diff --git a/tcl/JobDB-Executive.tcl b/tcl/JobDB-Executive.tcl
index da9b7e9..1763b69 100644
--- a/tcl/JobDB-Executive.tcl
+++ b/tcl/JobDB-Executive.tcl
@@ -79,6 +79,7 @@  proc set-flight {} {
 }
 
 variable dbusers 0
+variable dbopen 0 ;# 1 means known to be open and good; 0 might mean broken
 
 proc db-open {} {
     variable dbusers
@@ -96,6 +97,11 @@  proc db-close {} {
     db-ensure-closed
 }
 proc db-ensure-open {} {
+    variable dbopen
+
+    if {$dbopen} return
+    catch { db-ensure-closed } ;# clean up any detritus
+
     set pl {
 	use Osstest;
 	use Osstest::Executive;
@@ -109,8 +115,12 @@  proc db-ensure-open {} {
     # is whitespace-separated.
     regsub -all {;} $db_pg_dsn { } conninfo
     pg_connect -conninfo $conninfo -connhandle dbh
+
+    set dbopen 1
 }
 proc db-ensure-closed {} {
+    variable dbopen
+    set dbopen 0
     pg_disconnect dbh
 }