Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
8fc2dd3
adapter: harden s3 routing and consistency
bootjp Mar 22, 2026
bf5f059
adapter: address s3 review feedback
bootjp Mar 22, 2026
1e9f817
Initial plan
Copilot Mar 22, 2026
8d240fb
address review comments: HLC monotonicity, SigV4 sig comparison, coor…
Copilot Mar 22, 2026
269c231
Merge pull request #399 from bootjp/copilot/sub-pr-396
bootjp Mar 22, 2026
8a83366
Initial plan
Copilot Mar 22, 2026
60ed277
fix: HLC monotonicity, nil guards in Run(), and coordinator/config pa…
Copilot Mar 22, 2026
9c629f7
Merge pull request #402 from bootjp/copilot/sub-pr-396
bootjp Mar 22, 2026
5259dfc
Initial plan
Copilot Mar 22, 2026
41a7f2c
fix: s3 error leakage, HLC observe, and PUT body size limit
Copilot Mar 22, 2026
8e41c18
Merge pull request #404 from bootjp/copilot/sub-pr-396
bootjp Mar 22, 2026
e8085ea
Initial plan
Copilot Mar 22, 2026
57983e3
Merge branch 'main' into feature/s3-impl
bootjp Mar 22, 2026
2edcd2a
fix: bound cleanup goroutines, fix retry off-by-one, log dispatch errors
Copilot Mar 22, 2026
1fe3490
Initial plan
Copilot Mar 22, 2026
e951182
fix: add missing setupFSMStore function lost in merge
Copilot Mar 22, 2026
24df609
fix: reduce run() cyclomatic complexity to satisfy cyclop linter
Copilot Mar 22, 2026
7ad71a7
Merge pull request #408 from bootjp/copilot/sub-pr-396-again
bootjp Mar 22, 2026
418fcd8
Merge branch 'feature/s3-impl' into copilot/sub-pr-396
bootjp Mar 22, 2026
52cf0ec
fix: reduce cleanupManifestBlobs cyclomatic complexity for cyclop linter
Copilot Mar 22, 2026
dd673c0
Merge pull request #407 from bootjp/copilot/sub-pr-396
bootjp Mar 22, 2026
05a1fd6
Initial plan
Copilot Mar 22, 2026
0d17d92
Fix ListObjectsV2 pagination: parse token first, load meta at consist…
Copilot Mar 22, 2026
c98b088
Merge pull request #409 from bootjp/copilot/sub-pr-396
bootjp Mar 22, 2026
128503f
Update cmd/server/demo.go
bootjp Mar 23, 2026
2d25ed4
Initial plan
Copilot Mar 23, 2026
65d9eaf
adapter/s3: use base64.RawURLEncoding for continuation tokens
Copilot Mar 23, 2026
b3c2459
cmd/server: fix range over iter.Seq compile error in demo.go
Copilot Mar 23, 2026
b41181d
Merge pull request #410 from bootjp/copilot/sub-pr-396
bootjp Mar 23, 2026
7aa00f7
Initial plan
Copilot Mar 23, 2026
61fa09e
kv: fix reverseScanRoutesAt to merge+sort descending when clampToRout…
Copilot Mar 23, 2026
d6fd20f
kv: add tests for ReverseScanAt cross-shard ordering and mergeAndTrim…
Copilot Mar 23, 2026
bd857e7
Merge pull request #411 from bootjp/copilot/sub-pr-396
bootjp Mar 23, 2026
90e6e70
Initial plan
Copilot Mar 23, 2026
7682358
Fix s3/shard_store issues: always sort in mergeAndTrimReverseScanResu…
Copilot Mar 23, 2026
ca7a3b6
Merge pull request #412 from bootjp/copilot/sub-pr-396
bootjp Mar 23, 2026
28d6633
Initial plan
Copilot Mar 23, 2026
c61c8d1
kv: zero CommitTS when StartTS is auto-assigned in coordinators
Copilot Mar 23, 2026
9a09659
Merge pull request #413 from bootjp/copilot/sub-pr-396
bootjp Mar 23, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 47 additions & 14 deletions adapter/dynamodb_migration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,24 +28,57 @@ func (c *localAdapterCoordinator) Dispatch(ctx context.Context, req *kv.Operatio
if req == nil {
return &kv.CoordinateResponse{}, nil
}
commitTS := c.Clock().Next()
if req.IsTxn && commitTS <= req.StartTS {
c.Clock().Observe(req.StartTS)
commitTS, err := c.commitTSForRequest(req)
if err != nil {
return nil, err
}
if err := c.applyElems(ctx, req.Elems, commitTS); err != nil {
return nil, err
}
return &kv.CoordinateResponse{}, nil
}

func (c *localAdapterCoordinator) commitTSForRequest(req *kv.OperationGroup[kv.OP]) (uint64, error) {
if req == nil {
return 0, nil
}
commitTS := req.CommitTS
if commitTS == 0 {
commitTS = c.Clock().Next()
if req.IsTxn && commitTS <= req.StartTS {
c.Clock().Observe(req.StartTS)
commitTS = c.Clock().Next()
}
} else {
c.Clock().Observe(commitTS)
}
for _, elem := range req.Elems {
switch elem.Op {
case kv.Put:
if err := c.store.PutAt(ctx, elem.Key, elem.Value, commitTS, 0); err != nil {
return nil, err
}
case kv.Del:
if err := c.store.DeleteAt(ctx, elem.Key, commitTS); err != nil {
return nil, err
}
if req.IsTxn && commitTS <= req.StartTS {
return 0, kv.ErrTxnCommitTSRequired
}
Copy link

Copilot AI Mar 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

localAdapterCoordinator.commitTSForRequest accepts a caller-provided CommitTS but does not Observe() it on the HLC. If a test provides a CommitTS ahead of the coordinator clock, subsequent Next() calls can go backwards relative to that CommitTS, which can make timestamp-dependent behavior flaky or diverge from production coordinator behavior. Consider observing non-zero CommitTS (and/or StartTS) to keep the test clock monotonic.

Suggested change
}
}
if commitTS != 0 {
c.Clock().Observe(commitTS)
}

Copilot uses AI. Check for mistakes.
return commitTS, nil
}

func (c *localAdapterCoordinator) applyElems(ctx context.Context, elems []*kv.Elem[kv.OP], commitTS uint64) error {
for _, elem := range elems {
if err := c.applyElem(ctx, elem, commitTS); err != nil {
return err
}
}
return &kv.CoordinateResponse{}, nil
return nil
}

func (c *localAdapterCoordinator) applyElem(ctx context.Context, elem *kv.Elem[kv.OP], commitTS uint64) error {
if elem == nil {
return nil
}
switch elem.Op {
case kv.Put:
return c.store.PutAt(ctx, elem.Key, elem.Value, commitTS, 0)
case kv.Del:
return c.store.DeleteAt(ctx, elem.Key, commitTS)
default:
return nil
}
}

func newLegacyMigrationTestServer(
Expand Down
Loading
Loading