[ 
https://issues.apache.org/jira/browse/KAFKA-13073?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Konstantine Karantasis resolved KAFKA-13073.
--------------------------------------------
    Resolution: Fixed

> Simulation test fails due to inconsistency in MockLog's implementation
> ----------------------------------------------------------------------
>
>                 Key: KAFKA-13073
>                 URL: https://issues.apache.org/jira/browse/KAFKA-13073
>             Project: Kafka
>          Issue Type: Bug
>          Components: controller, replication
>    Affects Versions: 3.0.0
>            Reporter: Jose Armando Garcia Sancio
>            Assignee: Jose Armando Garcia Sancio
>            Priority: Major
>              Labels: kip-500
>             Fix For: 3.0.0
>
>
> We are getting the following error on trunk
> {code:java}
> RaftEventSimulationTest > canRecoverAfterAllNodesKilled STANDARD_OUT
>     timestamp = 2021-07-12T16:26:55.663, 
> RaftEventSimulationTest:canRecoverAfterAllNodesKilled =
>       java.lang.RuntimeException:
>         Uncaught exception during poll of node 1                              
>     |-------------------jqwik-------------------
>     tries = 25                    | # of calls to property
>     checks = 25                   | # of not rejected calls
>     generation = RANDOMIZED       | parameters are randomly generated
>     after-failure = PREVIOUS_SEED | use the previous seed
>     when-fixed-seed = ALLOW       | fixing the random seed is allowed
>     edge-cases#mode = MIXIN       | edge cases are mixed in
>     edge-cases#total = 108        | # of all combined edge cases
>     edge-cases#tried = 4          | # of edge cases tried in current run
>     seed = 8079861963960994566    | random seed to reproduce generated values 
>    Sample
>     ------
>       arg0: 4002
>       arg1: 2
>       arg2: 4{code}
> I think there are a couple of issues here:
>  # The {{ListenerContext}} for {{KafkaRaftClient}} uses the value returned by 
> {{ReplicatedLog::startOffset()}} to determined the log start and when to load 
> a snapshot while the {{MockLog}} implementation uses {{logStartOffset}} which 
> could be a different value.
>  # {{MockLog}} doesn't implement {{ReplicatedLog::maybeClean}} so the log 
> start offset is always 0.
>  # The snapshot id validation for {{MockLog}} and {{KafkaMetadataLog}}'s 
> {{createNewSnapshot}} throws an exception when the snapshot id is less than 
> the log start offset.
> Solutions:
> Fix the error quoted above we only need to fix bullet point 3. but I think we 
> should fix all of the issues enumerated in this Jira.
> For 1. we should change the {{MockLog}} implementation so that it uses 
> {{startOffset}} both externally and internally.
> For 2. I will file another issue to track this implementation.
> For 3. I think this validation is too strict. I think it is safe to simply 
> ignore any attempt by the state machine to create an snapshot with an id less 
> that the log start offset. We should return a {{Optional.empty()}}when the 
> snapshot id is less than the log start offset. This tells the user that it 
> doesn't need to generate a snapshot for that offset. 



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to