Vito, It's still unclear to me what the advantage is, to have both `StreamsNotRunningException` and `StateStoreNotAvailableException`?
For both cased, the state is `PENDING_SHUTDOWN / NOT_RUNNING / ERROR` and thus, for a user point of view, why does it matter if the store is closed on not? I don't understand why/how this information would be useful? Do you have a concrete example in mind how a user would react differently to both exceptions? @Vinoth: about `StreamsRebalancingException` -- to me, it seems best to actually do this on a per-query basis, ie, have an overload `KafkaStreams#store(...)` that takes a boolean flag that allow to _disable_ the exception and opt-in to query a active store during recovery. However, as KIP-535 actually introduces this change in behavior, I think KIP-216 should not cover this, but KIP-535 should be updated. I'll follow up on the other KIP thread to raise this point. -Matthias On 1/11/20 12:26 AM, Vito Jeng wrote: > Hi, Matthias & Vinoth, > > Thanks for the feedback. > >> What is still unclear to me is, what we gain by having both >> `StreamsNotRunningException` and `StateStoreNotAvailableException`. Both >> exception are thrown when KafkaStreams is in state PENDING_SHUTDOWN / >> NOT_RUNNING / ERROR. Hence, as a user what do I gain to know if the >> state store is closed on not -- I can't query it anyway? Maybe I miss >> something thought? > > Yes, both `StreamsNotRunningException` and > `StateStoreNotAvailableException` are fatal exception. > But `StateStoreNotAvailableException` is fatal exception about state store > related. > I think it would be helpful that if user need to distinguish these two > different case to handle it. > > I'm not very sure, does that make sense? > > > --- > Vito > > > On Fri, Jan 10, 2020 at 3:35 AM Vinoth Chandar <vin...@apache.org> wrote: > >> +1 on merging `StreamsNotRunningException` and >> `StateStoreNotAvailableException`, both exceptions are fatal anyway. IMO >> its best to have these exceptions be about the state store (and not streams >> state), to easier understanding. >> >> Additionally, KIP-535 allows for querying of state stores in rebalancing >> state. So do we need the StreamsRebalancingException? >> >> >> On 2020/01/09 03:38:11, "Matthias J. Sax" <matth...@confluent.io> wrote: >>> Sorry that I dropped the ball on this... >>> >>> Thanks for updating the KIP. Overall LGTM now. Feel free to start a VOTE >>> thread. >>> >>> What is still unclear to me is, what we gain by having both >>> `StreamsNotRunningException` and `StateStoreNotAvailableException`. Both >>> exception are thrown when KafkaStreams is in state PENDING_SHUTDOWN / >>> NOT_RUNNING / ERROR. Hence, as a user what do I gain to know if the >>> state store is closed on not -- I can't query it anyway? Maybe I miss >>> something thought? >>> >>> >>> -Matthias >>> >>> >>> On 11/3/19 6:07 PM, Vito Jeng wrote: >>>> Sorry for the late reply, thanks for the review. >>>> >>>> >>>>> About `StateStoreMigratedException`: >>>>> >>>>> Why is it only thrown if the state is REBALANCING? A store might be >>>>> migrated during a rebalance, and Kafka Streams might resume back to >>>>> RUNNING state and afterward somebody tries to use an old store handle. >>>>> Also, if state is REBALANCING, should we throw >>>>> `StreamThreadRebalancingException`? Hence, I think >>>>> `StateStoreMigratedException` does only make sense during `RUNNING` >> state. >>>>> >>>> >>>> Thank you point this, already updated. >>>> >>>> >>>> Why do we need to distinguish between `KafkaStreamsNotRunningException` >>>>> and `StateStoreNotAvailableException`? >>>>> >>>> >>>> `KafkaStreamsNotRunningException` may be caused by various reasons, I >> think >>>> it would be helpful that the >>>> user can distinguish whether it is caused by the state store closed. >>>> (Maybe I am wrong...) >>>> >>>> >>>> Last, why do we distinguish between `KafkaStreams` instance and >>>>> `StreamsThread`? To me, it seems we should always refer to the >> instance, >>>>> because that is the level of granularity in which we enable/disable >> IQ atm. >>>>> >>>> >>>> Totally agree. Do you mean the naming of state store exceptions? >>>> I don't have special reason to distinguish these two. >>>> Your suggestion look more reasonable for the exception naming. >>>> >>>> >>>> Last, for `StateStoreMigratedException`, I would add that a user need >> to >>>>> rediscover the store and cannot blindly retry as the store handle is >>>>> invalid and a new store handle must be retrieved. That is a difference >>>>> to `StreamThreadRebalancingException` that allows for "blind" retries >>>>> that either resolve (if the store is still on the same instance after >>>>> rebalancing finishes, or changes to `StateStoreMigratedException` if >> the >>>>> store was migrated away during rebalancing). >>>>> >>>> >>>> Nice, it's great! Thank you. >>>> >>>> >>>> The KIP already updated, please take a look. :) >>>> >>>> >>>> >>>> On Wed, Oct 23, 2019 at 1:48 PM Matthias J. Sax <matth...@confluent.io >>> >>>> wrote: >>>> >>>>> Any update on this KIP? >>>>> >>>>> On 10/7/19 3:35 PM, Matthias J. Sax wrote: >>>>>> Sorry for the late reply. The 2.4 deadline kept us quite busy. >>>>>> >>>>>> About `StateStoreMigratedException`: >>>>>> >>>>>> Why is it only thrown if the state is REBALANCING? A store might be >>>>>> migrated during a rebalance, and Kafka Streams might resume back to >>>>>> RUNNING state and afterward somebody tries to use an old store >> handle. >>>>>> Also, if state is REBALANCING, should we throw >>>>>> `StreamThreadRebalancingException`? Hence, I think >>>>>> `StateStoreMigratedException` does only make sense during `RUNNING` >>>>> state. >>>>>> >>>>>> >>>>>> Why do we need to distinguish between >> `KafkaStreamsNotRunningException` >>>>>> and `StateStoreNotAvailableException`? >>>>>> >>>>>> >>>>>> Last, why do we distinguish between `KafkaStreams` instance and >>>>>> `StreamsThread`? To me, it seems we should always refer to the >> instance, >>>>>> because that is the level of granularity in which we enable/disable >> IQ >>>>> atm. >>>>>> >>>>>> >>>>>> Last, for `StateStoreMigratedException`, I would add that a user >> need to >>>>>> rediscover the store and cannot blindly retry as the store handle is >>>>>> invalid and a new store handle must be retrieved. That is a >> difference >>>>>> to `StreamThreadRebalancingException` that allows for "blind" retries >>>>>> that either resolve (if the store is still on the same instance after >>>>>> rebalancing finishes, or changes to `StateStoreMigratedException` if >> the >>>>>> store was migrated away during rebalancing). >>>>>> >>>>>> >>>>>> >>>>>> -Matthias >>>>>> >>>>>> On 8/9/19 10:20 AM, Vito Jeng wrote: >>>>>>> My bad. The short link `https://shorturl.at/CDNT9` >> <https://shorturl.at/CDNT9> >>>>> <https://shorturl.at/CDNT9> >>>>>>> <https://shorturl.at/CDNT9> seems incorrect. >>>>>>> >>>>>>> Please use the following instead: https://shorturl.at/bkKQU >>>>>>> >>>>>>> >>>>>>> --- >>>>>>> Vito >>>>>>> >>>>>>> >>>>>>> On Fri, Aug 9, 2019 at 10:53 AM Vito Jeng <v...@is-land.com.tw> >> wrote: >>>>>>> >>>>>>>> Thanks, Matthias! >>>>>>>> >>>>>>>>> About `StreamThreadNotStartedException`: >>>>>>>> >>>>>>>> Thank you for explanation. I agree with your opinion. >>>>>>>> `CompositeReadOnlyXxxStore#get()` would never throw >>>>>>>> `StreamThreadNotStartedException`. >>>>>>>> >>>>>>>> For the case that corresponding thread crashes after we handed out >> the >>>>>>>> store handle. We may throw `KafkaStreamsNotRunningException` or >>>>>>>> `StateStoreMigratedException`. >>>>>>>> In `StreamThreadStateStoreProvider`, we would throw >>>>>>>> `KafkaStreamsNotRunningException` when stream thread is not >> running( >>>>>>>> https://shorturl.at/CDNT9) or throw `StateStoreMigratedException` >> when >>>>>>>> store is closed(https://shorturl.at/hrvAN). So I think we do not >> need >>>>> to >>>>>>>> add a new type for this case. Does that make sense? >>>>>>>> >>>>>>>> >>>>>>>>> About `KafkaStreamsNotRunningException` vs >>>>>>>> `StreamThreadNotRunningException`: >>>>>>>> >>>>>>>> I understand your point. I rename >> `StreamThreadNotRunningException` to >>>>>>>> `KafkaStreamsNotRunningException`. >>>>>>>> >>>>>>>> >>>>>>>> About check unknown state store names: >>>>>>>> Thank you for the hint. I add a new type >> `UnknownStateStoreException` >>>>> for >>>>>>>> this case. >>>>>>>> >>>>>>>> >>>>>>>>> Also, we should still have fatal exception >>>>>>>> `StateStoreNotAvailableException`? Not sure why you remove it? >>>>>>>> >>>>>>>> Thank you point this, already add it again. >>>>>>>> >>>>>>>> The KIP already updated, please take a look. >>>>>>>> >>>>>>>> --- >>>>>>>> Vito >>>>>>>> >>>>>>> >>>>>> >>>>> >>>>> >>>> >>> >>> >> >
signature.asc
Description: OpenPGP digital signature