Thanks, Vito. I've just cast my vote. -John
On Fri, Jan 17, 2020, at 21:32, Vito Jeng wrote: > Hi, folks, > > Just update the KIP, please take a look. > > Thanks! > > --- > Vito > > > On Fri, Jan 17, 2020 at 9:12 AM Vito Jeng <v...@is-land.com.tw> wrote: > > > Thanks Bill, John and Matthias. Glad you guys joined this discussion. > > I got a lot out of the discussion. > > > > I would like to update KIP-216 base on John's suggestion to remove the > > category. > > > > > > --- > > Vito > > > > > > On Fri, Jan 17, 2020 at 2:30 AM Matthias J. Sax <matth...@confluent.io> > > wrote: > > > >> > Nevertheless, if we omit the categorization, it’s moot. > >> > >> Ack. > >> > >> I am fine to remove the middle tier. As John pointed out, it might be > >> weird to have only one concrete exception type per category. We can also > >> explain in detail how to handle each exception in their JavaDocs. > >> > >> > >> -Matthias > >> > >> On 1/16/20 6:38 AM, Bill Bejeck wrote: > >> > Vito, > >> > > >> > Thanks for the updates, the KIP LGTM. > >> > > >> > -Bill > >> > > >> > On Wed, Jan 15, 2020 at 11:31 PM John Roesler <vvcep...@apache.org> > >> wrote: > >> > > >> >> Hi Vito, > >> >> > >> >> Haha, your archive game is on point! > >> >> > >> >> What Matthias said in that email is essentially what I figured was the > >> >> rationale. It makes sense, but the point I was making is that this > >> really > >> >> doesn’t seem like a good way to structure a production app. On the > >> other > >> >> hand, considering the exception fatal has a good chance of avoiding a > >> >> frustrating debug session if you just forgot to call start. > >> >> > >> >> Nevertheless, if we omit the categorization, it’s moot. > >> >> > >> >> It would be easy to add a categorization layer later if we want it, but > >> >> not very easy to change it if we get it wrong. > >> >> > >> >> Thanks for your consideration! > >> >> -John > >> >> > >> >> On Wed, Jan 15, 2020, at 21:14, Vito Jeng wrote: > >> >>> Hi John, > >> >>> > >> >>> About `StreamsNotStartedException is strange` -- > >> >>> The original idea came from Matthias, two years ago. :) > >> >>> You can reference here: > >> >>> > >> >> > >> https://mail-archives.apache.org/mod_mbox/kafka-dev/201806.mbox/%3c6c32083e-b63c-435b-521d-032d45cc5...@confluent.io%3e > >> >>> > >> >>> About omitting the categorization -- > >> >>> It looks reasonable. I'm fine with omitting the categorization but not > >> >> very > >> >>> sure it is a good choice. > >> >>> Does any other folks provide opinion? > >> >>> > >> >>> > >> >>> Hi, folks, > >> >>> > >> >>> Just update the KIP-216, please take a look. > >> >>> > >> >>> --- > >> >>> Vito > >> >>> > >> >>> > >> >>> On Thu, Jan 16, 2020 at 6:35 AM Vito Jeng <v...@is-land.com.tw> > >> wrote: > >> >>> > >> >>>> > >> >>>> Hi, folks, > >> >>>> > >> >>>> Thank you suggestion, really appreciate it. :) > >> >>>> I understand your concern. I'll merge StreamsNotRunningException and > >> >>>> StateStoreNotAvailableException. > >> >>>> > >> >>>> > >> >>>> --- > >> >>>> Vito > >> >>>> > >> >>>> > >> >>>> On Thu, Jan 16, 2020 at 6:22 AM John Roesler <vvcep...@apache.org> > >> >> wrote: > >> >>>> > >> >>>>> Hey Vito, > >> >>>>> > >> >>>>> Yes, thanks for the KIP. Sorry the discussion has been so long. > >> >>>>> Hopefully, we can close it out soon. > >> >>>>> > >> >>>>> I agree we can drop StreamsNotRunningException in favor of > >> >>>>> just StateStoreNotAvailableException. > >> >>>>> > >> >>>>> Unfortunately, I have some higher-level concerns. The value > >> >>>>> of these exceptions is that they tell you how to handle the > >> >>>>> various situations that can arise while querying a distributed > >> >>>>> data store. > >> >>>>> > >> >>>>> Ideally, as a caller, I should be able to just catch "retriable" or > >> >>>>> "fatal" and handle them appropriately. Otherwise, there's no > >> >>>>> point in having categories, and we should just have all the > >> >>>>> exceptions extend InvalidStateStoreException. > >> >>>>> > >> >>>>> Presently, it's not possible to tell from just the > >> >>>>> "retriable"/"fatal" distinction what to do. You can tell > >> >>>>> from the descriptions of the various exceptions. E.g.: > >> >>>>> > >> >>>>> Retriable: > >> >>>>> * StreamsRebalancingException: the exact same call > >> >>>>> should just be retried until the rebalance is complete > >> >>>>> * StateStoreMigratedException: the store handle is > >> >>>>> now invalid, so you need to re-discover the instance > >> >>>>> and get a new handle on that instance. In other words, > >> >>>>> the query itself may be valid, but the particular method > >> >>>>> invocation on this particular instance has encountered > >> >>>>> a fatal exception. > >> >>>>> > >> >>>>> Fatal: > >> >>>>> * UnknownStateStoreException: this is truly fatal. No amount > >> >>>>> of retrying or re-discovering is going to get you a handle on a > >> >>>>> store that doesn't exist in the cluster. > >> >>>>> * StateStoreNotAvailableException: this is actually recoverable, > >> >>>>> since the store might exist in the cluster, but isn't available > >> on > >> >>>>> this particular instance (which is shut down or whatever). > >> >>>>> > >> >>>>> Personally, I'm not a fan of code bureaucracy, so I'm 100% fine > >> >>>>> with omitting the categorization and just having 5 subclasses > >> >>>>> of InvalidStateStoreException. Each of them would tell you > >> >>>>> how to handle them, and it's not too many to really > >> >>>>> understand and handle each one. > >> >>>>> > >> >>>>> If you really want to have a middle tier, I'd recommend: > >> >>>>> * RetryableStateStoreException: the exact same call > >> >>>>> should be repeated. > >> >>>>> * RecoverableStateStoreException: the store handle > >> >>>>> should be discarded and the caller should re-discover > >> >>>>> the location of the store and repeat the query on the > >> >>>>> correct instance. > >> >>>>> * FatalStateStoreException: the query/request is totally > >> >>>>> invalid and will never succeed. > >> >>>>> > >> >>>>> However, attempting to categorize the proposed exceptions > >> >>>>> reveals even problems with this categorization: > >> >>>>> Retriable: > >> >>>>> * StreamsRebalancingException > >> >>>>> Recoverable: > >> >>>>> * StateStoreMigratedException > >> >>>>> * StreamsNotRunningException > >> >>>>> Fatal: > >> >>>>> * UnknownStateStoreException > >> >>>>> > >> >>>>> But StreamsNotStartedException is strange... It means that > >> >>>>> one code path got a handle on a specific KafkaStreams object > >> >>>>> instance and sent it a query before another code path > >> >>>>> invoked the start() method on the exact same object instance. > >> >>>>> It seems like the most likely scenario is that whoever wrote > >> >>>>> the program just forgot to call start() before querying, in > >> >>>>> which case, retrying isn't going to help, and a fatal exception > >> >>>>> is more appropriate. I.e., it sounds like a "first 15 minutes > >> >>>>> experience" problem, and making it fatal would be more > >> >>>>> helpful. Even in a production context, there's no reason not > >> >>>>> to sequence your application startup such that you don't > >> >>>>> accept queries until after Streams is started. Thus, I guess > >> >>>>> I'd categorize it under "fatal". > >> >>>>> > >> >>>>> Regardless of whether you make it fatal or retriable, you'd > >> >>>>> still have a whole category with only one exception in it, > >> >>>>> and the other two categories only have two exceptions. > >> >>>>> Plus, as you pointed out in the KIP, you can't get all > >> >>>>> exceptions in all cases anyway: > >> >>>>> * store() can only throw NotStarted, NotRunning, > >> >>>>> and Unknown > >> >>>>> * actual store queries can only throw Rebalancing, > >> >>>>> Migrated, and NotRunning > >> >>>>> > >> >>>>> Thus, in practice also, there are exactly three categories > >> >>>>> and also exactly three exception types. It doesn't seem > >> >>>>> like there's a great advantage to the categories here. To > >> >>>>> avoid the categorization problem and also to clarify what > >> >>>>> exceptions can actually be thrown in different circumstances, > >> >>>>> it seems like we should just: > >> >>>>> * get rid of the middle tier and make all the exceptions > >> >>>>> extend InvalidStateStoreException > >> >>>>> * drop StateStoreNotAvailableException in favor of > >> >>>>> StreamsNotRunningException > >> >>>>> * clearly document on all public methods which exceptions > >> >>>>> need to be handled > >> >>>>> > >> >>>>> How do you feel about this? > >> >>>>> Thanks, > >> >>>>> -John > >> >>>>> > >> >>>>> On Wed, Jan 15, 2020, at 15:13, Bill Bejeck wrote: > >> >>>>>> Thanks for KIP Vito. > >> >>>>>> > >> >>>>>> Overall the KIP LGTM, but I'd have to agree with others on merging > >> >> the > >> >>>>>> `StreamsNotRunningException` and `StateStoreNotAvailableException` > >> >>>>> classes. > >> >>>>>> > >> >>>>>> Since in both cases, the thread state is in `PENDING_SHUTDOWN || > >> >>>>>> NOT_RUNNING || ERROR` I'm not even sure how we could distinguish > >> >> when to > >> >>>>>> use the different > >> >>>>>> exceptions. Maybe a good middle ground would be to have a detailed > >> >>>>>> exception message. > >> >>>>>> > >> >>>>>> The KIP freeze is close, so I think if we can agree on this, we can > >> >>>>> wrap up > >> >>>>>> the voting soon. > >> >>>>>> > >> >>>>>> Thanks, > >> >>>>>> Bill > >> >>>>>> > >> >>>>>> On Tue, Jan 14, 2020 at 2:12 PM Matthias J. Sax < > >> >> matth...@confluent.io> > >> >>>>>> wrote: > >> >>>>>> > >> >>>>>>> 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> > >> >>>>>>> <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 > >> >>>>>>>>>>>>>>> > >> >>>>>>>>>>>>>> > >> >>>>>>>>>>>>> > >> >>>>>>>>>>>> > >> >>>>>>>>>>>> > >> >>>>>>>>>>> > >> >>>>>>>>>> > >> >>>>>>>>>> > >> >>>>>>>>> > >> >>>>>>>> > >> >>>>>>> > >> >>>>>>> > >> >>>>>> > >> >>>>> > >> >>>> > >> >>> > >> >> > >> > > >> > >> >