func killBucket(con *riak.Client, bucketName string) error { bucket, err := con.NewBucket(bucketName) if err != nil { return err } keys, err := bucket.ListKeys() if err != nil { return err } wg := sync.WaitGroup{} wg.Add(len(keys)) for _, key := range keys { go func(key string) { defer wg.Done() obj, err := bucket.Get(string(key)) if obj == nil { panic(err) } err = obj.Destroy() if err != nil { panic(err) } }(string(key)) } wg.Wait() return nil }
func RssMasterPollFeeds(con *riak.Client, InputCh chan<- url.URL, OutputCh <-chan FeedError) { bucket, err := con.NewBucket("feeds") if err != nil { log.Println("Failed to get feed bucket:", err) } // -62135596800 is Go's zero time according to Unix's time format. This is what empty feeds have for their check time. // Nothing should appear before that. keys_to_poll, err := bucket.IndexQueryRange(NextCheckIndexName, "-62135596800", strconv.FormatInt(time.Now().Unix(), 10)) var errors []error valid_keys := 0 for _, key := range keys_to_poll { var loadFeed Feed if err := con.LoadModel(key, &loadFeed); err != nil { errors = append(errors, err) } else { log.Println(loadFeed.Url) valid_keys++ go func(Url url.URL, inputCh chan<- url.URL) { inputCh <- Url }(loadFeed.Url, InputCh) } } for i := 0; i < valid_keys; i++ { if err := <-OutputCh; err.Err != nil { errors = append(errors, err) } } if len(errors) != 0 { log.Println(MultiError(errors)) } }