Code refactor.
diff --git a/listener.go b/listener.go index 6a9c8ec..a557a25 100644 --- a/listener.go +++ b/listener.go
@@ -17,68 +17,86 @@ func (h *handler) Handle(e apid.Event) { - snapData, ok := e.(*common.Snapshot) - if ok { - processSnapshot(snapData) - } else { - changeSet, ok := e.(*common.ChangeList) - if ok { - processChange(changeSet) - } else { - log.Errorf("Received Invalid event. This shouldn't happen!") - } - } - return -} - -func processSnapshot(snapshot *common.Snapshot) { - - log.Debugf("Process Snapshot data") + res := true db, err := data.DB() if err != nil { panic("Unable to access Sqlite DB") } + txn, err := db.Begin() + if err != nil { + log.Error("Unable to create Sqlite transaction") + return + } + + snapData, ok := e.(*common.Snapshot) + if ok { + res = processSnapshot(snapData, db, txn) + } else { + changeSet, ok := e.(*common.ChangeList) + if ok { + res = processChange(changeSet, db, txn) + } else { + log.Fatal("Received Invalid event. This shouldn't happen!") + } + } + if res == true { + txn.Commit() + } else { + txn.Rollback() + } + return +} + +func processSnapshot(snapshot *common.Snapshot, db *sql.DB, txn *sql.Tx) bool { + + log.Debugf("Process Snapshot data") + res := true for _, payload := range snapshot.Tables { switch payload.Name { case "edgex.apid_config": - for _, row := range payload.Rows { - insertApidConfig(row, db, snapshot.SnapshotInfo) - } + res = insertApidConfig(payload.Rows, db, txn, snapshot.SnapshotInfo) case "edgex.apid_config_scope": - insertApidConfigScopes(payload.Rows, db) + res = insertApidConfigScopes(payload.Rows, db, txn) + } + if res == false { + log.Error("Error encountered in Downloading Snapshot for ApidApigeeSync") + return res } } + return res } -func processChange(changes *common.ChangeList) { +func processChange(changes *common.ChangeList, db *sql.DB, txn *sql.Tx) bool { log.Debugf("apigeeSyncEvent: %d changes", len(changes.Changes)) var rows []common.Row - db, err := data.DB() - if err != nil { - panic("Unable to access Sqlite DB") - } + res := true for _, payload := range changes.Changes { rows = nil switch payload.Table { case "edgex.apid_config_scope": switch payload.Operation { - case 1: + case common.Insert: rows = append(rows, payload.NewRow) - insertApidConfigScopes(rows, db) + res = insertApidConfigScopes(rows, db, txn) } } + if res == false { + log.Error("Sql Operation error. Operation rollbacked") + return res + } } + return res } /* * INSERT INTO APP_CREDENTIAL op */ -func insertApidConfig(ele common.Row, db *sql.DB, snapInfo string) bool { +func insertApidConfig(rows []common.Row, db *sql.DB, txn *sql.Tx, snapInfo string) bool { var scope, id, name, orgAppName, createdBy, updatedBy, Description string var updated, created int64 @@ -88,46 +106,44 @@ log.Error("INSERT APID_CONFIG Failed: ", err) return false } + defer prep.Close() - txn, err := db.Begin() + for _, ele := range rows { + ele.Get("id", &id) + ele.Get("_apid_scope", &scope) + ele.Get("name", &name) + ele.Get("umbrella_org_app_name", &orgAppName) + ele.Get("created", &created) + ele.Get("created_by", &createdBy) + ele.Get("updated", &updated) + ele.Get("updated_by", &updatedBy) + ele.Get("description", &Description) - ele.Get("id", &id) - ele.Get("_apid_scope", &scope) - ele.Get("name", &name) - ele.Get("umbrella_org_app_name", &orgAppName) - ele.Get("created", &created) - ele.Get("created_by", &createdBy) - ele.Get("updated", &updated) - ele.Get("updated_by", &updatedBy) - ele.Get("description", &Description) + _, err = txn.Stmt(prep).Exec( + id, + scope, + name, + orgAppName, + created, + createdBy, + updated, + updatedBy, + snapInfo) - _, err = txn.Stmt(prep).Exec( - id, - scope, - name, - orgAppName, - created, - createdBy, - updated, - updatedBy, - snapInfo) - - if err != nil { - log.Error("INSERT APID_CONFIG Failed: ", id, ", ", scope, ")", err) - txn.Rollback() - return false - } else { - log.Info("INSERT APID_CONFIG Success: (", id, ", ", scope, ")") - txn.Commit() - return true + if err != nil { + log.Error("INSERT APID_CONFIG Failed: ", id, ", ", scope, ")", err) + return false + } else { + log.Info("INSERT APID_CONFIG Success: (", id, ", ", scope, ")") + } } - + return true } /* * INSERT INTO APP_CREDENTIAL op */ -func insertApidConfigScopes(rows []common.Row, db *sql.DB) bool { +func insertApidConfigScopes(rows []common.Row, db *sql.DB, txn *sql.Tx) bool { var id, scopeId, apiConfigId, scope, createdBy, updatedBy string var created, updated int64 @@ -137,8 +153,8 @@ log.Error("INSERT APID_CONFIG_SCOPE Failed: ", err) return false } + defer prep.Close() - txn, err := db.Begin() for _, ele := range rows { ele.Get("id", &id) @@ -162,12 +178,10 @@ if err != nil { log.Error("INSERT APID_CONFIG_SCOPE Failed: ", id, ", ", scope, ")", err) - txn.Rollback() return false } else { log.Info("INSERT APID_CONFIG_SCOPE Success: (", id, ", ", scope, ")") } } - txn.Commit() return true }