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) { ...@@ -89,45 +89,53 @@ func (b *BrokerDB) audit(payload *brokertypes.Audit) (*types.Receipt, error) {
func (b *BrokerDB) updateIndex(payload *brokertypes.UpdateIndex) (*types.Receipt, error) { func (b *BrokerDB) updateIndex(payload *brokertypes.UpdateIndex) (*types.Receipt, error) {
//FIXME 权限检查 //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} receipt := &types.Receipt{Ty: types.ExecOk}
if payload.ReqType == brokertypes.Req_Inner { if payload.ReqType == brokertypes.Req_Inner {
inServicePair := genServicePair(payload.SrcServiceID, currentServiceID)
meta, err := getMeta(b.statedb, calInnerMetaKey()) meta, err := getMeta(b.statedb, calInnerMetaKey())
if err != nil { if err != nil {
return nil, fmt.Errorf("broker not init!") 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 { 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 := 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...) receipt.KV = append(receipt.KV, kvset...)
} else if payload.ReqType == brokertypes.Req_Callback { } else if payload.ReqType == brokertypes.Req_Callback {
outServicePair := genServicePair(currentServiceID, payload.GetSrcServiceID())
meta, err := getMeta(b.statedb, calCallBackMetaKey()) meta, err := getMeta(b.statedb, calCallBackMetaKey())
if err != nil { if err != nil {
return nil, fmt.Errorf("broker not init!") return nil, fmt.Errorf("broker not init!")
} }
idx := meta.Meta[genServicePair(payload.DstServiceID,payload.SrcServiceID)] idx := meta.Meta[outServicePair]
if payload.SequenceNum != idx+1 { 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) kvset := b.GetMetaKVSet(payload.ReqType, meta)
// 跨出交易不需要确认是否成功 // 跨出交易不需要确认是否成功
receipt.KV = append(receipt.KV, kvset...) receipt.KV = append(receipt.KV, kvset...)
} else if payload.ReqType == brokertypes.Req_DstRollback { } else if payload.ReqType == brokertypes.Req_DstRollback {
//todo //todo
inServicePair := genServicePair(payload.SrcServiceID, currentServiceID)
meta, err := getMeta(b.statedb, calDstRollBackMetaKey()) meta, err := getMeta(b.statedb, calDstRollBackMetaKey())
if err != nil { if err != nil {
return nil, fmt.Errorf("broker not init!") return nil, fmt.Errorf("broker not init!")
} }
idx := meta.Meta[genServicePair(payload.SrcServiceID, payload.DstServiceID)] idx := meta.Meta[inServicePair]
if payload.SequenceNum < idx+1 { 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) kvset := b.GetMetaKVSet(payload.ReqType, meta)
receipt.KV = append(receipt.KV, kvset...) 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