add test case for duplicate snapshots during bootstrap
diff --git a/apigee_sync.go b/apigee_sync.go
index 2ed1546..d2b36b7 100644
--- a/apigee_sync.go
+++ b/apigee_sync.go
@@ -291,6 +291,11 @@
scopes := []string{apidInfo.ClusterID}
snapshot := downloadSnapshot(scopes)
+ storeBootSnapshot(snapshot)
+}
+
+func storeBootSnapshot(snapshot common.Snapshot) {
+ log.Debug("storeBootSnapshot", snapshot.SnapshotInfo)
// note that for boot snapshot case, we don't touch databases. We only update in-mem cache
// This aims to deal with duplicate snapshot version#, see XAPID-869 for details
scopeCache.clearAndInitCache(snapshot.SnapshotInfo)
@@ -316,11 +321,15 @@
scopes := scopeCache.readAllScope()
scopes = append(scopes, apidInfo.ClusterID)
- resp := downloadSnapshot(scopes)
+ snapshot := downloadSnapshot(scopes)
+ storeDataSnapshot(snapshot)
+}
- knownTables = extractTablesFromSnapshot(resp)
+func storeDataSnapshot(snapshot common.Snapshot) {
+ log.Debug("storeDataSnapshot", snapshot.SnapshotInfo)
+ knownTables = extractTablesFromSnapshot(snapshot)
- db, err := data.DBVersion(resp.SnapshotInfo)
+ db, err := data.DBVersion(snapshot.SnapshotInfo)
if err != nil {
log.Panicf("Database inaccessible: %v", err)
}
@@ -328,7 +337,7 @@
done := make(chan bool)
log.Info("Emitting Snapshot to plugins")
- events.EmitWithCallback(ApigeeSyncEventSelector, &resp, func(event apid.Event) {
+ events.EmitWithCallback(ApigeeSyncEventSelector, &snapshot, func(event apid.Event) {
done <- true
})
@@ -337,8 +346,11 @@
log.Panic("Timeout. Plugins failed to respond to snapshot.")
case <-done:
}
+
}
+
+
func extractTablesFromSnapshot(snapshot common.Snapshot) (tables map[string]bool) {
tables = make(map[string]bool)
diff --git a/apigee_sync_test.go b/apigee_sync_test.go
index f5142d2..07ffe18 100644
--- a/apigee_sync_test.go
+++ b/apigee_sync_test.go
@@ -80,5 +80,14 @@
Expect(getChangeStatus("2.2.1", "1.2.2")).To(Equal(-1))
Expect(getChangeStatus("2.2.1", "2.2.0")).To(Equal(-1))
})
+ /*
+ * XAPID-869
+ */
+ It("Should be able to handle duplicate snapshot during bootstrap", func() {
+ scopes := []string{apidInfo.ClusterID}
+ snapshot := downloadSnapshot(scopes)
+ storeBootSnapshot(snapshot)
+ storeDataSnapshot(snapshot)
+ })
})