1.Support open-ended intervals:
In our kudu source code, we just cull row-sets when lower_bound_key and exclusive_upper_bound_key are existing at the same time. And if not, we will grab all row-sets of the tablet, then have to seek the key in ‘CFileSet::Iterator::PushdownRangeScanPredicate’ for the unnecessary row-sets (which will waste disk io).
After modification, we could cull rowsets whether lower_bound_key or exclusive_upper_bound_key exists or not;
2.The upper bound key is exclusive, but the RowSetTree function takes an inclusive interval. So, we might end up fetching one more rowset than necessary.
After modification, the upper bound will only fetch the exactly rowsets;
3.Perf improvement: using raw slices instead of copying to strings while querying.
After modification, the copying from slices to string is discarded.