Skip to content

Commit f44c4af

Browse files
authored
Merge branch 'main' into cj/cli-testprovisionerjobs-speedup
2 parents eaf5f0e + 86f9bed commit f44c4af

File tree

4 files changed

+23
-14
lines changed

4 files changed

+23
-14
lines changed

enterprise/coderd/dormancy/dormantusersjob.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,13 @@ func CheckInactiveUsersWithOptions(ctx context.Context, logger slog.Logger, clk
3737
ctx, cancelFunc := context.WithCancel(ctx)
3838
tf := clk.TickerFunc(ctx, checkInterval, func() error {
3939
startTime := time.Now()
40-
lastSeenAfter := dbtime.Now().Add(-dormancyPeriod)
40+
now := dbtime.Time(clk.Now()).UTC()
41+
lastSeenAfter := now.Add(-dormancyPeriod)
4142
logger.Debug(ctx, "check inactive user accounts", slog.F("dormancy_period", dormancyPeriod), slog.F("last_seen_after", lastSeenAfter))
4243

4344
updatedUsers, err := db.UpdateInactiveUsersToDormant(ctx, database.UpdateInactiveUsersToDormantParams{
4445
LastSeenAfter: lastSeenAfter,
45-
UpdatedAt: dbtime.Now(),
46+
UpdatedAt: now,
4647
})
4748
if err != nil && !xerrors.Is(err, sql.ErrNoRows) {
4849
logger.Error(ctx, "can't mark inactive users as dormant", slog.Error(err))

enterprise/coderd/dormancy/dormantusersjob_test.go

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -31,20 +31,28 @@ func TestCheckInactiveUsers(t *testing.T) {
3131
ctx, cancelFunc := context.WithCancel(context.Background())
3232
t.Cleanup(cancelFunc)
3333

34-
inactiveUser1 := setupUser(ctx, t, db, "dormant-user-1@coder.com", database.UserStatusActive, time.Now().Add(-dormancyPeriod).Add(-time.Minute))
35-
inactiveUser2 := setupUser(ctx, t, db, "dormant-user-2@coder.com", database.UserStatusActive, time.Now().Add(-dormancyPeriod).Add(-time.Hour))
36-
inactiveUser3 := setupUser(ctx, t, db, "dormant-user-3@coder.com", database.UserStatusActive, time.Now().Add(-dormancyPeriod).Add(-6*time.Hour))
34+
// Use a fixed base time to avoid timing races
35+
baseTime := time.Date(2023, 1, 1, 0, 0, 0, 0, time.UTC)
36+
dormancyThreshold := baseTime.Add(-dormancyPeriod)
3737

38-
activeUser1 := setupUser(ctx, t, db, "active-user-1@coder.com", database.UserStatusActive, time.Now().Add(-dormancyPeriod).Add(time.Minute))
39-
activeUser2 := setupUser(ctx, t, db, "active-user-2@coder.com", database.UserStatusActive, time.Now().Add(-dormancyPeriod).Add(time.Hour))
40-
activeUser3 := setupUser(ctx, t, db, "active-user-3@coder.com", database.UserStatusActive, time.Now().Add(-dormancyPeriod).Add(6*time.Hour))
38+
// Create inactive users (last seen BEFORE dormancy threshold)
39+
inactiveUser1 := setupUser(ctx, t, db, "dormant-user-1@coder.com", database.UserStatusActive, dormancyThreshold.Add(-time.Minute))
40+
inactiveUser2 := setupUser(ctx, t, db, "dormant-user-2@coder.com", database.UserStatusActive, dormancyThreshold.Add(-time.Hour))
41+
inactiveUser3 := setupUser(ctx, t, db, "dormant-user-3@coder.com", database.UserStatusActive, dormancyThreshold.Add(-6*time.Hour))
4142

42-
suspendedUser1 := setupUser(ctx, t, db, "suspended-user-1@coder.com", database.UserStatusSuspended, time.Now().Add(-dormancyPeriod).Add(-time.Minute))
43-
suspendedUser2 := setupUser(ctx, t, db, "suspended-user-2@coder.com", database.UserStatusSuspended, time.Now().Add(-dormancyPeriod).Add(-time.Hour))
44-
suspendedUser3 := setupUser(ctx, t, db, "suspended-user-3@coder.com", database.UserStatusSuspended, time.Now().Add(-dormancyPeriod).Add(-6*time.Hour))
43+
// Create active users (last seen AFTER dormancy threshold)
44+
activeUser1 := setupUser(ctx, t, db, "active-user-1@coder.com", database.UserStatusActive, baseTime.Add(-time.Minute))
45+
activeUser2 := setupUser(ctx, t, db, "active-user-2@coder.com", database.UserStatusActive, baseTime.Add(-time.Hour))
46+
activeUser3 := setupUser(ctx, t, db, "active-user-3@coder.com", database.UserStatusActive, baseTime.Add(-6*time.Hour))
47+
48+
suspendedUser1 := setupUser(ctx, t, db, "suspended-user-1@coder.com", database.UserStatusSuspended, dormancyThreshold.Add(-time.Minute))
49+
suspendedUser2 := setupUser(ctx, t, db, "suspended-user-2@coder.com", database.UserStatusSuspended, dormancyThreshold.Add(-time.Hour))
50+
suspendedUser3 := setupUser(ctx, t, db, "suspended-user-3@coder.com", database.UserStatusSuspended, dormancyThreshold.Add(-6*time.Hour))
4551

4652
mAudit := audit.NewMock()
4753
mClock := quartz.NewMock(t)
54+
// Set the mock clock to the base time to ensure consistent behavior
55+
mClock.Set(baseTime)
4856
// Run the periodic job
4957
closeFunc := dormancy.CheckInactiveUsersWithOptions(ctx, logger, mClock, db, mAudit, interval, dormancyPeriod)
5058
t.Cleanup(closeFunc)

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,7 @@ require (
309309
github.com/go-playground/universal-translator v0.18.1 // indirect
310310
github.com/go-sourcemap/sourcemap v2.1.3+incompatible // indirect
311311
github.com/go-test/deep v1.1.0 // indirect
312-
github.com/go-viper/mapstructure/v2 v2.3.0 // indirect
312+
github.com/go-viper/mapstructure/v2 v2.4.0 // indirect
313313
github.com/gobwas/glob v0.2.3 // indirect
314314
github.com/gobwas/httphead v0.1.0 // indirect
315315
github.com/gobwas/pool v0.2.1 // indirect

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1154,8 +1154,8 @@ github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpv
11541154
github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
11551155
github.com/go-test/deep v1.1.0 h1:WOcxcdHcvdgThNXjw0t76K42FXTU7HpNQWHpA2HHNlg=
11561156
github.com/go-test/deep v1.1.0/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE=
1157-
github.com/go-viper/mapstructure/v2 v2.3.0 h1:27XbWsHIqhbdR5TIC911OfYvgSaW93HM+dX7970Q7jk=
1158-
github.com/go-viper/mapstructure/v2 v2.3.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
1157+
github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs=
1158+
github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
11591159
github.com/gobuffalo/flect v1.0.3 h1:xeWBM2nui+qnVvNM4S3foBhCAL2XgPU+a7FdpelbTq4=
11601160
github.com/gobuffalo/flect v1.0.3/go.mod h1:A5msMlrHtLqh9umBSnvabjsMrCcCpAyzglnDvkbYKHs=
11611161
github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y=

0 commit comments

Comments
 (0)