4
4
"context"
5
5
"encoding/json"
6
6
"fmt"
7
- "math"
8
7
"slices"
9
8
"sync/atomic"
10
9
"testing"
@@ -159,7 +158,7 @@ type drainer struct {
159
158
reason string
160
159
}
161
160
162
- func (d * drainer ) Drain (job * jobsdb.JobT ) (bool , string ) {
161
+ func (d * drainer ) Drain (_ * jobsdb.JobT ) (bool , string ) {
163
162
return d .drain , d .reason
164
163
}
165
164
@@ -176,15 +175,15 @@ func (m *mockThrottlerFactory) Shutdown() {}
176
175
177
176
func TestBackoff (t * testing.T ) {
178
177
t .Run ("nextAttemptAfter" , func (t * testing.T ) {
179
- min := 10 * time .Second
180
- max := 300 * time .Second
181
- require .Equal (t , 10 * time .Second , nextAttemptAfter (0 , min , max ))
182
- require .Equal (t , 10 * time .Second , nextAttemptAfter (1 , min , max ))
183
- require .Equal (t , 20 * time .Second , nextAttemptAfter (2 , min , max ))
184
- require .Equal (t , 40 * time .Second , nextAttemptAfter (3 , min , max ))
185
- require .Equal (t , 80 * time .Second , nextAttemptAfter (4 , min , max ))
186
- require .Equal (t , 160 * time .Second , nextAttemptAfter (5 , min , max ))
187
- require .Equal (t , 300 * time .Second , nextAttemptAfter (6 , min , max ))
178
+ minBackoff := 10 * time .Second
179
+ maxBackoff := 300 * time .Second
180
+ require .Equal (t , 10 * time .Second , nextAttemptAfter (0 , minBackoff , maxBackoff ))
181
+ require .Equal (t , 10 * time .Second , nextAttemptAfter (1 , minBackoff , maxBackoff ))
182
+ require .Equal (t , 20 * time .Second , nextAttemptAfter (2 , minBackoff , maxBackoff ))
183
+ require .Equal (t , 40 * time .Second , nextAttemptAfter (3 , minBackoff , maxBackoff ))
184
+ require .Equal (t , 80 * time .Second , nextAttemptAfter (4 , minBackoff , maxBackoff ))
185
+ require .Equal (t , 160 * time .Second , nextAttemptAfter (5 , minBackoff , maxBackoff ))
186
+ require .Equal (t , 300 * time .Second , nextAttemptAfter (6 , minBackoff , maxBackoff ))
188
187
})
189
188
190
189
t .Run ("findWorker" , func (t * testing.T ) {
@@ -1058,138 +1057,6 @@ var _ = Describe("router", func() {
1058
1057
}, 60 * time .Second , 10 * time .Millisecond ).
1059
1058
Should (Equal (true ), fmt .Sprintf ("Router should both abort (actual: %t) and store to proc error (actual: %t)" , routerAborted , procErrorStored ))
1060
1059
})
1061
-
1062
- It ("can fail jobs if time is more than router timeout" , func () {
1063
- mockNetHandle := mocksRouter .NewMockNetHandle (c .mockCtrl )
1064
- mockTransformer := mocksTransformer .NewMockTransformer (c .mockCtrl )
1065
- router := & Handle {
1066
- Reporting : & reporting.NOOP {},
1067
- netHandle : mockNetHandle ,
1068
- }
1069
- c .mockBackendConfig .EXPECT ().AccessToken ().AnyTimes ()
1070
- router .Setup (gaDestinationDefinition , logger .NOP , conf , c .mockBackendConfig , c .mockRouterJobsDB , c .mockProcErrorsDB , transientsource .NewEmptyService (), rsources .NewNoOpService (), transformerFeaturesService .NewNoOpService (), destinationdebugger .NewNoOpService (), throttler .NewNoOpThrottlerFactory ())
1071
- router .transformer = mockTransformer
1072
- router .noOfWorkers = 1
1073
- router .reloadableConfig .noOfJobsToBatchInAWorker = config .SingleValueLoader (5 )
1074
- router .reloadableConfig .routerTimeout = config .SingleValueLoader (time .Duration (0 ))
1075
-
1076
- gaPayload := `{"body": {"XML": {}, "FORM": {}, "JSON": {}}, "type": "REST", "files": {}, "method": "POST", "params": {"t": "event", "v": "1", "an": "RudderAndroidClient", "av": "1.0", "ds": "android-sdk", "ea": "Demo Track", "ec": "Demo Category", "el": "Demo Label", "ni": 0, "qt": 59268380964, "ul": "en-US", "cid": "anon_id", "tid": "UA-185645846-1", "uip": "[::1]", "aiid": "com.rudderlabs.android.sdk"}, "userId": "anon_id", "headers": {}, "version": "1", "endpoint": "https://www.google-analytics.com/collect"}`
1077
- parameters := fmt .Sprintf (`{"source_id": "1fMCVYZboDlYlauh4GFsEo2JU77", "destination_id": "%s", "message_id": "2f548e6d-60f6-44af-a1f4-62b3272445c3", "received_at": "2021-06-28T10:04:48.527+05:30", "transform_at": "processor"}` , gaDestinationID ) // skipcq: GO-R4002
1078
-
1079
- toRetryJobsList := []* jobsdb.JobT {
1080
- {
1081
- UUID : uuid .New (),
1082
- UserID : "u1" ,
1083
- JobID : 2009 ,
1084
- CreatedAt : time .Date (2020 , 0o4 , 28 , 13 , 26 , 0o0 , 0o0 , time .UTC ),
1085
- ExpireAt : time .Date (2020 , 0o4 , 28 , 13 , 26 , 0o0 , 0o0 , time .UTC ),
1086
- CustomVal : customVal ["GA" ],
1087
- EventPayload : []byte (gaPayload ),
1088
- LastJobStatus : jobsdb.JobStatusT {
1089
- AttemptNum : 1 ,
1090
- ErrorResponse : []byte (`{"firstAttemptedAt": "2021-06-28T15:57:30.742+05:30"}` ),
1091
- },
1092
- Parameters : []byte (parameters ),
1093
- },
1094
- }
1095
-
1096
- unprocessedJobsList := []* jobsdb.JobT {
1097
- {
1098
- UUID : uuid .New (),
1099
- UserID : "u1" ,
1100
- JobID : 2010 ,
1101
- CreatedAt : time .Date (2020 , 0o4 , 28 , 13 , 26 , 0o0 , 0o0 , time .UTC ),
1102
- ExpireAt : time .Date (2020 , 0o4 , 28 , 13 , 26 , 0o0 , 0o0 , time .UTC ),
1103
- CustomVal : customVal ["GA" ],
1104
- EventPayload : []byte (gaPayload ),
1105
- LastJobStatus : jobsdb.JobStatusT {
1106
- AttemptNum : 0 ,
1107
- },
1108
- Parameters : []byte (parameters ),
1109
- },
1110
- {
1111
- UUID : uuid .New (),
1112
- UserID : "u2" ,
1113
- JobID : 2011 ,
1114
- CreatedAt : time .Date (2020 , 0o4 , 28 , 13 , 26 , 0o0 , 0o0 , time .UTC ),
1115
- ExpireAt : time .Date (2020 , 0o4 , 28 , 13 , 26 , 0o0 , 0o0 , time .UTC ),
1116
- CustomVal : customVal ["GA" ],
1117
- EventPayload : []byte (gaPayload ),
1118
- LastJobStatus : jobsdb.JobStatusT {
1119
- AttemptNum : 0 ,
1120
- },
1121
- Parameters : []byte (parameters ),
1122
- },
1123
- {
1124
- UUID : uuid .New (),
1125
- UserID : "u2" ,
1126
- JobID : 2012 ,
1127
- CreatedAt : time .Date (2020 , 0o4 , 28 , 13 , 26 , 0o0 , 0o0 , time .UTC ),
1128
- ExpireAt : time .Date (2020 , 0o4 , 28 , 13 , 26 , 0o0 , 0o0 , time .UTC ),
1129
- CustomVal : customVal ["GA" ],
1130
- EventPayload : []byte (gaPayload ),
1131
- LastJobStatus : jobsdb.JobStatusT {
1132
- AttemptNum : 0 ,
1133
- },
1134
- Parameters : []byte (parameters ),
1135
- },
1136
- {
1137
- UUID : uuid .New (),
1138
- UserID : "u3" ,
1139
- JobID : 2013 ,
1140
- CreatedAt : time .Date (2020 , 0o4 , 28 , 13 , 26 , 0o0 , 0o0 , time .UTC ),
1141
- ExpireAt : time .Date (2020 , 0o4 , 28 , 13 , 26 , 0o0 , 0o0 , time .UTC ),
1142
- CustomVal : customVal ["GA" ],
1143
- EventPayload : []byte (gaPayload ),
1144
- LastJobStatus : jobsdb.JobStatusT {
1145
- AttemptNum : 0 ,
1146
- },
1147
- Parameters : []byte (parameters ),
1148
- },
1149
- }
1150
-
1151
- allJobs := append (toRetryJobsList , unprocessedJobsList ... )
1152
-
1153
- payloadLimit := router .reloadableConfig .payloadLimit
1154
- callAllJobs := c .mockRouterJobsDB .EXPECT ().GetToProcess (gomock .Any (),
1155
- jobsdb.GetQueryParams {
1156
- CustomValFilters : []string {customVal ["GA" ]},
1157
- ParameterFilters : []jobsdb.ParameterFilterT {{Name : "destination_id" , Value : gaDestinationID }},
1158
- PayloadSizeLimit : payloadLimit .Load (),
1159
- JobsLimit : 10000 ,
1160
- }, nil ).Times (1 ).Return (& jobsdb.MoreJobsResult {JobsResult : jobsdb.JobsResult {Jobs : allJobs }}, nil )
1161
-
1162
- c .mockRouterJobsDB .EXPECT ().UpdateJobStatus (gomock .Any (), gomock .Any (), []string {customVal ["GA" ]}, nil ).Times (1 ).
1163
- Do (func (ctx context.Context , statuses []* jobsdb.JobStatusT , _ , _ interface {}) {
1164
- assertJobStatus (toRetryJobsList [0 ], statuses [0 ], jobsdb .Executing .State , "" , `{}` , 1 )
1165
- assertJobStatus (unprocessedJobsList [0 ], statuses [1 ], jobsdb .Executing .State , "" , `{}` , 0 )
1166
- assertJobStatus (unprocessedJobsList [1 ], statuses [2 ], jobsdb .Executing .State , "" , `{}` , 0 )
1167
- assertJobStatus (unprocessedJobsList [2 ], statuses [3 ], jobsdb .Executing .State , "" , `{}` , 0 )
1168
- assertJobStatus (unprocessedJobsList [3 ], statuses [4 ], jobsdb .Executing .State , "" , `{}` , 0 )
1169
- }).Return (nil ).After (callAllJobs )
1170
- mockNetHandle .EXPECT ().SendPost (gomock .Any (), gomock .Any ()).Times (0 )
1171
- done := make (chan struct {})
1172
- c .mockRouterJobsDB .EXPECT ().WithUpdateSafeTx (gomock .Any (), gomock .Any ()).Times (1 ).Do (func (ctx context.Context , f func (tx jobsdb.UpdateSafeTx ) error ) {
1173
- _ = f (jobsdb .EmptyUpdateSafeTx ())
1174
- close (done )
1175
- }).Return (nil )
1176
- c .mockRouterJobsDB .EXPECT ().UpdateJobStatusInTx (gomock .Any (), gomock .Any (), gomock .Any (), []string {customVal ["GA" ]}, nil ).Times (1 )
1177
-
1178
- <- router .backendConfigInitialized
1179
- worker := newPartitionWorker (context .Background (), router , gaDestinationID )
1180
- defer worker .Stop ()
1181
- Expect (worker .Work ()).To (BeTrue ())
1182
- Expect (worker .pickupCount ).To (Equal (5 ))
1183
- Eventually (func () bool {
1184
- select {
1185
- case <- done :
1186
- return true
1187
- default :
1188
- return false
1189
- }
1190
- }, 20 * time .Second , 100 * time .Millisecond ).Should (Equal (true ))
1191
- })
1192
-
1193
1060
It ("aborts jobs if destination is not found in config" , func () {
1194
1061
mockNetHandle := mocksRouter .NewMockNetHandle (c .mockCtrl )
1195
1062
mockTransformer := mocksTransformer .NewMockTransformer (c .mockCtrl )
@@ -1202,7 +1069,6 @@ var _ = Describe("router", func() {
1202
1069
router .transformer = mockTransformer
1203
1070
router .noOfWorkers = 1
1204
1071
router .reloadableConfig .noOfJobsToBatchInAWorker = config .SingleValueLoader (5 )
1205
- router .reloadableConfig .routerTimeout = config .SingleValueLoader (60 * time .Second )
1206
1072
1207
1073
gaPayload := `{"body": {"XML": {}, "FORM": {}, "JSON": {}}, "type": "REST", "files": {}, "method": "POST", "params": {"t": "event", "v": "1", "an": "RudderAndroidClient", "av": "1.0", "ds": "android-sdk", "ea": "Demo Track", "ec": "Demo Category", "el": "Demo Label", "ni": 0, "qt": 59268380964, "ul": "en-US", "cid": "anon_id", "tid": "UA-185645846-1", "uip": "[::1]", "aiid": "com.rudderlabs.android.sdk"}, "userId": "anon_id", "headers": {}, "version": "1", "endpoint": "https://www.google-analytics.com/collect"}`
1208
1074
parameters := fmt .Sprintf (`{"source_id": "1fMCVYZboDlYlauh4GFsEo2JU77", "destination_id": "%s", "message_id": "2f548e6d-60f6-44af-a1f4-62b3272445c3", "received_at": "2021-06-28T10:04:48.527+05:30", "transform_at": "processor"}` , nonexistentDestinationID ) // skipcq: GO-R4002
@@ -1304,7 +1170,6 @@ var _ = Describe("router", func() {
1304
1170
router .enableBatching = true
1305
1171
router .reloadableConfig .noOfJobsToBatchInAWorker = config .SingleValueLoader (3 )
1306
1172
router .noOfWorkers = 1
1307
- router .reloadableConfig .routerTimeout = config .SingleValueLoader (time .Duration (math .MaxInt64 ))
1308
1173
1309
1174
gaPayload := `{"body": {"XML": {}, "FORM": {}, "JSON": {}}, "type": "REST", "files": {}, "method": "POST", "params": {"t": "event", "v": "1", "an": "RudderAndroidClient", "av": "1.0", "ds": "android-sdk", "ea": "Demo Track", "ec": "Demo Category", "el": "Demo Label", "ni": 0, "qt": 59268380964, "ul": "en-US", "cid": "anon_id", "tid": "UA-185645846-1", "uip": "[::1]", "aiid": "com.rudderlabs.android.sdk"}, "userId": "anon_id", "headers": {}, "version": "1", "endpoint": "https://www.google-analytics.com/collect"}`
1310
1175
parameters := fmt .Sprintf (`{"source_id": "1fMCVYZboDlYlauh4GFsEo2JU77", "destination_id": "%s", "message_id": "2f548e6d-60f6-44af-a1f4-62b3272445c3", "received_at": "2021-06-28T10:04:48.527+05:30", "transform_at": "processor"}` , gaDestinationID ) // skipcq: GO-R4002
@@ -1623,7 +1488,6 @@ var _ = Describe("router", func() {
1623
1488
router .transformer = mockTransformer
1624
1489
router .noOfWorkers = 1
1625
1490
router .reloadableConfig .noOfJobsToBatchInAWorker = config .SingleValueLoader (5 )
1626
- router .reloadableConfig .routerTimeout = config .SingleValueLoader (time .Duration (math .MaxInt64 ))
1627
1491
1628
1492
gaPayload := `{"body": {"XML": {}, "FORM": {}, "JSON": {}}, "type": "REST", "files": {}, "method": "POST", "params": {"t": "event", "v": "1", "an": "RudderAndroidClient", "av": "1.0", "ds": "android-sdk", "ea": "Demo Track", "ec": "Demo Category", "el": "Demo Label", "ni": 0, "qt": 59268380964, "ul": "en-US", "cid": "anon_id", "tid": "UA-185645846-1", "uip": "[::1]", "aiid": "com.rudderlabs.android.sdk"}, "userId": "anon_id", "headers": {}, "version": "1", "endpoint": "https://www.google-analytics.com/collect"}`
1629
1493
parameters := fmt .Sprintf (`{"source_id": "1fMCVYZboDlYlauh4GFsEo2JU77", "destination_id": "%s", "message_id": "2f548e6d-60f6-44af-a1f4-62b3272445c3", "received_at": "2021-06-28T10:04:48.527+05:30", "transform_at": "router"}` , gaDestinationID ) // skipcq: GO-R4002
@@ -1833,7 +1697,6 @@ var _ = Describe("router", func() {
1833
1697
router .transformer = mockTransformer
1834
1698
router .noOfWorkers = 1
1835
1699
router .reloadableConfig .noOfJobsToBatchInAWorker = config .SingleValueLoader (3 )
1836
- router .reloadableConfig .routerTimeout = config .SingleValueLoader (time .Duration (math .MaxInt64 ))
1837
1700
1838
1701
gaPayload := `{"body": {"XML": {}, "FORM": {}, "JSON": {}}, "type": "REST", "files": {}, "method": "POST", "params": {"t": "event", "v": "1", "an": "RudderAndroidClient", "av": "1.0", "ds": "android-sdk", "ea": "Demo Track", "ec": "Demo Category", "el": "Demo Label", "ni": 0, "qt": 59268380964, "ul": "en-US", "cid": "anon_id", "tid": "UA-185645846-1", "uip": "[::1]", "aiid": "com.rudderlabs.android.sdk"}, "userId": "anon_id", "headers": {}, "version": "1", "endpoint": "https://www.google-analytics.com/collect"}`
1839
1702
parameters := fmt .Sprintf (`{"source_id": "1fMCVYZboDlYlauh4GFsEo2JU77", "destination_id": "%s", "message_id": "2f548e6d-60f6-44af-a1f4-62b3272445c3", "received_at": "2021-06-28T10:04:48.527+05:30", "transform_at": "router"}` , gaDestinationID ) // skipcq: GO-R4002
@@ -2161,7 +2024,6 @@ var _ = Describe("router", func() {
2161
2024
router .transformer = mockTransformer
2162
2025
2163
2026
router .reloadableConfig .noOfJobsToBatchInAWorker = config .SingleValueLoader (3 )
2164
- router .reloadableConfig .routerTimeout = config .SingleValueLoader (time .Duration (math .MaxInt64 ))
2165
2027
router .reloadableConfig .transformerProxy = config .SingleValueLoader (true )
2166
2028
router .noOfWorkers = 1
2167
2029
@@ -2308,7 +2170,6 @@ var _ = Describe("router", func() {
2308
2170
router .transformer = mockTransformer
2309
2171
2310
2172
router .reloadableConfig .noOfJobsToBatchInAWorker = config .SingleValueLoader (3 )
2311
- router .reloadableConfig .routerTimeout = config .SingleValueLoader (time .Duration (math .MaxInt64 ))
2312
2173
router .reloadableConfig .transformerProxy = config .SingleValueLoader (true )
2313
2174
router .noOfWorkers = 1
2314
2175
0 commit comments