Thanks for updating the KIP! One last comment/question: you kept `StateStoreNotAvailableException` in favor of `StreamsNotRunningException` (to merge both as suggested).
I am wondering, if it might be better to keep `StreamsNotRunningException` instead of `StateStoreNotAvailableException`, because this exception is thrown if Streams is in state PENDING_SHUTDOWN / NOT_RUNNING / ERROR ? -Matthias On 1/17/20 9:56 PM, John Roesler wrote: > 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 >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>> >>>> >>>> >>
signature.asc
Description: OpenPGP digital signature