Thanks. SGTM.

-Matthias

On 1/14/20 4:52 PM, John Roesler wrote:
> Hey Matthias,
> 
> Thanks for taking a look! I felt a little uneasy about it, but didn’t think 
> about the case you pointed out. Throwing an exception would indeed be safer.
> 
> Given a choice between throwing in the default method or defining a new 
> interface and throwing if the wrong interface is implemented, it seems nicer 
> for everyone to go the default method route. Since we’re not referencing the 
> other method anymore, I should probably deprecate it, too. 
> 
> Thanks again for your help. I really appreciate it.
> 
> -John
> 
> On Tue, Jan 14, 2020, at 18:15, Matthias J. Sax wrote:
>> Thanks for the PR. That helps a lot.
>>
>> I actually do have a concern: the proposed default method, would disable
>> the new feature to allow querying an active task during restore
>> automatically. Hence, if a user has an existing custom store type, and
>> would use the new
>>
>> KafkaStreams.store(..., true)
>>
>> method to enable querying during restore it would not work, and it would
>> be unclear why. It would even be worth if there are two developers and
>> one provide the store type while the other one just uses it.
>>
>> Hence, the default implementation should maybe throw an exception by
>> default? Or maybe, we would introduce a new interface that extends
>> `QueryableStoreType` and add this new method. For this case, we could
>> check within
>>
>> KafkaStreams.store(..., true)
>>
>> if the StoreType implements the new interface and if not, throw an
>> exception there.
>>
>> Those exceptions would be more descriptive (ie, state store does not
>> support querying during restore) and give the user a chance to figure
>> out what's wrong.
>>
>> Not sure if overwriting a default method or a new interface is the
>> better choice to let people opt-into the feature.
>>
>>
>>
>> -Matthias
>>
>> On 1/14/20 3:22 PM, John Roesler wrote:
>>> Hi again all,
>>>
>>> I've sent a PR including this new option, and while implementing it, I 
>>> realized we also have to make a (source-compatible) addition to the 
>>> QueryableStoreType interface, so that the IQ store wrapper can pass the
>>> flag down to the composite store provider.
>>>
>>> See https://github.com/apache/kafka/pull/7962
>>> In particular: 
>>> https://github.com/apache/kafka/pull/7962/files#diff-d0242b7289f4e0886490351a5a803d41
>>>
>>> If there are no objections to these additions, I'll update the KIP tomorrow.
>>>
>>> Thanks,
>>> -John
>>>
>>> On Tue, Jan 14, 2020, at 14:11, John Roesler wrote:
>>>> Thanks for calling this out, Matthias. You're correct that this looks like 
>>>> a
>>>> harmful behavioral change. I'm fine with adding the new overload you
>>>> mentioned, just a simple boolean flag to enable the new behavior.
>>>>
>>>> I'd actually propose that we call this flag "queryStaleData", with a 
>>>> default
>>>> of "false". The meaning of this would be to preserve exactly the existing
>>>> semantics. I.e., that the store must be both active and running to be
>>>> included.
>>>>
>>>> It seems less severe to just suddenly start returning queries from 
>>>> standbys,
>>>> but in the interest of safety, the easiest thing is just flag the whole 
>>>> feature.
>>>>
>>>> If you, Navinder, and Vinoth agree, we can just update the KIP. It seems 
>>>> like
>>>> a pretty uncontroversial amendment to avoid breaking query consistency
>>>> semantics.
>>>>
>>>> Thanks,
>>>> -John
>>>>
>>>>
>>>> On Tue, Jan 14, 2020, at 13:21, Matthias J. Sax wrote:
>>>>> During the discussion of KIP-216
>>>>> (https://cwiki.apache.org/confluence/display/KAFKA/KIP-216%3A+IQ+should+throw+different+exceptions+for+different+errors)
>>>>> we encountered that KIP-535 introduces a behavior change that is not
>>>>> backward compatible, hence, I would like to request a small change.
>>>>>
>>>>> KIP-535 suggests, that active tasks can be queried during recovery and
>>>>> no exception would be thrown and longer. This is a change in behavior
>>>>> and in fact introduces a race condition for users that only want to
>>>>> query consistent state. Querying inconsistent state should be an opt-in,
>>>>> and for StandbyTasks, user can opt-in by querying them or opt-out by not
>>>>> querying them. However, for active task, if we don't throw an exception
>>>>> during recovery, users cannot opt-out of querying potentially
>>>>> inconsistent state, because they would need to check the state (ie, ==
>>>>> RUNNING) before they would query the active task -- however, the state
>>>>> might change at any point in between, and there is a race.
>>>>>
>>>>> Hence, I would suggest to actually not change the default behavior of
>>>>> existing methods and we should throw an exception during restore if an
>>>>> active task is queried. To allow user to opt-in to query an active task
>>>>> during restore, we would add an overload
>>>>>
>>>>>> KafkaStream#store(..., boolean allowQueryWhileStateIsRestoring)
>>>>>
>>>>> (with an hopefully better/short variable name). Developers would use
>>>>> this new method to opt-into querying active tasks during restore.
>>>>>
>>>>> Thoughts?
>>>>>
>>>>>
>>>>> -Matthias
>>>>>
>>>>> On 11/18/19 10:45 AM, Vinoth Chandar wrote:
>>>>>> Thanks, everyone involved!
>>>>>>
>>>>>> On Mon, Nov 18, 2019 at 7:51 AM John Roesler <j...@confluent.io> wrote:
>>>>>>
>>>>>>> Thanks to you, also, Navinder!
>>>>>>>
>>>>>>> Looking forward to getting this feature in.
>>>>>>> -John
>>>>>>>
>>>>>>> On Sun, Nov 17, 2019 at 11:34 PM Navinder Brar
>>>>>>> <navinder_b...@yahoo.com.invalid> wrote:
>>>>>>>>
>>>>>>>>  Hello all,
>>>>>>>>
>>>>>>>> With 4 binding +1 votes from Guozhang Wang, Matthias J. Sax, Bill 
>>>>>>>> Bejeck,
>>>>>>>> and John Roesler, the vote passes.
>>>>>>>> Thanks Guozhang, Matthias, Bill, John, Sophie for the healthy
>>>>>>> discussions and Vinoth for all the help on this KIP.
>>>>>>>> Best,
>>>>>>>> Navinder
>>>>>>>>
>>>>>>>>     On Friday, 15 November, 2019, 11:32:31 pm IST, John Roesler <
>>>>>>> j...@confluent.io> wrote:
>>>>>>>>
>>>>>>>>  I'm +1 (binding) as well.
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>> -John
>>>>>>>>
>>>>>>>> On Fri, Nov 15, 2019 at 6:20 AM Bill Bejeck <bbej...@gmail.com> wrote:
>>>>>>>>>
>>>>>>>>> +1 (binding)
>>>>>>>>>
>>>>>>>>> On Fri, Nov 15, 2019 at 1:11 AM Matthias J. Sax <matth...@confluent.io
>>>>>>>>
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>> +1 (binding)
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On 11/14/19 3:48 PM, Guozhang Wang wrote:
>>>>>>>>>>> +1 (binding), thanks for the KIP!
>>>>>>>>>>>
>>>>>>>>>>> Guozhang
>>>>>>>>>>>
>>>>>>>>>>> On Fri, Nov 15, 2019 at 4:38 AM Navinder Brar
>>>>>>>>>>> <navinder_b...@yahoo.com.invalid> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> Hello all,
>>>>>>>>>>>>
>>>>>>>>>>>> I'd like to propose a vote for serving interactive queries during
>>>>>>>>>>>> Rebalancing, as it is a big deal for applications looking for high
>>>>>>>>>>>> availability. With this change, users will have control over the
>>>>>>>>>> tradeoff
>>>>>>>>>>>> between consistency and availability during serving.
>>>>>>>>>>>> The full KIP is provided here:
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>
>>>>>>> https://cwiki.apache.org/confluence/display/KAFKA/KIP-535%3A+Allow+state+stores+to+serve+stale+reads+during+rebalance
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> Thanks,
>>>>>>>>>>>> Navinder
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> Attachments:
>>>>> * signature.asc
>>>>
>>
>>
>> Attachments:
>> * signature.asc

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to