Fix Prepare to be on the passed Transaction instead of DB. Old version caused hanging in odd places.
diff --git a/listener.go b/listener.go index a557a25..c8d9418 100644 --- a/listener.go +++ b/listener.go
@@ -13,8 +13,6 @@ return "ApigeeSync" } -// todo: The following was basically just copied from old APID - needs review. - func (h *handler) Handle(e apid.Event) { res := true @@ -31,11 +29,11 @@ snapData, ok := e.(*common.Snapshot) if ok { - res = processSnapshot(snapData, db, txn) + res = processSnapshot(snapData, txn) } else { changeSet, ok := e.(*common.ChangeList) if ok { - res = processChange(changeSet, db, txn) + res = processChange(changeSet, txn) } else { log.Fatal("Received Invalid event. This shouldn't happen!") } @@ -48,7 +46,7 @@ return } -func processSnapshot(snapshot *common.Snapshot, db *sql.DB, txn *sql.Tx) bool { +func processSnapshot(snapshot *common.Snapshot, txn *sql.Tx) bool { log.Debugf("Process Snapshot data") res := true @@ -57,9 +55,9 @@ switch payload.Name { case "edgex.apid_config": - res = insertApidConfig(payload.Rows, db, txn, snapshot.SnapshotInfo) + res = insertApidConfig(payload.Rows, txn, snapshot.SnapshotInfo) case "edgex.apid_config_scope": - res = insertApidConfigScopes(payload.Rows, db, txn) + res = insertApidConfigScopes(payload.Rows, txn) } if res == false { log.Error("Error encountered in Downloading Snapshot for ApidApigeeSync") @@ -69,7 +67,7 @@ return res } -func processChange(changes *common.ChangeList, db *sql.DB, txn *sql.Tx) bool { +func processChange(changes *common.ChangeList, txn *sql.Tx) bool { log.Debugf("apigeeSyncEvent: %d changes", len(changes.Changes)) var rows []common.Row @@ -82,7 +80,7 @@ switch payload.Operation { case common.Insert: rows = append(rows, payload.NewRow) - res = insertApidConfigScopes(rows, db, txn) + res = insertApidConfigScopes(rows, txn) } } if res == false { @@ -96,12 +94,12 @@ /* * INSERT INTO APP_CREDENTIAL op */ -func insertApidConfig(rows []common.Row, db *sql.DB, txn *sql.Tx, snapInfo string) bool { +func insertApidConfig(rows []common.Row, txn *sql.Tx, snapInfo string) bool { var scope, id, name, orgAppName, createdBy, updatedBy, Description string var updated, created int64 - prep, err := db.Prepare("INSERT INTO APID_CONFIG (id, _apid_scope, name, umbrella_org_app_name, created, created_by, updated, updated_by, snapshotInfo)VALUES($1,$2,$3,$4,$5,$6,$7,$8,$9);") + prep, err := txn.Prepare("INSERT INTO APID_CONFIG (id, _apid_scope, name, umbrella_org_app_name, created, created_by, updated, updated_by, snapshotInfo)VALUES($1,$2,$3,$4,$5,$6,$7,$8,$9);") if err != nil { log.Error("INSERT APID_CONFIG Failed: ", err) return false @@ -119,7 +117,8 @@ ele.Get("updated_by", &updatedBy) ele.Get("description", &Description) - _, err = txn.Stmt(prep).Exec( + s := txn.Stmt(prep) + _, err = s.Exec( id, scope, name, @@ -129,7 +128,7 @@ updated, updatedBy, snapInfo) - + s.Close() if err != nil { log.Error("INSERT APID_CONFIG Failed: ", id, ", ", scope, ")", err) return false @@ -143,12 +142,12 @@ /* * INSERT INTO APP_CREDENTIAL op */ -func insertApidConfigScopes(rows []common.Row, db *sql.DB, txn *sql.Tx) bool { +func insertApidConfigScopes(rows []common.Row, txn *sql.Tx) bool { var id, scopeId, apiConfigId, scope, createdBy, updatedBy string var created, updated int64 - prep, err := db.Prepare("INSERT INTO APID_CONFIG_SCOPE (id, _apid_scope, apid_config_id, scope, created, created_by, updated, updated_by)VALUES($1,$2,$3,$4,$5,$6,$7,$8);") + prep, err := txn.Prepare("INSERT INTO APID_CONFIG_SCOPE (id, _apid_scope, apid_config_id, scope, created, created_by, updated, updated_by)VALUES($1,$2,$3,$4,$5,$6,$7,$8);") if err != nil { log.Error("INSERT APID_CONFIG_SCOPE Failed: ", err) return false @@ -166,7 +165,8 @@ ele.Get("updated", &updated) ele.Get("updated_by", &updatedBy) - _, err = txn.Stmt(prep).Exec( + s := txn.Stmt(prep) + _, err = s.Exec( id, scopeId, apiConfigId, @@ -175,6 +175,7 @@ createdBy, updated, updatedBy) + s.Close() if err != nil { log.Error("INSERT APID_CONFIG_SCOPE Failed: ", id, ", ", scope, ")", err)