func NewLevelDBMembershipIndex(storageRoot string, cacheCapacity, bitsPerBloomFilterEncoded int) (i *LevelDBMembershipIndex, err error) { leveldbPersistence, err := leveldb.NewLevelDBPersistence(storageRoot, cacheCapacity, bitsPerBloomFilterEncoded) if err != nil { return } i = &LevelDBMembershipIndex{ persistence: leveldbPersistence, } return }
func NewLevelDBMetricPersistence(baseDirectory string) (*LevelDBMetricPersistence, error) { log.Printf("Opening LevelDBPersistence storage containers...") errorChannel := make(chan error, 5) emission := &LevelDBMetricPersistence{} var subsystemOpeners = []struct { name string opener leveldbOpener }{ { "Label Names and Value Pairs by Fingerprint", func() { var err error emission.fingerprintToMetrics, err = storage.NewLevelDBPersistence(baseDirectory+"/label_name_and_value_pairs_by_fingerprint", 1000000, 10) errorChannel <- err }, }, { "Samples by Fingerprint", func() { var err error emission.metricSamples, err = storage.NewLevelDBPersistence(baseDirectory+"/samples_by_fingerprint", 1000000, 10) errorChannel <- err }, }, { "Fingerprints by Label Name", func() { var err error emission.labelNameToFingerprints, err = storage.NewLevelDBPersistence(baseDirectory+"/fingerprints_by_label_name", 1000000, 10) errorChannel <- err }, }, { "Fingerprints by Label Name and Value Pair", func() { var err error emission.labelSetToFingerprints, err = storage.NewLevelDBPersistence(baseDirectory+"/fingerprints_by_label_name_and_value_pair", 1000000, 10) errorChannel <- err }, }, { "Metric Membership Index", func() { var err error emission.metricMembershipIndex, err = index.NewLevelDBMembershipIndex(baseDirectory+"/metric_membership_index", 1000000, 10) errorChannel <- err }, }, } for _, subsystem := range subsystemOpeners { name := subsystem.name opener := subsystem.opener log.Printf("Opening LevelDBPersistence storage container: %s\n", name) go opener() } for i := 0; i < cap(errorChannel); i++ { openingError := <-errorChannel if openingError != nil { log.Printf("Could not open a LevelDBPersistence storage container: %q\n", openingError) return nil, openingError } } log.Printf("Successfully opened all LevelDBPersistence storage containers.\n") return emission, nil }