Hello Kudu Jenkins, Todd Lipcon,

I'd like you to reexamine a change. Please visit

    http://gerrit.cloudera.org:8080/8885

to look at the new patch set (#6).

Change subject: KUDU-2233 Add a test case for compactions in the past
......................................................................

KUDU-2233 Add a test case for compactions in the past

In some cases we're performing compactions before the clock
has been updated at all, making the compaction snapshot an empty one.
This makes it so the compaction runs on a snapshot that discards
all redo deltas and applies all undos.

When a compaction with such a snapshot finds two duplicate rows
(a ghost and live row) it can't distinguish the two because the redo
DELETE of the ghost row has been discarded, causing the crash
reported in KUDU-2233.

This is a small subset of a broader set of problems that happen
when compactions are performed under such snapshots, the most
obvious one being that updates are discarded silently.

This state is hard to reach as it requires a restart of a tablet
server with a considerable amount of data (i.e. not empty) with
a single wal segment (previous segments having been gc'd in the
previous incarnation), with a single op in it. In particular this
single op needs to be a NO_OP or a CHANGE_CONFIG op, as these are
the only kinds of operations whose timestamps aren't used to
update the clock.

In order to get to this and similar states in fuzz-itest this
patch adds three new types of operations:
- Roll log - Rolls the log if possible.
- GC log - Garbage collects log segments, if possible.
- Run election - Runs an (emulated) leader election increasing the
term and adding a NO_OP to the log.

These operations are presently not part of the operations
considered when generating random test sequences as those might
trigger the bug.

This patch adds a narrow, exact repro of the issue that is described
in KUDU-2233 in the form of an additional test that is presently
disabled. The repro is narrow because it attempts to mimic
the crash from the original ticket exactly, instead of trying to
catch the broader set of problems.

Change-Id: Ibf5685897ef7580dd743faac4d68690a25663e4c
---
M src/kudu/consensus/log.cc
M src/kudu/integration-tests/fuzz-itest.cc
2 files changed, 93 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.cloudera.org:29418/kudu refs/changes/85/8885/6
--
To view, visit http://gerrit.cloudera.org:8080/8885
To unsubscribe, visit http://gerrit.cloudera.org:8080/settings

Gerrit-Project: kudu
Gerrit-Branch: master
Gerrit-MessageType: newpatchset
Gerrit-Change-Id: Ibf5685897ef7580dd743faac4d68690a25663e4c
Gerrit-Change-Number: 8885
Gerrit-PatchSet: 6
Gerrit-Owner: David Ribeiro Alves <davidral...@gmail.com>
Gerrit-Reviewer: Kudu Jenkins
Gerrit-Reviewer: Todd Lipcon <t...@apache.org>

Reply via email to