0
0
Fork 0

tuning the edge for merge-task execution loop

Adjusting the merge task creation loop to accommodate
the newly merged segments so that the eventual merge
results/ number of segments stay within the calculated budget.
This commit is contained in:
Sreekanth Sivasankaran 2018-02-06 13:48:16 +05:30
parent ff210fbc6d
commit 07274c036d
2 changed files with 23 additions and 4 deletions

View File

@ -186,13 +186,13 @@ func plan(segmentsIn []Segment, o *MergePlanOptions) (*MergePlan, error) {
// While were over budget, keep looping, which might produce
// another MergeTask.
for len(eligibles) > budgetNumSegments {
for len(eligibles) > 0 && (len(eligibles)+len(rv.Tasks)) > budgetNumSegments {
// Track a current best roster as we examine and score
// potential rosters of merges.
var bestRoster []Segment
var bestRosterScore float64 // Lower score is better.
for startIdx := 0; startIdx < len(eligibles)-o.SegmentsPerMergeTask; startIdx++ {
for startIdx := 0; startIdx < len(eligibles); startIdx++ {
var roster []Segment
var rosterLiveSize int64

View File

@ -73,7 +73,16 @@ func TestSimplePlan(t *testing.T) {
segs[2],
},
nil,
&MergePlan{},
&MergePlan{
Tasks: []*MergeTask{
&MergeTask{
Segments: []Segment{
segs[2],
segs[1],
},
},
},
},
nil,
},
{"3 segments",
@ -83,7 +92,17 @@ func TestSimplePlan(t *testing.T) {
segs[9],
},
nil,
&MergePlan{},
&MergePlan{
Tasks: []*MergeTask{
&MergeTask{
Segments: []Segment{
segs[9],
segs[2],
segs[1],
},
},
},
},
nil,
},
{"many segments",