Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 2147402

Browse files
elekStorj Robot
authored andcommitted
satellite/repair: jobq re-push should keep stat fields
For retry (Release) we select the repair item, and re-push it. We need to keep the stats both for the Select, and the Push Change-Id: I0f8e287e659b86013519ac435ee0d014aee9d5af
1 parent 85f636c commit 2147402

File tree

2 files changed

+43
-23
lines changed

2 files changed

+43
-23
lines changed

satellite/jobq/repairqueue.go

Lines changed: 29 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -111,13 +111,16 @@ func (rjq *RepairJobQueue) Select(ctx context.Context, limit int, includedPlacem
111111
attemptedAt = &t
112112
}
113113
seg := queue.InjuredSegment{
114-
StreamID: job.ID.StreamID,
115-
Position: metabase.SegmentPositionFromEncoded(job.ID.Position),
116-
SegmentHealth: job.Health,
117-
AttemptedAt: attemptedAt,
118-
UpdatedAt: time.Unix(int64(job.UpdatedAt), 0),
119-
InsertedAt: time.Unix(int64(job.InsertedAt), 0),
120-
Placement: storj.PlacementConstraint(job.Placement),
114+
StreamID: job.ID.StreamID,
115+
Position: metabase.SegmentPositionFromEncoded(job.ID.Position),
116+
SegmentHealth: job.Health,
117+
AttemptedAt: attemptedAt,
118+
UpdatedAt: time.Unix(int64(job.UpdatedAt), 0),
119+
InsertedAt: time.Unix(int64(job.InsertedAt), 0),
120+
Placement: storj.PlacementConstraint(job.Placement),
121+
NumNormalizedRetrievable: job.NumNormalizedRetrievable,
122+
NumNormalizedHealthy: job.NumNormalizedHealthy,
123+
NumOutOfPlacement: job.NumOutOfPlacement,
121124
}
122125
injuredSegments = append(injuredSegments, seg)
123126
}
@@ -138,12 +141,15 @@ func (rjq *RepairJobQueue) Release(ctx context.Context, job queue.InjuredSegment
138141
// would be left in the queue under PostgreSQL/Cockroach,
139142
// just with an updated LastAttemptedAt.
140143
rJob := RepairJob{
141-
ID: SegmentIdentifier{StreamID: job.StreamID, Position: job.Position.Encode()},
142-
Health: job.SegmentHealth,
143-
InsertedAt: uint64(job.InsertedAt.Unix()),
144-
LastAttemptedAt: ServerTimeNow,
145-
UpdatedAt: uint64(job.UpdatedAt.Unix()),
146-
Placement: uint16(job.Placement),
144+
ID: SegmentIdentifier{StreamID: job.StreamID, Position: job.Position.Encode()},
145+
Health: job.SegmentHealth,
146+
InsertedAt: uint64(job.InsertedAt.Unix()),
147+
LastAttemptedAt: ServerTimeNow,
148+
UpdatedAt: uint64(job.UpdatedAt.Unix()),
149+
Placement: uint16(job.Placement),
150+
NumNormalizedHealthy: job.NumNormalizedHealthy,
151+
NumNormalizedRetrievable: job.NumNormalizedRetrievable,
152+
NumOutOfPlacement: job.NumOutOfPlacement,
147153
}
148154
rJob.NumAttempts++
149155
_, err := rjq.jobqClient.Push(ctx, rJob)
@@ -171,13 +177,16 @@ func (rjq *RepairJobQueue) SelectN(ctx context.Context, limit int) ([]queue.Inju
171177
attemptedAt = &t
172178
}
173179
seg := queue.InjuredSegment{
174-
StreamID: job.ID.StreamID,
175-
Position: metabase.SegmentPositionFromEncoded(job.ID.Position),
176-
SegmentHealth: job.Health,
177-
AttemptedAt: attemptedAt,
178-
UpdatedAt: time.Unix(int64(job.UpdatedAt), 0),
179-
InsertedAt: time.Unix(int64(job.InsertedAt), 0),
180-
Placement: storj.PlacementConstraint(job.Placement),
180+
StreamID: job.ID.StreamID,
181+
Position: metabase.SegmentPositionFromEncoded(job.ID.Position),
182+
SegmentHealth: job.Health,
183+
AttemptedAt: attemptedAt,
184+
UpdatedAt: time.Unix(int64(job.UpdatedAt), 0),
185+
InsertedAt: time.Unix(int64(job.InsertedAt), 0),
186+
Placement: storj.PlacementConstraint(job.Placement),
187+
NumNormalizedRetrievable: job.NumNormalizedRetrievable,
188+
NumNormalizedHealthy: job.NumNormalizedHealthy,
189+
NumOutOfPlacement: job.NumOutOfPlacement,
181190
}
182191
injuredSegments = append(injuredSegments, seg)
183192
}

satellite/jobq/repairqueue_test.go

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"storj.io/common/testcontext"
2424
"storj.io/common/testrand"
2525
"storj.io/common/uuid"
26+
"storj.io/storj/satellite/jobq"
2627
"storj.io/storj/satellite/jobq/jobqtest"
2728
"storj.io/storj/satellite/metabase"
2829
"storj.io/storj/satellite/repair/queue"
@@ -231,7 +232,8 @@ func TestRepairQueue_BatchInsert(t *testing.T) {
231232
}
232233

233234
func TestRepairQueue_Stat(t *testing.T) {
234-
jobqtest.Run(t, func(ctx *testcontext.Context, t *testing.T, rq queue.RepairQueue) {
235+
jobqtest.WithServerAndClient(t, nil, func(ctx *testcontext.Context, srv *jobqtest.TestServer, cli *jobq.Client) {
236+
rq := jobq.WrapJobQueue(cli)
235237
testSegments := make([]*queue.InjuredSegment, 20)
236238
for i := 0; i < len(testSegments); i++ {
237239

@@ -245,8 +247,11 @@ func TestRepairQueue_Stat(t *testing.T) {
245247
Part: uint32(i),
246248
Index: 2,
247249
},
248-
SegmentHealth: 10,
249-
Placement: placement,
250+
SegmentHealth: 10,
251+
Placement: placement,
252+
NumNormalizedHealthy: 5,
253+
NumNormalizedRetrievable: 6,
254+
NumOutOfPlacement: 7,
250255
}
251256
testSegments[i] = is
252257
}
@@ -259,6 +264,12 @@ func TestRepairQueue_Stat(t *testing.T) {
259264
err = rq.Release(ctx, job[0], false)
260265
require.NoError(t, err)
261266

267+
inspect, err := cli.Inspect(ctx, job[0].Placement, job[0].StreamID, job[0].Position.Encode())
268+
require.NoError(t, err)
269+
require.Equal(t, int16(5), inspect.NumNormalizedHealthy)
270+
require.Equal(t, int16(6), inspect.NumNormalizedRetrievable)
271+
require.Equal(t, int16(7), inspect.NumOutOfPlacement)
272+
262273
stat, err := rq.Stat(ctx)
263274
require.NoError(t, err)
264275

0 commit comments

Comments
 (0)