Adar Dembo has submitted this change and it was merged. ( 
http://gerrit.cloudera.org:8080/8423 )

Change subject: cfile_set: make FindRow more robust to errors
......................................................................

cfile_set: make FindRow more robust to errors

Previously, FindRow() would not handle certain error cases well. I.e.
when seeking on a key, it wouldn't consider all errors before returning
the seek results.

For example, currently, FindRow() scans over CFiles and if 1) it hits a
Status::NotFound() error, or 2) the key search returned without being
an exact match, it returns success, returning the row is not present.

However, 2) does not take into account the OK-ness of the returned
scans, and thus may return healthily saying it couldn't find the row,
even though this may not be the case. This allows the currently-running
operation to continue under the potentially incorrect assumption that
the key is not present, when it should actually return with the
appropriate error.

In the case of DuplicatingRowSet::MutateRow(), this is particularly
nasty: it expects operations to be mirrored to two separate rowsets, and
the above scenario may present itself as a fatal failure to do so.

In practice, this hasn't been an issue because we might only expect
various fs-level errors (e.g. corruption, disk errors) here, which we
already don't handle gracefully. However, this needs to change to be
robust to disk failures.

Similarly, FindRow() will now return early if it hits a disk failure in
the bloom look-up.

A small test is added to diskrowset-test to ensure errors are returned
appropriately.

Change-Id: I41b56cbbf1b3b00fdb4dbf1ec08f12ced97088e7
Reviewed-on: http://gerrit.cloudera.org:8080/8423
Tested-by: Kudu Jenkins
Reviewed-by: Adar Dembo <a...@cloudera.com>
---
M src/kudu/tablet/cfile_set.cc
M src/kudu/tablet/diskrowset-test.cc
2 files changed, 37 insertions(+), 1 deletion(-)

Approvals:
  Kudu Jenkins: Verified
  Adar Dembo: Looks good to me, approved

--
To view, visit http://gerrit.cloudera.org:8080/8423
To unsubscribe, visit http://gerrit.cloudera.org:8080/settings

Gerrit-Project: kudu
Gerrit-Branch: master
Gerrit-MessageType: merged
Gerrit-Change-Id: I41b56cbbf1b3b00fdb4dbf1ec08f12ced97088e7
Gerrit-Change-Number: 8423
Gerrit-PatchSet: 2
Gerrit-Owner: Andrew Wong <aw...@cloudera.com>
Gerrit-Reviewer: Adar Dembo <a...@cloudera.com>
Gerrit-Reviewer: Andrew Wong <aw...@cloudera.com>
Gerrit-Reviewer: Kudu Jenkins
Gerrit-Reviewer: Todd Lipcon <t...@apache.org>

Reply via email to