// Init starts a back ground process that feeds test and digest information // to the diffstore to continously calculate diffs for new digests. func Init(storages *storage.Storage) { go func() { // TODO(stephana): Once we have events that signal that a new tile // is available, we want to process new tiles immediately instead // of polling every so often. tileStream := storages.GetTileStreamNow(2*time.Minute, true) for { tile := <-tileStream tileLen := tile.LastCommitIndex() + 1 // digestSets is a map [testname] map [diget] bool. digestSets := map[string]map[string]bool{} for _, trace := range tile.Traces { gTrace := trace.(*types.GoldenTrace) testName := trace.Params()[types.PRIMARY_KEY_FIELD] for _, digest := range gTrace.Values[:tileLen] { if digest != types.MISSING_DIGEST { if _, ok := digestSets[testName]; !ok { digestSets[testName] = map[string]bool{} } digestSets[testName][digest] = true } } } storages.DiffStore.SetDigestSets(digestSets) } }() }