|
|
|
@ -39,17 +39,11 @@ func TccGlobalTransaction2(dtm string, gid string, custom func(*Tcc), tccFunc Tc |
|
|
|
return rerr |
|
|
|
} |
|
|
|
// 小概率情况下,prepare成功了,但是由于网络状况导致上面Failure,那么不执行下面defer的内容,等待超时后再回滚标记事务失败,也没有问题
|
|
|
|
defer func() { |
|
|
|
x := recover() |
|
|
|
operation := dtmimp.If(x == nil && rerr == nil, "submit", "abort").(string) |
|
|
|
err := dtmimp.TransCallDtm(&tcc.TransBase, tcc, operation) |
|
|
|
if rerr == nil { |
|
|
|
rerr = err |
|
|
|
} |
|
|
|
if x != nil { |
|
|
|
panic(x) |
|
|
|
} |
|
|
|
}() |
|
|
|
defer dtmimp.DeferDo(&rerr, func() error { |
|
|
|
return dtmimp.TransCallDtm(&tcc.TransBase, tcc, "submit") |
|
|
|
}, func() error { |
|
|
|
return dtmimp.TransCallDtm(&tcc.TransBase, tcc, "abort") |
|
|
|
}) |
|
|
|
_, rerr = tccFunc(tcc) |
|
|
|
return |
|
|
|
} |
|
|
|
|