You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

context.go 2.9 kB

3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. package seatactx
  2. import (
  3. "context"
  4. )
  5. import (
  6. "github.com/seata/seata-go/pkg/common"
  7. "github.com/seata/seata-go/pkg/protocol/transaction"
  8. "github.com/seata/seata-go/pkg/rm/tcc/api"
  9. )
  10. type ContextVariable struct {
  11. TxName string
  12. Xid string
  13. Status *transaction.GlobalStatus
  14. TxRole *transaction.GlobalTransactionRole
  15. BusinessActionContext *api.BusinessActionContext
  16. TxStatus *transaction.GlobalStatus
  17. }
  18. func InitSeataContext(ctx context.Context) context.Context {
  19. return context.WithValue(ctx, common.CONTEXT_VARIABLE, &ContextVariable{})
  20. }
  21. func GetTxStatus(ctx context.Context) *transaction.GlobalStatus {
  22. variable := ctx.Value(common.CONTEXT_VARIABLE)
  23. if variable == nil {
  24. return nil
  25. }
  26. return variable.(*ContextVariable).TxStatus
  27. }
  28. func SetTxStatus(ctx context.Context, status transaction.GlobalStatus) {
  29. variable := ctx.Value(common.CONTEXT_VARIABLE)
  30. if variable != nil {
  31. variable.(*ContextVariable).TxStatus = &status
  32. }
  33. }
  34. func GetTxName(ctx context.Context) string {
  35. variable := ctx.Value(common.CONTEXT_VARIABLE)
  36. if variable == nil {
  37. return ""
  38. }
  39. return variable.(*ContextVariable).TxName
  40. }
  41. func SetTxName(ctx context.Context, name string) {
  42. variable := ctx.Value(common.TccBusinessActionContext)
  43. if variable != nil {
  44. variable.(*ContextVariable).TxName = name
  45. }
  46. }
  47. func IsSeataContext(ctx context.Context) bool {
  48. return ctx.Value(common.CONTEXT_VARIABLE) != nil
  49. }
  50. func GetBusinessActionContext(ctx context.Context) *api.BusinessActionContext {
  51. variable := ctx.Value(common.TccBusinessActionContext)
  52. if variable == nil {
  53. return nil
  54. }
  55. return variable.(*api.BusinessActionContext)
  56. }
  57. func SetBusinessActionContext(ctx context.Context, businessActionContext *api.BusinessActionContext) {
  58. variable := ctx.Value(common.TccBusinessActionContext)
  59. if variable != nil {
  60. variable.(*ContextVariable).BusinessActionContext = businessActionContext
  61. }
  62. }
  63. func GetTransactionRole(ctx context.Context) *transaction.GlobalTransactionRole {
  64. variable := ctx.Value(common.CONTEXT_VARIABLE)
  65. if variable == nil {
  66. return nil
  67. }
  68. return variable.(*ContextVariable).TxRole
  69. }
  70. func SetTransactionRole(ctx context.Context, role transaction.GlobalTransactionRole) {
  71. variable := ctx.Value(common.CONTEXT_VARIABLE)
  72. if variable != nil {
  73. variable.(*ContextVariable).TxRole = &role
  74. }
  75. }
  76. func GetXID(ctx context.Context) string {
  77. variable := ctx.Value(common.CONTEXT_VARIABLE)
  78. if variable == nil {
  79. return ""
  80. }
  81. return variable.(*ContextVariable).Xid
  82. }
  83. func HasXID(ctx context.Context) bool {
  84. return GetXID(ctx) != ""
  85. }
  86. func SetXID(ctx context.Context, xid string) {
  87. variable := ctx.Value(common.CONTEXT_VARIABLE)
  88. if variable != nil {
  89. variable.(*ContextVariable).Xid = xid
  90. }
  91. }
  92. func UnbindXid(ctx context.Context) {
  93. variable := ctx.Value(common.CONTEXT_VARIABLE)
  94. if variable != nil {
  95. variable.(*ContextVariable).Xid = ""
  96. }
  97. }

Go Implementation For Seata