// subjInKeyspace appends an increasing number to the prefix until it finds a // string that will hash into the given keyspace. func subjInKeyspace(keyspace *protocol.Keyspace, prefix string) string { subj := prefix i := 1 for !keyspace.Includes(murmur3.Sum64([]byte(subj))) { subj = prefix + strconv.Itoa(i) i++ } return subj }
// Bloom returns a ScalableBloomFilter containing all the triples the current node has in the optional keyspace. func (ts *TripleStore) Bloom(keyspace *protocol.Keyspace) (*boom.ScalableBloomFilter, error) { filter := boom.NewDefaultScalableBloomFilter(BloomFalsePositiveRate) results, errs := ts.EachTripleBatch(DefaultTripleBatchSize) for triples := range results { for _, triple := range triples { if keyspace != nil { hash := murmur3.Sum64([]byte(triple.Subj)) if !keyspace.Includes(hash) { continue } } data, err := triple.Marshal() if err != nil { return nil, err } filter.Add(data) } } for err := range errs { return nil, err } return filter, nil }