Use defer to commit/rollback
diff --git a/data.go b/data.go
index fd4111c..3c6994b 100644
--- a/data.go
+++ b/data.go
@@ -54,6 +54,7 @@
log.Errorf("initDB(): Unable to get DB tx err: {%v}", err)
return err
}
+ defer completeTxn(tx, err)
_, err = tx.Exec(`
CREATE TABLE IF NOT EXISTS APID (
instance_id text,
@@ -63,16 +64,9 @@
);
`)
if err != nil {
- rollbackTxn(tx)
log.Errorf("initDB(): Unable to tx exec err: {%v}", err)
return err
}
- err = tx.Commit()
- if err != nil {
- rollbackTxn(tx)
- log.Errorf("initDB(): tx commit err: {%v}", err)
- return err
- }
log.Debug("Database tables created.")
return nil
}
@@ -443,17 +437,10 @@
log.Errorf("getApidInstanceInfo: Unable to get DB tx Err: {%v}", err)
return err
}
-
+ defer completeTxn(tx, err)
_, err = tx.Exec("UPDATE EDGEX_APID_CLUSTER SET last_sequence=?;", lastSequence)
if err != nil {
log.Errorf("UPDATE EDGEX_APID_CLUSTER Failed: %v", err)
- rollbackTxn(tx)
- return err
- }
- err = tx.Commit()
- if err != nil {
- log.Errorf("UPDATE EDGEX_APID_CLUSTER Tx Commit err : %v", err)
- rollbackTxn(tx)
return err
}
log.Debugf("UPDATE EDGEX_APID_CLUSTER Success: %s", lastSequence)
@@ -477,13 +464,12 @@
log.Errorf("getApidInstanceInfo: Unable to get DB tx Err: {%v}", err)
return
}
-
+ defer completeTxn(tx, err)
err = tx.QueryRow("SELECT instance_id, apid_cluster_id, last_snapshot_info FROM APID LIMIT 1").
Scan(&info.InstanceID, &savedClusterId, &info.LastSnapshot)
if err != nil {
if err != sql.ErrNoRows {
log.Errorf("Unable to retrieve apidInstanceInfo: %v", err)
- tx.Rollback()
return
} else {
// first start - no row, generate a UUID and store it
@@ -505,14 +491,6 @@
info.InstanceID, info.ClusterID, "")
info.LastSnapshot = ""
}
- if err == nil {
- err = tx.Commit()
- if err != nil {
- rollbackTxn(tx)
- }
- } else {
- rollbackTxn(tx)
- }
return
}
@@ -528,6 +506,7 @@
log.Errorf("updateApidInstanceInfo: Unable to get DB tx Err: {%v}", err)
return err
}
+ defer completeTxn(tx, err)
rows, err := tx.Exec(`
REPLACE
INTO APID (instance_id, apid_cluster_id, last_snapshot_info)
@@ -535,20 +514,11 @@
apidInfo.InstanceID, apidInfo.ClusterID, apidInfo.LastSnapshot)
if err != nil {
log.Errorf("updateApidInstanceInfo: Tx Exec Err: {%v}", err)
- rollbackTxn(tx)
return err
}
n, err := rows.RowsAffected()
if err == nil && n == 0 {
err = errors.New("no rows affected")
- rollbackTxn(tx)
- } else if err == nil {
- err = tx.Commit()
- if err != nil {
- rollbackTxn(tx)
- }
- } else {
- rollbackTxn(tx)
}
return err
diff --git a/listener.go b/listener.go
index 8635a81..0f6bc35 100644
--- a/listener.go
+++ b/listener.go
@@ -58,8 +58,17 @@
}
}
-func rollbackTxn (tx apid.Tx) {
- err := tx.Rollback()
+
+func completeTxn (tx apid.Tx, err error) {
+ if err == nil {
+ err = tx.Commit()
+ if err == nil {
+ log.Debugf("Transaction committed successfully")
+ return
+ }
+ log.Errorf("Transaction commit failed with error : {%v}", err)
+ }
+ err = tx.Rollback()
if err != nil {
log.Panicf("Unable to rollback Transaction. DB in inconsistent state. Err {%v}", err)
}
@@ -72,7 +81,7 @@
if err != nil {
log.Panicf("Unable to open DB txn: {%v}", err.Error())
}
-
+ defer completeTxn(tx, err)
err = tx.QueryRow("SELECT COUNT(*) FROM edgex_apid_cluster").Scan(&numApidClusters)
if err != nil {
log.Panicf("Unable to read database: {%s}", err.Error())
@@ -85,17 +94,11 @@
_, err = tx.Exec("ALTER TABLE edgex_apid_cluster ADD COLUMN last_sequence text DEFAULT ''")
if err != nil {
if err.Error() == "duplicate column name: last_sequence" {
- rollbackTxn(tx)
return
} else {
log.Panicf("Unable to create last_sequence column on DB. Error {%v}", err.Error())
}
}
- err = tx.Commit()
- if err != nil {
- rollbackTxn(tx)
- return
- }
}
func processChangeList(changes *common.ChangeList) bool {
@@ -107,7 +110,7 @@
log.Panicf("Error processing ChangeList: %v", err)
return ok
}
- defer tx.Rollback()
+ defer completeTxn(tx, err)
log.Debugf("apigeeSyncEvent: %d changes", len(changes.Changes))
@@ -132,11 +135,5 @@
}
}
- err = tx.Commit()
- if err != nil {
- log.Panicf("Error processing ChangeList: %v", err)
- return false
- }
-
return ok
}