Beispiel #1
0
func (mh *MetaHandler) processKvUpdate(wg sync.WaitGroup, blobs chan<- *router.Blob, kvUpdate <-chan *vkv.KeyValue, vkvhub *hub.Hub) {
	wg.Add(1)
	defer wg.Done()
	for kv := range kvUpdate {
		mh.log.Debug(fmt.Sprintf("kvupdate: %+v", kv))
		go vkvhub.Pub(kv.Key, fmt.Sprintf("%d:%s", kv.Version, kv.Value))
		blob := CreateMetaBlob(kv)
		req := &router.Request{
			MetaBlob:  true,
			Type:      router.Write,
			Namespace: kv.Namespace(),
		}
		hash := fmt.Sprintf("%x", blake2b.Sum256(blob))
		if err := kv.SetMetaBlob(hash); err != nil {
			panic(err)
		}
		select {
		case blobs <- &router.Blob{Req: req, Hash: hash, Blob: blob}:
		case <-mh.stop:
			mh.log.Info("Stopping...")
			return
		}
	}
}