In our test, there are two families' keyvalue for one row.
But we could find a infrequent problem when doing scan's next if majorCompaction happens concurrently.
In the client's two continuous doing scan.next():
1.First time, scan's next returns the result where family A is null.
2.Second time, scan's next returns the result where family B is null.
The two next()'s result have the same row.
If there are more families, I think the scenario will be more strange...
We find the reason is that storescanner.peek() is changed after majorCompaction if there are delete type KeyValue.
This change causes the PriorityQueue<KeyValueScanner> of RegionScanner's heap is not sure to be sorted.