21123: Fix inadvertent use of run-tests db in dispatcher tests.
[arvados.git] / lib / ctrlctx / db.go
index 2a05096ce18b7430e7e1e487dd5d710024ac9193..d33fd8ab53cfe1525a65329d1a5f0cfa2b9c7214 100644 (file)
@@ -69,7 +69,7 @@ type finishFunc func(*error)
 // commit or rollback the transaction, if any.
 //
 //     func example(ctx context.Context) (err error) {
-//             ctx, finishtx := New(ctx, dber)
+//             ctx, finishtx := New(ctx, getdb)
 //             defer finishtx(&err)
 //             // ...
 //             tx, err := CurrentTx(ctx)
@@ -168,8 +168,20 @@ func (dbc *DBConnector) GetDB(ctx context.Context) (*sqlx.DB, error) {
        }
        if err := db.Ping(); err != nil {
                ctxlog.FromContext(ctx).WithError(err).Error("postgresql connect succeeded but ping failed")
+               db.Close()
                return nil, errDBConnection
        }
        dbc.pgdb = db
        return db, nil
 }
+
+func (dbc *DBConnector) Close() error {
+       dbc.mtx.Lock()
+       defer dbc.mtx.Unlock()
+       var err error
+       if dbc.pgdb != nil {
+               err = dbc.pgdb.Close()
+               dbc.pgdb = nil
+       }
+       return err
+}