// Merge merges the given delta into the existing one. func (d *Delta) Merge(n *Delta) { oadd := toSet(d.Additions) odel := toSet(d.Deletions) nadd := toSet(n.Additions) ndel := toSet(n.Deletions) // First remove new deletions from old adds and vice versa fadd := set.Difference(oadd, ndel) fdel := set.Difference(odel, nadd) // Now add new adds and deletions fadd = set.Union(fadd, nadd) fdel = set.Union(fdel, ndel) d.Additions = toStrings(fadd) d.Deletions = toStrings(fdel) }
// a\b func scpDiff(a, b []int) []int { sa := setFromIntSlice(a) sb := setFromIntSlice(b) sc := set.Difference(sa, sb) c := set.IntSlice(sc) orderScp(c) return c }
// Configure applies the given configuration. If there were changes, a Delta is // returned that includes the additions and deletions from the active list. If // there were no changes, or the changes couldn't be applied, this method // returns a nil Delta. func Configure(cfg *Config) *Delta { newCS := cfg.toCS() if cs != nil && cs.equals(newCS) { log.Debug("Configuration unchanged") return nil } var delta *Delta if cs == nil { delta = &Delta{ Additions: newCS.activeList, } } else { delta = &Delta{ Additions: toStrings(set.Difference(newCS.active, cs.active)), Deletions: toStrings(set.Difference(cs.active, newCS.active)), } } cs = newCS log.Debug("Applied updated configuration") return delta }
// calculateActive calculates the active sites for the given configsets and // stores them in the active property. func (cs *configsets) calculateActive() { cs.active = set.Difference(set.Union(cs.cloud, cs.add), cs.del) cs.activeList = toStrings(cs.active) }