-
Notifications
You must be signed in to change notification settings - Fork 30
/
state_change.go
101 lines (85 loc) · 2.84 KB
/
state_change.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
package keeper
import (
"encoding/json"
tmbytes "github.com/cometbft/cometbft/libs/bytes"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/irisnet/irismod/modules/service/types"
)
// CompleteBatch completes a running batch
func (k Keeper) CompleteBatch(
ctx sdk.Context,
requestContext types.RequestContext,
requestContextID tmbytes.HexBytes,
) types.RequestContext {
requestContext.BatchState = types.BATCHCOMPLETED
if len(requestContext.ModuleName) != 0 {
k.Callback(ctx, requestContextID)
}
batchState := types.BatchState{
BatchCounter: requestContext.BatchCounter,
State: types.BATCHCOMPLETED,
BatchResponseThreshold: requestContext.BatchResponseThreshold,
BatchRequestCount: requestContext.BatchRequestCount,
BatchResponseCount: requestContext.BatchResponseCount,
}
stateJSON, _ := json.Marshal(batchState)
ctx.EventManager().EmitEvents(sdk.Events{
sdk.NewEvent(
types.EventTypeCompleteBatch,
sdk.NewAttribute(types.AttributeKeyRequestContextID, requestContextID.String()),
sdk.NewAttribute(types.AttributeKeyRequestContextState, string(stateJSON)),
),
})
return requestContext
}
// CleanBatch cleans up all requests and responses related to the batch
func (k Keeper) CleanBatch(
ctx sdk.Context,
requestContext types.RequestContext,
requestContextID tmbytes.HexBytes,
) {
// remove all requests and responses of this batch
iterator := k.RequestsIteratorByReqCtx(ctx, requestContextID, requestContext.BatchCounter)
defer iterator.Close()
for ; iterator.Valid(); iterator.Next() {
requestID := iterator.Key()[1:]
k.DeleteCompactRequest(ctx, requestID)
k.DeleteResponse(ctx, requestID)
}
}
// CompleteServiceContext completes a running or paused context
func (k Keeper) CompleteServiceContext(
ctx sdk.Context,
context types.RequestContext,
requestContextID tmbytes.HexBytes,
) {
k.DeleteRequestContext(ctx, requestContextID)
ctx.EventManager().EmitEvents(sdk.Events{
sdk.NewEvent(
types.EventTypeCompleteContext,
sdk.NewAttribute(types.AttributeKeyRequestContextID, requestContextID.String()),
),
})
}
// OnRequestContextPaused handles the event where the specified request context is paused due to certain cause
func (k Keeper) OnRequestContextPaused(
ctx sdk.Context,
requestContext *types.RequestContext,
requestContextID tmbytes.HexBytes,
cause string,
) {
requestContext.BatchState = types.BATCHCOMPLETED
requestContext.State = types.PAUSED
k.SetRequestContext(ctx, requestContextID, *requestContext)
if len(requestContext.ModuleName) > 0 {
stateCallback, _ := k.GetStateCallback(requestContext.ModuleName)
stateCallback(ctx, requestContextID, cause)
} else {
ctx.EventManager().EmitEvents(sdk.Events{
sdk.NewEvent(
types.EventTypePauseContext,
sdk.NewAttribute(types.AttributeKeyRequestContextID, requestContextID.String()),
),
})
}
}