I think it is possible for the row to be null but still being in a short read situation. Like if you resolve 2 nodes whose responses look like:
node1: 1 del 3
node2: del 2 del
and you've asked for two columns. The merging results in a null row (assuming all del have priority), but it's possible that node1 had a lot of perfectly good value after that 3, so we should retry.
I believe the right fix could be to just have a if (row != null) before the rows.add(row) ?