Todd Lipcon has submitted this change and it was merged. Change subject: KUDU-1623. Properly handle UPSERTS that only include PK column ......................................................................
KUDU-1623. Properly handle UPSERTS that only include PK column This fixes a bug reported by Chris George in which the tablet server would crash when handling an UPSERT which was converted into an empty UPDATE. For example, in pseudo-SQL: CREATE TABLE t ( x INT NOT NULL PRIMARY KEY ); UPSERT INTO t VALUES (1); UPSERT INTO t VALUES (1); Here the second upsert would detect the primary key already existed and convert into an update containing any non-PK columns. Since there are no non-PK columns, the update was "empty", and ended up as an empty RowChangeList. In DEBUG builds, this fired a DCHECK, but in RELEASE builds, we ended up with an empty RowChangeList in the DMS. At flush time, this would cause other assertions to fire or crash. The fix is relatively simple: if we see that an upsert converted into an empty update, we just drop the delta rather than continuing to insert into the delta store. This required loosing a check at bootstrap time, where we previously assumed that every mutation must have been recorded in at least one store. The test changes are much larger than the fix itself due to some refactoring. The main gist of the change is to introduce operations in tablet_random_access-test and fuzz-itest where we send an UPSERT which contains only the primary key column. These tests crashed prior to the fix and pass now. Change-Id: Ic878f6e51ead5bf91335ddb47536e7c29de11ac4 Reviewed-on: http://gerrit.cloudera.org:8080/4441 Reviewed-by: David Ribeiro Alves <dral...@apache.org> Tested-by: Kudu Jenkins --- M src/kudu/integration-tests/fuzz-itest.cc A src/kudu/tablet/key_value_test_schema.h M src/kudu/tablet/tablet.cc M src/kudu/tablet/tablet_bootstrap.cc M src/kudu/tablet/tablet_random_access-test.cc 5 files changed, 229 insertions(+), 73 deletions(-) Approvals: David Ribeiro Alves: Looks good to me, approved Kudu Jenkins: Verified -- To view, visit http://gerrit.cloudera.org:8080/4441 To unsubscribe, visit http://gerrit.cloudera.org:8080/settings Gerrit-MessageType: merged Gerrit-Change-Id: Ic878f6e51ead5bf91335ddb47536e7c29de11ac4 Gerrit-PatchSet: 4 Gerrit-Project: kudu Gerrit-Branch: master Gerrit-Owner: Todd Lipcon <t...@apache.org> Gerrit-Reviewer: David Ribeiro Alves <dral...@apache.org> Gerrit-Reviewer: Kudu Jenkins Gerrit-Reviewer: Todd Lipcon <t...@apache.org>