Bug: Test Failure: transient_replication_test.TestTransientReplicationRepairLegacyStreaming.test_speculative_write_repair_cycle
Status: Open
Priority: Normal
Created: 15/Jan/23 11:50

Flaky.

{noformat}
self = <transient_replication_test.TestTransientReplicationRepairLegacyStreaming object at 0x7fbaa96e04c0>

    @pytest.mark.no_vnodes
    def test_speculative_write_repair_cycle(self):
        """ incremental repair from full replica should remove data on node3 """
>       self._test_speculative_write_repair_cycle(primary_range=False,
                                                  optimized_repair=False,
                                                  repair_coordinator=self.node1,
                                                  expect_node3_data=False)

transient_replication_test.py:504: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <transient_replication_test.TestTransientReplicationRepairLegacyStreaming object at 0x7fbaa96e04c0>
primary_range = False, optimized_repair = False
repair_coordinator = <ccmlib.node.Node object at 0x7fbaa9a2d160>
expect_node3_data = False, use_lcs = False

    def _test_speculative_write_repair_cycle(self, primary_range, optimized_repair, repair_coordinator, expect_node3_data, use_lcs=False):
        """
            if one of the full replicas is not available, data should be written to the transient replica, but removed after incremental repair
            """
        for node in self.nodes:
            self.assert_has_no_sstables(node)
    
        if use_lcs:
            self.use_lcs()
    
        self.node2.byteman_submit([mk_bman_path('stop_writes.btm')])
        # self.insert_row(1)
        tm = lambda n: self.table_metrics(n)
        with tm(self.node1) as tm1, tm(self.node2) as tm2, tm(self.node3) as tm3:
            assert tm1.write_count == 0
            assert tm2.write_count == 0
            assert tm3.write_count == 0
            self.insert_row(1, 1, 1)
            assert tm1.write_count == 1
            assert tm2.write_count == 0
            assert tm3.write_count == 1
    
        self.assert_has_sstables(self.node1, flush=True)
        self.assert_has_no_sstables(self.node2, flush=True)
        self.assert_has_sstables(self.node3, flush=True)
    
        repair_opts = ['repair', self.keyspace]
        if primary_range: repair_opts.append('-pr')
        if optimized_repair: repair_opts.append('-os')
        self.node1.nodetool(' '.join(repair_opts))
    
        self.assert_has_sstables(self.node1, compact=True)
        self.assert_has_sstables(self.node2, compact=True)
        if expect_node3_data:
            self.assert_has_sstables(self.node3, compact=True)
        else:
            self.assert_has_no_sstables(self.node3, compact=True)
    
        entire_sstable = "true" if self.stream_entire_sstables() else "false"
>       assert self.node2.grep_log('Incoming stream entireSSTable={}'.format(entire_sstable), filename='debug.log')
E       AssertionError: assert []
E        +  where [] = <bound method Node.grep_log of <ccmlib.node.Node object at 0x7fbaa96f4700>>('Incoming stream entireSSTable=false', filename='debug.log')
E        +    where <bound method Node.grep_log of <ccmlib.node.Node object at 0x7fbaa96f4700>> = <ccmlib.node.Node object at 0x7fbaa96f4700>.grep_log
E        +      where <ccmlib.node.Node object at 0x7fbaa96f4700> = <transient_replication_test.TestTransientReplicationRepairLegacyStreaming object at 0x7fbaa96e04c0>.node2
E        +    and   'Incoming stream entireSSTable=false' = <built-in method format of str object at 0x7fbaa960f150>('false')
E        +      where <built-in method format of str object at 0x7fbaa960f150> = 'Incoming stream entireSSTable={}'.format

transient_replication_test.py:499: AssertionError
{noformat}