@@ -1168,82 +1168,68 @@ func (q *fakeQuerier) GetAuthorizedWorkspaces(ctx context.Context, arg database.
1168
1168
return nil , xerrors .Errorf ("get provisioner job: %w" , err )
1169
1169
}
1170
1170
1171
+ // This logic should match the logic in the workspace.sql file.
1172
+ var statusMatch bool
1171
1173
switch database .WorkspaceStatus (arg .Status ) {
1172
1174
case database .WorkspaceStatusPending :
1173
- if ! job .StartedAt .Valid {
1174
- continue
1175
- }
1176
-
1175
+ statusMatch = isNull (job .StartedAt )
1177
1176
case database .WorkspaceStatusStarting :
1178
- if ! job .StartedAt .Valid &&
1179
- ! job .CanceledAt .Valid &&
1180
- job .CompletedAt .Valid &&
1181
- time .Since (job .UpdatedAt ) > 30 * time .Second ||
1182
- build .Transition != database .WorkspaceTransitionStart {
1183
- continue
1184
- }
1177
+ statusMatch = isNotNull (job .StartedAt ) &&
1178
+ isNull (job .CanceledAt ) &&
1179
+ isNull (job .CompletedAt ) &&
1180
+ time .Since (job .UpdatedAt ) < 30 * time .Second &&
1181
+ build .Transition == database .WorkspaceTransitionStart
1185
1182
1186
1183
case database .WorkspaceStatusRunning :
1187
- if ! job .CompletedAt .Valid &&
1188
- job .CanceledAt .Valid &&
1189
- job .Error .Valid ||
1190
- build .Transition != database .WorkspaceTransitionStart {
1191
- continue
1192
- }
1184
+ statusMatch = isNotNull (job .CompletedAt ) &&
1185
+ isNull (job .CanceledAt ) &&
1186
+ isNull (job .Error ) &&
1187
+ build .Transition == database .WorkspaceTransitionStart
1193
1188
1194
1189
case database .WorkspaceStatusStopping :
1195
- if ! job .StartedAt .Valid &&
1196
- ! job .CanceledAt .Valid &&
1197
- job .CompletedAt .Valid &&
1198
- time .Since (job .UpdatedAt ) > 30 * time .Second ||
1199
- build .Transition != database .WorkspaceTransitionStop {
1200
- continue
1201
- }
1190
+ statusMatch = isNotNull (job .StartedAt ) &&
1191
+ isNull (job .CanceledAt ) &&
1192
+ isNull (job .CompletedAt ) &&
1193
+ time .Since (job .UpdatedAt ) < 30 * time .Second &&
1194
+ build .Transition == database .WorkspaceTransitionStop
1202
1195
1203
1196
case database .WorkspaceStatusStopped :
1204
- if ! job .CompletedAt .Valid &&
1205
- job .CanceledAt .Valid &&
1206
- job .Error .Valid ||
1207
- build .Transition != database .WorkspaceTransitionStop {
1208
- continue
1209
- }
1210
-
1197
+ statusMatch = isNotNull (job .CompletedAt ) &&
1198
+ isNull (job .CanceledAt ) &&
1199
+ isNull (job .Error ) &&
1200
+ build .Transition == database .WorkspaceTransitionStop
1211
1201
case database .WorkspaceStatusFailed :
1212
- if (! job .CanceledAt .Valid && ! job .Error .Valid ) ||
1213
- (! job .CompletedAt .Valid && ! job .Error .Valid ) {
1214
- continue
1215
- }
1202
+ statusMatch = (isNotNull (job .CanceledAt ) && isNotNull (job .Error )) ||
1203
+ (isNotNull (job .CompletedAt ) && isNotNull (job .Error ))
1216
1204
1217
1205
case database .WorkspaceStatusCanceling :
1218
- if ! job .CanceledAt .Valid && job .CompletedAt .Valid {
1219
- continue
1220
- }
1206
+ statusMatch = isNotNull (job .CanceledAt ) &&
1207
+ isNull (job .CompletedAt )
1221
1208
1222
1209
case database .WorkspaceStatusCanceled :
1223
- if ! job .CanceledAt .Valid && ! job .CompletedAt .Valid {
1224
- continue
1225
- }
1210
+ statusMatch = isNotNull (job .CanceledAt ) &&
1211
+ isNotNull (job .CompletedAt )
1226
1212
1227
1213
case database .WorkspaceStatusDeleted :
1228
- if ! job .StartedAt .Valid &&
1229
- job .CanceledAt .Valid &&
1230
- ! job .CompletedAt .Valid &&
1231
- time .Since (job .UpdatedAt ) > 30 * time .Second ||
1232
- build .Transition != database .WorkspaceTransitionDelete {
1233
- continue
1234
- }
1214
+ statusMatch = isNotNull (job .StartedAt ) &&
1215
+ isNull (job .CanceledAt ) &&
1216
+ isNotNull (job .CompletedAt ) &&
1217
+ time .Since (job .UpdatedAt ) < 30 * time .Second &&
1218
+ build .Transition == database .WorkspaceTransitionDelete &&
1219
+ isNull (job .Error )
1235
1220
1236
1221
case database .WorkspaceStatusDeleting :
1237
- if ! job .CompletedAt .Valid &&
1238
- job .CanceledAt .Valid &&
1239
- job .Error .Valid &&
1240
- build .Transition != database .WorkspaceTransitionDelete {
1241
- continue
1242
- }
1222
+ statusMatch = isNull (job .CompletedAt ) &&
1223
+ isNull (job .CanceledAt ) &&
1224
+ isNull (job .Error ) &&
1225
+ build .Transition == database .WorkspaceTransitionDelete
1243
1226
1244
1227
default :
1245
1228
return nil , xerrors .Errorf ("unknown workspace status in filter: %q" , arg .Status )
1246
1229
}
1230
+ if ! statusMatch {
1231
+ continue
1232
+ }
1247
1233
}
1248
1234
1249
1235
if arg .HasAgent != "" {
@@ -5179,3 +5165,13 @@ func (q *fakeQuerier) UpdateWorkspaceProxyDeleted(_ context.Context, arg databas
5179
5165
}
5180
5166
return sql .ErrNoRows
5181
5167
}
5168
+
5169
+ // isNull is only used in dbfake, so reflect is ok. Use this to make the logic
5170
+ // look more similar to the postgres.
5171
+ func isNull (v interface {}) bool {
5172
+ return ! isNotNull (v )
5173
+ }
5174
+
5175
+ func isNotNull (v interface {}) bool {
5176
+ return reflect .ValueOf (v ).FieldByName ("Valid" ).Bool ()
5177
+ }
0 commit comments