Skip to content

Commit 08f387c

Browse files
Swopxvzf
authored andcommitted
fix: review feedback
1 parent 0126c40 commit 08f387c

File tree

5 files changed

+67
-29
lines changed

5 files changed

+67
-29
lines changed

internal/config/load_test.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,15 @@ const (
1414
- owner: test
1515
name: repo0
1616
base_ref: main
17-
stabilize_duration: 300
17+
stabilize_duration_seconds: 300
1818
expected_request_count: 4
19-
ttl: 20
19+
ttl_seconds: 20
2020
- owner: test
2121
name: repo1
2222
base_ref: develop
23-
stabilize_duration: 100
23+
stabilize_duration_seconds: 100
2424
expected_request_count: 5
25-
ttl: 30`
25+
ttl_seconds: 30`
2626
)
2727

2828
func TestLoadServerConfig(t *testing.T) {

internal/config/server/latest/server_schema.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ type GithubRepositoryConfig struct {
1010
Owner string `yaml:"owner"`
1111
Name string `yaml:"name"`
1212
BaseRef string `yaml:"base_ref"`
13-
StabilizeDuration int `yaml:"stabilize_duration"`
14-
TTL int `yaml:"ttl"`
13+
StabilizeDuration int `yaml:"stabilize_duration_seconds"`
14+
TTL int `yaml:"ttl_seconds"`
1515
ExpectedRequestCount int `yaml:"expected_request_count"`
1616
}

internal/lease/leaseprovider.go

+56-17
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ type leaseProviderImpl struct {
6262
mutex sync.Mutex
6363
opts ProviderOpts
6464

65-
lastUpdatedAt *time.Time
65+
lastUpdatedAt time.Time
6666

6767
acquired *Request
6868
known map[string]*Request
@@ -71,14 +71,14 @@ type leaseProviderImpl struct {
7171
func NewLeaseProvider(opts ProviderOpts) Provider {
7272
return &leaseProviderImpl{
7373
opts: opts,
74-
lastUpdatedAt: nil,
74+
lastUpdatedAt: time.Now(),
7575
known: make(map[string]*Request),
7676
}
7777
}
7878

7979
func (lp *leaseProviderImpl) MarshalJSON() ([]byte, error) {
8080
return json.Marshal(&struct {
81-
LastUpdatedAt *time.Time `json:"last_updated_at"`
81+
LastUpdatedAt time.Time `json:"last_updated_at"`
8282
Acquired *Request `json:"acquired"`
8383
Known map[string]*Request `json:"known"`
8484
}{
@@ -148,7 +148,12 @@ func (lp *leaseProviderImpl) insert(ctx context.Context, leaseRequest *Request)
148148
log.Ctx(ctx).Debug().EmbedObject(leaseRequest).Msg("Lease request is already existing")
149149
// Priority changed, update it
150150
if existing.Priority != leaseRequest.Priority {
151-
log.Ctx(ctx).Debug().EmbedObject(leaseRequest).Msgf("Lease request priority has changed (previous: %d, new: %d)", existing.Priority, leaseRequest.Priority)
151+
log.Ctx(ctx).
152+
Debug().
153+
EmbedObject(leaseRequest).
154+
Int("previous_priority", existing.Priority).
155+
Int("new_priority", leaseRequest.Priority).
156+
Msg("Lease request priority has changed")
152157
existing.Priority = leaseRequest.Priority
153158
updated = true
154159
}
@@ -160,7 +165,12 @@ func (lp *leaseProviderImpl) insert(ctx context.Context, leaseRequest *Request)
160165
allowedTransition := existingStatus == StatusAcquired && (leaseRequestStatus == StatusSuccess || leaseRequestStatus == StatusFailure)
161166
// condition
162167
if statusMismatch && allowedTransition {
163-
log.Ctx(ctx).Debug().EmbedObject(leaseRequest).Msgf("Lease request status has changed (previous: %s, new: %s)", existingStatus, leaseRequestStatus)
168+
log.Ctx(ctx).
169+
Debug().
170+
EmbedObject(leaseRequest).
171+
Str("previous_status", existingStatus).
172+
Str("new_status", leaseRequestStatus).
173+
Msg("Lease request status has changed")
164174
existing.Status = &leaseRequestStatus
165175
updated = true
166176
} else if statusMismatch {
@@ -172,9 +182,12 @@ func (lp *leaseProviderImpl) insert(ctx context.Context, leaseRequest *Request)
172182
}
173183

174184
if updated {
175-
now := time.Now()
176-
lp.lastUpdatedAt = &now
177-
log.Ctx(ctx).Debug().Msgf("Provider last updated time bumped (new time: %s, StabilizeDuration now ends at %s)", lp.lastUpdatedAt.Format(time.RFC3339), lp.lastUpdatedAt.Add(lp.opts.StabilizeDuration).Format(time.RFC3339))
185+
lp.lastUpdatedAt = time.Now()
186+
log.Ctx(ctx).
187+
Debug().
188+
Time("new_last_updated_at", lp.lastUpdatedAt).
189+
Time("new_stabilize_ends_at", lp.lastUpdatedAt.Add(lp.opts.StabilizeDuration)).
190+
Msg("Provider last updated time bumped")
178191
}
179192

180193
lp.evictTTL(ctx)
@@ -188,20 +201,40 @@ func (lp *leaseProviderImpl) evaluateRequest(ctx context.Context, req *Request)
188201

189202
if lp.acquired != nil && !(pointer.StringDeref(lp.acquired.Status, StatusAcquired) == StatusFailure) {
190203
// Lock already acquired
191-
log.Ctx(ctx).Debug().EmbedObject(req).Msgf("Lock already acquired (by sha %s, priority %d)", lp.acquired.HeadSHA, lp.acquired.Priority)
204+
log.Ctx(ctx).
205+
Debug().
206+
EmbedObject(req).
207+
Msgf("Lock already acquired (by sha %s, priority %d)", lp.acquired.HeadSHA, lp.acquired.Priority)
192208
return req
193209
}
194210
// 1st: we reached the time limit -> lastUpdatedAt + StabilizeDuration > now
195-
passedStabilizeDuration := time.Since(*lp.lastUpdatedAt) >= lp.opts.StabilizeDuration
196-
log.Ctx(ctx).Debug().Msg("Now: " + time.Now().Format(time.RFC3339))
197-
log.Ctx(ctx).Debug().EmbedObject(req).Msgf("Stabilize duration check: Duration config: %.0fs, Last updated at: %s, Stabilize duration end: %s, Stabilize duration passed: %t", lp.opts.StabilizeDuration.Seconds(), lp.lastUpdatedAt.Format(time.RFC3339), lp.lastUpdatedAt.Add(lp.opts.StabilizeDuration).Format(time.RFC3339), passedStabilizeDuration)
211+
passedStabilizeDuration := time.Since(lp.lastUpdatedAt) >= lp.opts.StabilizeDuration
212+
log.Ctx(ctx).
213+
Debug().
214+
EmbedObject(req).
215+
Float64("config_stabilize_duration_sec", lp.opts.StabilizeDuration.Seconds()).
216+
Time("last_updated_at", lp.lastUpdatedAt).
217+
Time("stabilize_ends_at", lp.lastUpdatedAt.Add(lp.opts.StabilizeDuration)).
218+
Time("current_time", time.Now()).
219+
Bool("stabilize_duration_passed", passedStabilizeDuration).
220+
Msg("Stabilize duration check")
221+
198222
// 2nd: we received all requests and can take a decision
199-
// 3rd: there has been no previous failure
200223
reachedExpectedRequestCount := len(lp.known) >= lp.opts.ExpectedRequestCount
201-
log.Ctx(ctx).Debug().EmbedObject(req).Msgf("Expected request count check: config: %d, actual: %d, expected request count reached: %t", lp.opts.ExpectedRequestCount, len(lp.known), reachedExpectedRequestCount)
224+
log.Ctx(ctx).
225+
Debug().
226+
EmbedObject(req).
227+
Int("config_expected_request_count", lp.opts.ExpectedRequestCount).
228+
Int("actual_request_count", len(lp.known)).
229+
Bool("expected_request_count_reached", reachedExpectedRequestCount).
230+
Msg("Expected request count check")
202231

232+
// 3rd: there has been no previous failure
203233
if lp.acquired == nil && (!passedStabilizeDuration && !reachedExpectedRequestCount) {
204-
log.Ctx(ctx).Debug().EmbedObject(req).Msg("Stabilize duration has not been met yet, or we're still waiting for more request to register")
234+
log.Ctx(ctx).
235+
Debug().
236+
EmbedObject(req).
237+
Msg("Stabilize duration has not been met yet, or we're still waiting for more request to register")
205238
return req
206239
}
207240

@@ -217,8 +250,14 @@ func (lp *leaseProviderImpl) evaluateRequest(ctx context.Context, req *Request)
217250
if req.Priority == maxPriority {
218251
req.Status = pointer.String(StatusAcquired)
219252
lp.acquired = req
220-
log.Ctx(ctx).Debug().EmbedObject(req).Msg("Current lease request has the higher priority. It then acquires the lock")
221-
log.Ctx(ctx).Info().EmbedObject(req).Msg("Lock acquired")
253+
log.Ctx(ctx).
254+
Debug().
255+
EmbedObject(req).
256+
Msg("Current lease request has the higher priority. It then acquires the lock")
257+
log.Ctx(ctx).
258+
Info().
259+
EmbedObject(req).
260+
Msg("Lock acquired")
222261
}
223262

224263
return req

internal/lease/leaseprovider_test.go

+4-5
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ func TestLeaseRequest_UpdateLastSeenAt_Update(t *testing.T) {
3131
}
3232

3333
func TestNewLeaseProvider(t *testing.T) {
34+
creationTime := time.Now()
3435
opts := ProviderOpts{
3536
StabilizeDuration: time.Minute,
3637
TTL: time.Second,
@@ -43,7 +44,7 @@ func TestNewLeaseProvider(t *testing.T) {
4344
assert.Equal(t, opts, leaseProviderImpl.opts)
4445
assert.NotNil(t, leaseProviderImpl.known)
4546
assert.Nil(t, leaseProviderImpl.acquired)
46-
assert.Nil(t, leaseProviderImpl.lastUpdatedAt)
47+
assert.True(t, leaseProviderImpl.lastUpdatedAt.After(creationTime))
4748
}
4849

4950
func Test_leaseProviderImpl_insert_update_ok(t *testing.T) {
@@ -242,8 +243,7 @@ func Test_leaseProviderImpl_evaluateRequest_timePassed(t *testing.T) {
242243
assert.Equal(t, *req2.Status, StatusPending)
243244

244245
// Simulate a time passed by setting the last updated timestamp in the past
245-
updatedAt := time.Now().Add(-2 * time.Minute)
246-
lpImpl.lastUpdatedAt = &updatedAt
246+
lpImpl.lastUpdatedAt = time.Now().Add(-2 * time.Minute)
247247
_ = lpImpl.evaluateRequest(context.Background(), req2)
248248
assert.Equal(t, *req2.Status, StatusAcquired)
249249
}
@@ -438,8 +438,7 @@ func Test_leaseProviderImpl__FullLoop_ReleaseFailedNoNewRequest(t *testing.T) {
438438

439439
// req2 has the highest priority -> it gets the lease (assuming sufficient time passed)
440440
// (note: backdate the stabilisation duration)
441-
updatedAt := time.Now().Add(-100 * time.Minute)
442-
lpImpl.lastUpdatedAt = &updatedAt
441+
lpImpl.lastUpdatedAt = time.Now().Add(-100 * time.Minute)
443442
req2, err = lp.Acquire(context.Background(), req2)
444443
assert.NoError(t, err)
445444
assert.Equal(t, StatusAcquired, *req2.Status)

internal/server/handlers/utils.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ func getLeaseProviderOrFail(c *fiber.Ctx, orchestrator lease.ProviderOrchestrato
2828
provider, err := orchestrator.Get(owner, repo, baseRef)
2929
if err != nil {
3030
log.Ctx(c.UserContext()).Error().Err(err).Msg("Error when retrieving provider")
31-
return nil, apiError(c, fiber.StatusBadRequest, err.Error(), nil)
31+
return nil, apiError(c, fiber.StatusNotFound, err.Error(), nil)
3232
}
3333

3434
return provider, nil

0 commit comments

Comments
 (0)