Thanks Vito. I am also ok with either name. Just a personal slight preference, but not a important.
-Matthias On 1/21/20 6:52 PM, Vito Jeng wrote: > Thanks Matthias. > > The KIP is about InvalidStateStoreException. > I pick `StateStoreNotAvailableException` because it may be more intuitive > than `StreamsNotRunningException`. > > No matter which one picked, it's good to me. > > --- > Vito > > > On Wed, Jan 22, 2020 at 7:44 AM Matthias J. Sax <matth...@confluent.io> > wrote: > >> 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> >>>>>>>>>>>>>>>>>>>> <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