fix: [2.5] self-heal compaction segment positions and add L0 force-select bypass#48909
Conversation
|
[INFO] PR Label Summary by Default
[WARNING] Milestone not set
You can set milestone by commenting: Use /refresh-label to update related check and label manually |
|
[ci-v2-notice] To rerun ci-v2 checks, comment with:
If you have any questions or requests, please contact @zhikunyao. |
|
[INFO] PR Label Summary by Default
[WARNING] Milestone not set
You can set milestone by commenting: Use /refresh-label to update related check and label manually |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## 2.5 #48909 +/- ##
===========================================
+ Coverage 58.41% 82.05% +23.63%
===========================================
Files 1470 1589 +119
Lines 239133 249573 +10440
===========================================
+ Hits 139698 204791 +65093
+ Misses 92387 38738 -53649
+ Partials 7048 6044 -1004
🚀 New features to boost your workflow:
|
|
[INFO] PR Label Summary by Default
[WARNING] Milestone not set
You can set milestone by commenting: Use /refresh-label to update related check and label manually |
|
[INFO] PR Label Summary by Default
[WARNING] Milestone not set
You can set milestone by commenting: Use /refresh-label to update related check and label manually |
|
@XuanYang-cn Thanks for your contribution. Please submit with DCO, see the contributing guide https://github.com/milvus-io/milvus/blob/master/CONTRIBUTING.md#developer-certificate-of-origin-dco. |
|
[INFO] PR Label Summary by Default
Use /refresh-label to update related check and label manually |
53b78cc to
d95a1b7
Compare
…lect bypass Compaction inherits StartPosition/DmlPosition from source segments via getMinPosition without recalculating from actual data. The import position bug (PR milvus-io#47276) wrote wrong timestamps on imported segments, and these wrong positions persist and propagate through compaction. L0 compaction then misses L1/L2 segments due to StartPosition mismatches, causing zombie L0 segments and silent delete loss. There is also a latent bug: DmlPosition in mix/clustering compaction uses getMinPosition, but DmlPosition represents the latest entity timestamp and should use max. See also: milvus-io#46435 pr: milvus-io#48907 Signed-off-by: yangxuan <xuan.yang@zilliz.com>
d95a1b7 to
75bd3b8
Compare
|
[INFO] PR Label Summary by Default
Use /refresh-label to update related check and label manually |
1 similar comment
|
[INFO] PR Label Summary by Default
Use /refresh-label to update related check and label manually |
|
@XuanYang-cn go-sdk check failed, comment |
…estGrowingSegmentPos > realL0DmlTs buildView() set earliestGrowingSegmentPos.Timestamp == realL0DmlTs (5000), so Trigger()'s dmlPos < earliestGrowingSegmentPos filter always produced an empty validSegments slice and Trigger() returned nil. The subsequent s.Require().NotNil aborted both subtests before selectSealedSegment() was ever called, leaving the SelectSegments mock expectation unmet. Fix: use Timestamp=10000 for earliestGrowingSegmentPos — strictly greater than realL0DmlTs (5000) so L0 segments pass the Trigger() filter, and strictly less than highPosSeg.StartPosition (20000) so the flag-off path (task.Pos=10000) still excludes highPosSeg while the flag-on path (task.Pos=MaxUint64) includes it. Signed-off-by: yangxuan <xuan.yang@zilliz.com>
|
[INFO] PR Label Summary by Default
Use /refresh-label to update related check and label manually |
|
/ci-rerun-ut-go |
|
/lgtm |
|
[APPROVALNOTIFIER] This PR is APPROVED This pull-request has been approved by: tedxu, XuanYang-cn The full list of commands accepted by this bot can be found here. The pull request process is described here DetailsNeeds approval from an approver in each of these files:
Approvers can indicate their approval by writing |
|
[INFO] PR Label Summary by Default
Use /refresh-label to update related check and label manually |
Compaction inherits StartPosition/DmlPosition from source segments via getMinPosition without recalculating from actual data. The import position bug (PR #47276) wrote wrong timestamps on imported segments, and these wrong positions persist and propagate through compaction. L0 compaction then misses L1/L2 segments due to StartPosition mismatches, causing zombie L0 segments and silent delete loss.
There is also a latent bug: DmlPosition in mix/clustering compaction uses getMinPosition, but DmlPosition represents the latest entity timestamp and should use max.
See also: #46435
pr: #48907