detect apid_cluster_id change in config file and boot clean
diff --git a/apigee_sync_test.go b/apigee_sync_test.go index a3ba0f5..da7be01 100644 --- a/apigee_sync_test.go +++ b/apigee_sync_test.go
@@ -198,6 +198,21 @@ }, 3) + It("should detect apid_cluster_id change in config yaml", func () { + Expect(apidInfo).ToNot(BeNil()) + Expect(apidInfo.ClusterID).To(Equal("bootstrap")) + Expect(apidInfo.InstanceID).ToNot(BeEmpty()) + previousInstanceId := apidInfo.InstanceID + + config.Set(configApidClusterId, "new value") + apidInfo, err := getApidInstanceInfo() + Expect(err).NotTo(HaveOccurred()) + Expect(apidInfo.LastSnapshot).To(BeEmpty()) + Expect(apidInfo.InstanceID).ToNot(BeEmpty()) + Expect(apidInfo.InstanceID).ToNot(Equal(previousInstanceId)) + Expect(apidInfo.ClusterID).To(Equal("new value")) + }) + It("should correctly identify non-proper subsets with respect to maps", func() { //test b proper subset of a
diff --git a/data.go b/data.go index 48f1ff7..4761373 100644 --- a/data.go +++ b/data.go
@@ -35,6 +35,7 @@ _, err := db.Exec(` CREATE TABLE IF NOT EXISTS APID ( instance_id text, + apid_cluster_id text, last_snapshot_info text, PRIMARY KEY (instance_id) ); @@ -237,6 +238,8 @@ info.InstanceName = config.GetString(configName) info.ClusterID = config.GetString(configApidClusterId) + var savedClusterId string + // always use default database for this var db apid.DB db, err = dataService.DB() @@ -244,8 +247,8 @@ return } - err = db.QueryRow("SELECT instance_id, last_snapshot_info FROM APID LIMIT 1"). - Scan(&info.InstanceID, &info.LastSnapshot) + err = db.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) @@ -257,9 +260,18 @@ info.InstanceID = generateUUID() log.Debugf("Inserting new apid instance id %s", info.InstanceID) - db.Exec("INSERT INTO APID (instance_id, last_snapshot_info) VALUES (?,?)", - info.InstanceID, "") + db.Exec("INSERT INTO APID (instance_id, apid_cluster_id, last_snapshot_info) VALUES (?,?,?)", + info.InstanceID, info.ClusterID, "") } + } else if savedClusterId != info.ClusterID { + log.Debug("Detected apid cluster id change in config. Apid will start clean") + err = nil + newInstanceID = true + info.InstanceID = generateUUID() + + db.Exec("REPLACE INTO APID (instance_id, apid_cluster_id, last_snapshot_info) VALUES (?,?,?)", + info.InstanceID, info.ClusterID, "") + info.LastSnapshot = "" } return } @@ -273,10 +285,10 @@ } rows, err := db.Exec(` - INSERT OR REPLACE - INTO APID (instance_id, last_snapshot_info) - VALUES (?, ?)`, - apidInfo.InstanceID, apidInfo.LastSnapshot) + REPLACE + INTO APID (instance_id, apid_cluster_id, last_snapshot_info) + VALUES (?,?,?)`, + apidInfo.InstanceID, apidInfo.ClusterID, apidInfo.LastSnapshot) if err != nil { return err }