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 } } }