• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

uber / cadence / 0186ed8c-939f-4cc5-9459-fac2c80653f9

17 Mar 2023 03:30AM UTC coverage: 57.113% (-0.005%) from 57.118%
0186ed8c-939f-4cc5-9459-fac2c80653f9

push

buildkite

GitHub
[history] more cautious in deciding domain state to make decisions on dropping queued tasks (#5164)

1 of 1 new or added line in 1 file covered. (100.0%)

85268 of 149297 relevant lines covered (57.11%)

2300.93 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

94.64
/common/persistence/statsComputer.go
1
// Copyright (c) 2017-2020 Uber Technologies, Inc.
2
// Portions of the Software are attributed to Copyright (c) 2020 Temporal Technologies Inc.
3
//
4
// Permission is hereby granted, free of charge, to any person obtaining a copy
5
// of this software and associated documentation files (the "Software"), to deal
6
// in the Software without restriction, including without limitation the rights
7
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
// copies of the Software, and to permit persons to whom the Software is
9
// furnished to do so, subject to the following conditions:
10
//
11
// The above copyright notice and this permission notice shall be included in
12
// all copies or substantial portions of the Software.
13
//
14
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
// THE SOFTWARE.
21

22
package persistence
23

24
type (
25
        // statsComputer is to computing struct sizes after serialization
26
        statsComputer struct{}
27
)
28

29
func (sc *statsComputer) computeMutableStateStats(req *InternalGetWorkflowExecutionResponse) *MutableStateStats {
742✔
30
        executionInfoSize := computeExecutionInfoSize(req.State.ExecutionInfo)
742✔
31

742✔
32
        activityInfoCount := 0
742✔
33
        activityInfoSize := 0
742✔
34
        for _, ai := range req.State.ActivityInfos {
850✔
35
                activityInfoCount++
108✔
36
                activityInfoSize += computeActivityInfoSize(ai)
108✔
37
        }
108✔
38

39
        timerInfoCount := 0
742✔
40
        timerInfoSize := 0
742✔
41
        for _, ti := range req.State.TimerInfos {
742✔
42
                timerInfoCount++
×
43
                timerInfoSize += computeTimerInfoSize(ti)
×
44
        }
×
45

46
        childExecutionInfoCount := 0
742✔
47
        childExecutionInfoSize := 0
742✔
48
        for _, ci := range req.State.ChildExecutionInfos {
746✔
49
                childExecutionInfoCount++
4✔
50
                childExecutionInfoSize += computeChildInfoSize(ci)
4✔
51
        }
4✔
52

53
        signalInfoCount := 0
742✔
54
        signalInfoSize := 0
742✔
55
        for _, si := range req.State.SignalInfos {
743✔
56
                signalInfoCount++
1✔
57
                signalInfoSize += computeSignalInfoSize(si)
1✔
58
        }
1✔
59

60
        bufferedEventsCount := 0
742✔
61
        bufferedEventsSize := 0
742✔
62

742✔
63
        for _, be := range req.State.BufferedEvents {
746✔
64
                bufferedEventsCount++
4✔
65
                bufferedEventsSize += len(be.Data)
4✔
66
        }
4✔
67

68
        requestCancelInfoCount := len(req.State.RequestCancelInfos)
742✔
69

742✔
70
        totalSize := executionInfoSize
742✔
71
        totalSize += activityInfoSize
742✔
72
        totalSize += timerInfoSize
742✔
73
        totalSize += childExecutionInfoSize
742✔
74
        totalSize += signalInfoSize
742✔
75
        totalSize += bufferedEventsSize
742✔
76

742✔
77
        return &MutableStateStats{
742✔
78
                MutableStateSize:       totalSize,
742✔
79
                ExecutionInfoSize:      executionInfoSize,
742✔
80
                ActivityInfoSize:       activityInfoSize,
742✔
81
                TimerInfoSize:          timerInfoSize,
742✔
82
                ChildInfoSize:          childExecutionInfoSize,
742✔
83
                SignalInfoSize:         signalInfoSize,
742✔
84
                BufferedEventsSize:     bufferedEventsSize,
742✔
85
                ActivityInfoCount:      activityInfoCount,
742✔
86
                TimerInfoCount:         timerInfoCount,
742✔
87
                ChildInfoCount:         childExecutionInfoCount,
742✔
88
                SignalInfoCount:        signalInfoCount,
742✔
89
                BufferedEventsCount:    bufferedEventsCount,
742✔
90
                RequestCancelInfoCount: requestCancelInfoCount,
742✔
91
        }
742✔
92
}
93

94
func (sc *statsComputer) computeMutableStateUpdateStats(req *InternalUpdateWorkflowExecutionRequest) *MutableStateUpdateSessionStats {
4,407✔
95
        if req.NewWorkflowSnapshot != nil {
4,584✔
96
                return mergeMutableStateUpdateSessionStats(sc.computeWorkflowMutationStats(&req.UpdateWorkflowMutation), sc.computeWorkflowSnapshotStats(req.NewWorkflowSnapshot))
177✔
97
        }
177✔
98
        return sc.computeWorkflowMutationStats(&req.UpdateWorkflowMutation)
4,233✔
99
}
100

101
func (sc *statsComputer) computeMutableStateCreateStats(req *InternalCreateWorkflowExecutionRequest) *MutableStateUpdateSessionStats {
504✔
102
        return sc.computeWorkflowSnapshotStats(&req.NewWorkflowSnapshot)
504✔
103
}
504✔
104

105
func (sc *statsComputer) computeMutableStateConflictResolveStats(req *InternalConflictResolveWorkflowExecutionRequest) *MutableStateUpdateSessionStats {
3✔
106
        mss := sc.computeWorkflowSnapshotStats(&req.ResetWorkflowSnapshot)
3✔
107
        if req.NewWorkflowSnapshot != nil {
3✔
108
                mss = mergeMutableStateUpdateSessionStats(mss, sc.computeWorkflowSnapshotStats(req.NewWorkflowSnapshot))
×
109
        }
×
110
        if req.CurrentWorkflowMutation != nil {
3✔
111
                mss = mergeMutableStateUpdateSessionStats(mss, sc.computeWorkflowMutationStats(req.CurrentWorkflowMutation))
×
112
        }
×
113
        return mss
3✔
114
}
115

116
func (sc *statsComputer) computeWorkflowMutationStats(req *InternalWorkflowMutation) *MutableStateUpdateSessionStats {
4,408✔
117
        executionInfoSize := computeExecutionInfoSize(req.ExecutionInfo)
4,408✔
118

4,408✔
119
        activityInfoCount := 0
4,408✔
120
        activityInfoSize := 0
4,408✔
121
        for _, ai := range req.UpsertActivityInfos {
5,658✔
122
                activityInfoCount++
1,250✔
123
                activityInfoSize += computeActivityInfoSize(ai)
1,250✔
124
        }
1,250✔
125

126
        timerInfoCount := 0
4,408✔
127
        timerInfoSize := 0
4,408✔
128
        for _, ti := range req.UpsertTimerInfos {
4,444✔
129
                timerInfoCount++
36✔
130
                timerInfoSize += computeTimerInfoSize(ti)
36✔
131
        }
36✔
132

133
        childExecutionInfoCount := 0
4,408✔
134
        childExecutionInfoSize := 0
4,408✔
135
        for _, ci := range req.UpsertChildExecutionInfos {
4,451✔
136
                childExecutionInfoCount++
43✔
137
                childExecutionInfoSize += computeChildInfoSize(ci)
43✔
138
        }
43✔
139

140
        signalInfoCount := 0
4,408✔
141
        signalInfoSize := 0
4,408✔
142
        for _, si := range req.UpsertSignalInfos {
4,424✔
143
                signalInfoCount++
16✔
144
                signalInfoSize += computeSignalInfoSize(si)
16✔
145
        }
16✔
146

147
        bufferedEventsSize := 0
4,408✔
148
        if req.NewBufferedEvents != nil {
5,052✔
149
                bufferedEventsSize = len(req.NewBufferedEvents.Data)
644✔
150
        }
644✔
151

152
        requestCancelInfoCount := len(req.UpsertRequestCancelInfos)
4,408✔
153

4,408✔
154
        deleteActivityInfoCount := len(req.DeleteActivityInfos)
4,408✔
155

4,408✔
156
        deleteTimerInfoCount := len(req.DeleteTimerInfos)
4,408✔
157

4,408✔
158
        deleteChildInfoCount := len(req.DeleteChildExecutionInfos)
4,408✔
159

4,408✔
160
        deleteSignalInfoCount := len(req.DeleteSignalInfos)
4,408✔
161

4,408✔
162
        deleteRequestCancelInfoCount := len(req.DeleteRequestCancelInfos)
4,408✔
163

4,408✔
164
        transferTasksCount := len(req.TransferTasks)
4,408✔
165
        crossClusterTasksCount := len(req.CrossClusterTasks)
4,408✔
166
        timerTasksCount := len(req.TimerTasks)
4,408✔
167
        replicationTasksCount := len(req.ReplicationTasks)
4,408✔
168

4,408✔
169
        totalSize := executionInfoSize
4,408✔
170
        totalSize += activityInfoSize
4,408✔
171
        totalSize += timerInfoSize
4,408✔
172
        totalSize += childExecutionInfoSize
4,408✔
173
        totalSize += signalInfoSize
4,408✔
174
        totalSize += bufferedEventsSize
4,408✔
175

4,408✔
176
        return &MutableStateUpdateSessionStats{
4,408✔
177
                MutableStateSize:             totalSize,
4,408✔
178
                ExecutionInfoSize:            executionInfoSize,
4,408✔
179
                ActivityInfoSize:             activityInfoSize,
4,408✔
180
                TimerInfoSize:                timerInfoSize,
4,408✔
181
                ChildInfoSize:                childExecutionInfoSize,
4,408✔
182
                SignalInfoSize:               signalInfoSize,
4,408✔
183
                BufferedEventsSize:           bufferedEventsSize,
4,408✔
184
                ActivityInfoCount:            activityInfoCount,
4,408✔
185
                TimerInfoCount:               timerInfoCount,
4,408✔
186
                ChildInfoCount:               childExecutionInfoCount,
4,408✔
187
                SignalInfoCount:              signalInfoCount,
4,408✔
188
                RequestCancelInfoCount:       requestCancelInfoCount,
4,408✔
189
                DeleteActivityInfoCount:      deleteActivityInfoCount,
4,408✔
190
                DeleteTimerInfoCount:         deleteTimerInfoCount,
4,408✔
191
                DeleteChildInfoCount:         deleteChildInfoCount,
4,408✔
192
                DeleteSignalInfoCount:        deleteSignalInfoCount,
4,408✔
193
                DeleteRequestCancelInfoCount: deleteRequestCancelInfoCount,
4,408✔
194
                TransferTasksCount:           transferTasksCount,
4,408✔
195
                CrossClusterTaskCount:        crossClusterTasksCount,
4,408✔
196
                TimerTasksCount:              timerTasksCount,
4,408✔
197
                ReplicationTasksCount:        replicationTasksCount,
4,408✔
198
        }
4,408✔
199
}
200

201
func (sc *statsComputer) computeWorkflowSnapshotStats(req *InternalWorkflowSnapshot) *MutableStateUpdateSessionStats {
679✔
202
        executionInfoSize := computeExecutionInfoSize(req.ExecutionInfo)
679✔
203

679✔
204
        activityInfoCount := 0
679✔
205
        activityInfoSize := 0
679✔
206
        for _, ai := range req.ActivityInfos {
702✔
207
                activityInfoCount++
23✔
208
                activityInfoSize += computeActivityInfoSize(ai)
23✔
209
        }
23✔
210

211
        timerInfoCount := 0
679✔
212
        timerInfoSize := 0
679✔
213
        for _, ti := range req.TimerInfos {
682✔
214
                timerInfoCount++
3✔
215
                timerInfoSize += computeTimerInfoSize(ti)
3✔
216
        }
3✔
217

218
        childExecutionInfoCount := 0
679✔
219
        childExecutionInfoSize := 0
679✔
220
        for _, ci := range req.ChildExecutionInfos {
684✔
221
                childExecutionInfoCount++
5✔
222
                childExecutionInfoSize += computeChildInfoSize(ci)
5✔
223
        }
5✔
224

225
        signalInfoCount := 0
679✔
226
        signalInfoSize := 0
679✔
227
        for _, si := range req.SignalInfos {
680✔
228
                signalInfoCount++
1✔
229
                signalInfoSize += computeSignalInfoSize(si)
1✔
230
        }
1✔
231

232
        requestCancelInfoCount := len(req.RequestCancelInfos)
679✔
233

679✔
234
        transferTasksCount := len(req.TransferTasks)
679✔
235
        crossClusterTasksCount := len(req.CrossClusterTasks)
679✔
236
        timerTasksCount := len(req.TimerTasks)
679✔
237
        replicationTasksCount := len(req.ReplicationTasks)
679✔
238

679✔
239
        totalSize := executionInfoSize
679✔
240
        totalSize += activityInfoSize
679✔
241
        totalSize += timerInfoSize
679✔
242
        totalSize += childExecutionInfoSize
679✔
243
        totalSize += signalInfoSize
679✔
244

679✔
245
        return &MutableStateUpdateSessionStats{
679✔
246
                MutableStateSize:       totalSize,
679✔
247
                ExecutionInfoSize:      executionInfoSize,
679✔
248
                ActivityInfoSize:       activityInfoSize,
679✔
249
                TimerInfoSize:          timerInfoSize,
679✔
250
                ChildInfoSize:          childExecutionInfoSize,
679✔
251
                SignalInfoSize:         signalInfoSize,
679✔
252
                ActivityInfoCount:      activityInfoCount,
679✔
253
                TimerInfoCount:         timerInfoCount,
679✔
254
                ChildInfoCount:         childExecutionInfoCount,
679✔
255
                SignalInfoCount:        signalInfoCount,
679✔
256
                RequestCancelInfoCount: requestCancelInfoCount,
679✔
257
                TransferTasksCount:     transferTasksCount,
679✔
258
                CrossClusterTaskCount:  crossClusterTasksCount,
679✔
259
                TimerTasksCount:        timerTasksCount,
679✔
260
                ReplicationTasksCount:  replicationTasksCount,
679✔
261
        }
679✔
262
}
263

264
func mergeMutableStateUpdateSessionStats(stats ...*MutableStateUpdateSessionStats) *MutableStateUpdateSessionStats {
177✔
265
        result := &MutableStateUpdateSessionStats{}
177✔
266
        for _, s := range stats {
528✔
267
                result.MutableStateSize += s.MutableStateSize
351✔
268

351✔
269
                result.ExecutionInfoSize += s.ExecutionInfoSize
351✔
270
                result.ActivityInfoSize += s.ActivityInfoSize
351✔
271
                result.TimerInfoSize += s.TimerInfoSize
351✔
272
                result.ChildInfoSize += s.ChildInfoSize
351✔
273
                result.SignalInfoSize += s.SignalInfoSize
351✔
274
                result.BufferedEventsSize += s.BufferedEventsSize
351✔
275

351✔
276
                result.ActivityInfoCount += s.ActivityInfoCount
351✔
277
                result.TimerInfoCount += s.TimerInfoCount
351✔
278
                result.ChildInfoCount += s.ChildInfoCount
351✔
279
                result.SignalInfoCount += s.SignalInfoCount
351✔
280
                result.RequestCancelInfoCount += s.RequestCancelInfoCount
351✔
281

351✔
282
                result.DeleteActivityInfoCount += s.DeleteActivityInfoCount
351✔
283
                result.DeleteTimerInfoCount += s.DeleteTimerInfoCount
351✔
284
                result.DeleteChildInfoCount += s.DeleteChildInfoCount
351✔
285
                result.DeleteSignalInfoCount += s.DeleteSignalInfoCount
351✔
286
                result.DeleteRequestCancelInfoCount += s.DeleteRequestCancelInfoCount
351✔
287

351✔
288
                result.TransferTasksCount += s.TransferTasksCount
351✔
289
                result.CrossClusterTaskCount += s.CrossClusterTaskCount
351✔
290
                result.TimerInfoCount += s.TimerInfoCount
351✔
291
                result.ReplicationTasksCount += s.ReplicationTasksCount
351✔
292
        }
351✔
293
        return result
177✔
294
}
295

296
func computeExecutionInfoSize(executionInfo *InternalWorkflowExecutionInfo) int {
5,825✔
297
        size := len(executionInfo.WorkflowID)
5,825✔
298
        size += len(executionInfo.TaskList)
5,825✔
299
        size += len(executionInfo.WorkflowTypeName)
5,825✔
300
        size += len(executionInfo.ParentWorkflowID)
5,825✔
301

5,825✔
302
        return size
5,825✔
303
}
5,825✔
304

305
func computeActivityInfoSize(ai *InternalActivityInfo) int {
1,377✔
306
        size := len(ai.ActivityID)
1,377✔
307
        if ai.ScheduledEvent != nil {
1,377✔
308
                size += len(ai.ScheduledEvent.Data)
×
309
        }
×
310
        if ai.StartedEvent != nil {
1,377✔
311
                size += len(ai.StartedEvent.Data)
×
312
        }
×
313
        size += len(ai.Details)
1,377✔
314

1,377✔
315
        return size
1,377✔
316
}
317

318
func computeTimerInfoSize(ti *TimerInfo) int {
41✔
319
        size := len(ti.TimerID)
41✔
320

41✔
321
        return size
41✔
322
}
41✔
323

324
func computeChildInfoSize(ci *InternalChildExecutionInfo) int {
52✔
325
        size := 0
52✔
326
        if ci.InitiatedEvent != nil {
52✔
327
                size += len(ci.InitiatedEvent.Data)
×
328
        }
×
329
        if ci.StartedEvent != nil {
52✔
330
                size += len(ci.StartedEvent.Data)
×
331
        }
×
332
        return size
52✔
333
}
334

335
func computeSignalInfoSize(si *SignalInfo) int {
19✔
336
        size := len(si.SignalName)
19✔
337
        size += len(si.Input)
19✔
338
        size += len(si.Control)
19✔
339

19✔
340
        return size
19✔
341
}
19✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc