// 将数据 打入 某个Graph的发送缓存队列, 具体是哪一个Graph 由一致性哈希 决定
func Push2GraphSendQueue(items []*cmodel.MetaData) {
cfg := g.Config().Graph
for _, item := range items {
graphItem, err := convert2GraphItem(item)
if err != nil {
log.Println("E:", err)
continue
}
pk := item.PK()
// statistics. 为了效率,放到了这里,因此只有graph是enbale时才能trace
proc.RecvDataTrace.Trace(pk, item)
proc.RecvDataFilter.Filter(pk, item.Value, item)
node, err := GraphNodeRing.GetNode(pk)
if err != nil {
log.Println("E:", err)
continue
}
cnode := cfg.ClusterList[node]
errCnt := 0
// - cluster: key-value形式的字典,表示后端的graph列表,其中key代表后端graph名字,value代表的是具体的ip:port
// (多个地址用逗号隔开, transfer会将同一份数据发送至各个地址,利用这个特性可以实现数据的多重备份)
for _, addr := range cnode.Addrs {
Q := GraphQueues[node+addr]
if !Q.PushFront(graphItem) {
errCnt += 1
}
}
// statistics
if errCn
08-27
568
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交