sortByOverlap sorts tables in increasing order of overlap with next level.
(tables []*table.Table, cd *compactDef)
| 831 | |
| 832 | // sortByOverlap sorts tables in increasing order of overlap with next level. |
| 833 | func (s *levelsController) sortByOverlap(tables []*table.Table, cd *compactDef) { |
| 834 | if len(tables) == 0 || cd.nextLevel == nil { |
| 835 | return |
| 836 | } |
| 837 | |
| 838 | tableOverlap := make([]int, len(tables)) |
| 839 | for i := range tables { |
| 840 | // get key range for table |
| 841 | tableRange := getKeyRange(tables[i]) |
| 842 | // get overlap with next level |
| 843 | left, right := cd.nextLevel.overlappingTables(levelHandlerRLocked{}, tableRange) |
| 844 | tableOverlap[i] = right - left |
| 845 | } |
| 846 | |
| 847 | sort.Slice(tables, func(i, j int) bool { |
| 848 | return tableOverlap[i] < tableOverlap[j] |
| 849 | }) |
| 850 | } |
| 851 | |
| 852 | func (s *levelsController) fillTables(cd *compactDef) bool { |
| 853 | cd.lockLevels() |