Commit 675bdfcd authored by harrylee's avatar harrylee

fix a bug for inner request index

parent 272cfa67
Pipeline #8370 failed with stages
in 0 seconds
......@@ -89,45 +89,53 @@ func (b *BrokerDB) audit(payload *brokertypes.Audit) (*types.Receipt, error) {
func (b *BrokerDB) updateIndex(payload *brokertypes.UpdateIndex) (*types.Receipt, error) {
//FIXME 权限检查
currentServiceID,err:= b.genFullServiceID(payload.DstServiceID)
if err != nil {
return nil, fmt.Errorf("can't get current service ID!")
}
receipt := &types.Receipt{Ty: types.ExecOk}
if payload.ReqType == brokertypes.Req_Inner {
inServicePair := genServicePair(payload.SrcServiceID, currentServiceID)
meta, err := getMeta(b.statedb, calInnerMetaKey())
if err != nil {
return nil, fmt.Errorf("broker not init!")
}
idx := meta.Meta[genServicePair(payload.SrcServiceID, payload.DstServiceID)]
payload.DstServiceID = currentServiceID
idx := meta.Meta[inServicePair]
if payload.SequenceNum != idx+1 {
return nil, fmt.Errorf("incorrect index, expect %d", idx+1)
return nil, fmt.Errorf("Req_Inner incorrect index,key %s expect %d,but get %d",inServicePair, idx+1,payload.SequenceNum)
}
meta.Meta[genServicePair(payload.SrcServiceID, payload.DstServiceID)] = idx + 1
meta.Meta[inServicePair] = idx + 1
kvset := b.GetMetaKVSet(payload.ReqType, meta)
kvset = append(kvset, &types.KeyValue{Key: inMsgKey(genServicePair(payload.SrcServiceID, payload.DstServiceID), idx+1), Value: types.Encode(payload.Response)})
kvset = append(kvset, &types.KeyValue{Key: inMsgKey(inServicePair, idx+1), Value: types.Encode(payload.Response)})
receipt.KV = append(receipt.KV, kvset...)
} else if payload.ReqType == brokertypes.Req_Callback {
outServicePair := genServicePair(currentServiceID, payload.GetSrcServiceID())
meta, err := getMeta(b.statedb, calCallBackMetaKey())
if err != nil {
return nil, fmt.Errorf("broker not init!")
}
idx := meta.Meta[genServicePair(payload.DstServiceID,payload.SrcServiceID)]
idx := meta.Meta[outServicePair]
if payload.SequenceNum != idx+1 {
return nil, fmt.Errorf("incorrect index, expect %d", idx+1)
return nil, fmt.Errorf("Req_Callback incorrect index,key %s expect %d,but get %d",outServicePair, idx+1,payload.SequenceNum)
}
meta.Meta[genServicePair(payload.DstServiceID,payload.SrcServiceID)] = idx + 1
meta.Meta[outServicePair] = idx + 1
kvset := b.GetMetaKVSet(payload.ReqType, meta)
// 跨出交易不需要确认是否成功
receipt.KV = append(receipt.KV, kvset...)
} else if payload.ReqType == brokertypes.Req_DstRollback {
//todo
inServicePair := genServicePair(payload.SrcServiceID, currentServiceID)
meta, err := getMeta(b.statedb, calDstRollBackMetaKey())
if err != nil {
return nil, fmt.Errorf("broker not init!")
}
idx := meta.Meta[genServicePair(payload.SrcServiceID, payload.DstServiceID)]
idx := meta.Meta[inServicePair]
if payload.SequenceNum < idx+1 {
return nil, fmt.Errorf("incorrect dstrollback index, expect %d", idx+1)
return nil, fmt.Errorf("Req_DstRollback incorrect index,key %s expect %d,but get %d",inServicePair, idx+1,payload.SequenceNum)
}
meta.Meta[genServicePair(payload.SrcServiceID, payload.DstServiceID)] = payload.SequenceNum
meta.Meta[inServicePair] = payload.SequenceNum
kvset := b.GetMetaKVSet(payload.ReqType, meta)
receipt.KV = append(receipt.KV, kvset...)
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment