Hi, folks, KIP-562(KAFKA-9445) already merged three days ago.
I have updated KIP-216 to reflect the KIP-562. The main change is to introduce a new exception `InvalidStateStorePartitionException`, will be thrown when user requested partition not available. Please take a look and any feedback is welcome. Thanks Matthias for the reminder. --- Vito On Thu, Jan 23, 2020 at 2:13 PM Vito Jeng <v...@is-land.com.tw> wrote: > Got it, thanks Matthias. > > --- > Vito > > > On Thu, Jan 23, 2020 at 1:31 PM Matthias J. Sax <matth...@confluent.io> > wrote: > >> 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> >> >>>>>>>>>>>>>>>>>>>> <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 >> >>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>> >> >>>>>>>>>>>>> >> >>>>>>>>>>>>> >> >>>>>>>>>>>> >> >>>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>> >> >>>>>>>> >> >>>>>>> >> >>>>>> >> >>>>>> >> >>>> >> >> >> >> >> > >> >>