Hi John, Thanks for reviewing the KIP.
> I didn't follow the addition of a new method to the QueryableStoreType > interface. Can you elaborate why this is necessary to support the new > exception types? To support the new exception types, I would check stream state in the following classes: - CompositeReadOnlyKeyValueStore class - CompositeReadOnlySessionStore class - CompositeReadOnlyWindowStore class - DelegatingPeekingKeyValueIterator class It is also necessary to keep backward compatibility. So I plan passing stream instance to QueryableStoreType instance during KafkaStreams#store() invoked. It looks a most simple way, I think. It is why I add a new method to the QueryableStoreType interface. I can understand that we should try to avoid adding the public api method. However, at the moment I have no better ideas. Any thoughts? > Also, looking over your KIP again, it seems valuable to introduce > "retriable store exception" and "fatal store exception" marker interfaces > that the various exceptions can mix in. It would be nice from a usability > perspective to be able to just log and retry on any "retriable" exception > and log and shutdown on any fatal exception. I agree that this is valuable to the user. I'll update the KIP. Thanks --- Vito On Tue, Oct 9, 2018 at 2:30 AM John Roesler <j...@confluent.io> wrote: > Hi Vito, > > I'm glad to hear you're well again! > > I didn't follow the addition of a new method to the QueryableStoreType > interface. Can you elaborate why this is necessary to support the new > exception types? > > Also, looking over your KIP again, it seems valuable to introduce > "retriable store exception" and "fatal store exception" marker interfaces > that the various exceptions can mix in. It would be nice from a usability > perspective to be able to just log and retry on any "retriable" exception > and log and shutdown on any fatal exception. > > Thanks, > -John > > On Fri, Oct 5, 2018 at 11:47 AM Guozhang Wang <wangg...@gmail.com> wrote: > > > Thanks for the explanation, that makes sense. > > > > > > Guozhang > > > > > > On Mon, Jun 25, 2018 at 2:28 PM, Matthias J. Sax <matth...@confluent.io> > > wrote: > > > > > The scenario I had I mind was, that KS is started in one thread while a > > > second thread has a reference to the object to issue queries. > > > > > > If a query is issue before the "main thread" started KS, and the "query > > > thread" knows that it will eventually get started, it can retry. On the > > > other hand, if KS is in state PENDING_SHUTDOWN or DEAD, it is > impossible > > > to issue any query against it now or in the future and thus the error > is > > > not retryable. > > > > > > > > > -Matthias > > > > > > On 6/25/18 10:15 AM, Guozhang Wang wrote: > > > > I'm wondering if StreamThreadNotStarted could be merged into > > > > StreamThreadNotRunning, because I think users' handling logic for the > > > third > > > > case would be likely the same as the second. Do you have some > scenarios > > > > where users may want to handle them differently? > > > > > > > > Guozhang > > > > > > > > On Sun, Jun 24, 2018 at 5:25 PM, Matthias J. Sax < > > matth...@confluent.io> > > > > wrote: > > > > > > > >> Sorry to hear! Get well soon! > > > >> > > > >> It's not a big deal if the KIP stalls a little bit. Feel free to > pick > > it > > > >> up again when you find time. > > > >> > > > >>>>> Is `StreamThreadNotRunningException` really an retryable error? > > > >>>> > > > >>>> When KafkaStream state is REBALANCING, I think it is a retryable > > > error. > > > >>>> > > > >>>> StreamThreadStateStoreProvider#stores() will throw > > > >>>> StreamThreadNotRunningException when StreamThread state is not > > > >> RUNNING. The > > > >>>> user can retry until KafkaStream state is RUNNING. > > > >> > > > >> I see. If this is the intention, than I would suggest to have two > (or > > > >> maybe three) different exceptions: > > > >> > > > >> - StreamThreadRebalancingException (retryable) > > > >> - StreamThreadNotRunning (not retryable -- thrown if in state > > > >> PENDING_SHUTDOWN or DEAD > > > >> - maybe StreamThreadNotStarted (for state CREATED) > > > >> > > > >> The last one is tricky and could also be merged into one of the > first > > > >> two, depending if you want to argue that it's retryable or not. > (Just > > > >> food for though -- not sure what others think.) > > > >> > > > >> > > > >> > > > >> -Matthias > > > >> > > > >> On 6/22/18 8:06 AM, vito jeng wrote: > > > >>> Matthias, > > > >>> > > > >>> Thank you for your assistance. > > > >>> > > > >>>> what is the status of this KIP? > > > >>> > > > >>> Unfortunately, there is no further progress. > > > >>> About seven weeks ago, I was injured in sports. I had a broken > wrist > > on > > > >>> my left wrist. > > > >>> Many jobs are affected, including this KIP and implementation. > > > >>> > > > >>> > > > >>>> I just re-read it, and have a couple of follow up comments. Why do > > we > > > >>>> discuss the internal exceptions you want to add? Also, do we > really > > > need > > > >>>> them? Can't we just throw the correct exception directly instead > of > > > >>>> wrapping it later? > > > >>> > > > >>> I think you may be right. As I say in the previous: > > > >>> "The original idea is that we can distinguish different state store > > > >>> exception for different handling. But to be honest, I am not quite > > sure > > > >>> this is necessary. Maybe have some change during implementation." > > > >>> > > > >>> During the implementation, I also feel we maybe not need wrapper > it. > > > >>> We can just throw the correctly directly. > > > >>> > > > >>> > > > >>>> Is `StreamThreadNotRunningException` really an retryable error? > > > >>> > > > >>> When KafkaStream state is REBALANCING, I think it is a retryable > > error. > > > >>> > > > >>> StreamThreadStateStoreProvider#stores() will throw > > > >>> StreamThreadNotRunningException when StreamThread state is not > > > RUNNING. > > > >> The > > > >>> user can retry until KafkaStream state is RUNNING. > > > >>> > > > >>> > > > >>>> When would we throw an `StateStoreEmptyException`? The semantics > is > > > >>> unclear to me atm. > > > >>> > > > >>>> When the state is RUNNING, is `StateStoreClosedException` a > > retryable > > > >>> error? > > > >>> > > > >>> These two comments will be answered in another mail. > > > >>> > > > >>> > > > >>> > > > >>> --- > > > >>> Vito > > > >>> > > > >>> On Mon, Jun 11, 2018 at 8:12 AM, Matthias J. Sax < > > > matth...@confluent.io> > > > >>> wrote: > > > >>> > > > >>>> Vito, > > > >>>> > > > >>>> what is the status of this KIP? > > > >>>> > > > >>>> I just re-read it, and have a couple of follow up comments. Why do > > we > > > >>>> discuss the internal exceptions you want to add? Also, do we > really > > > need > > > >>>> them? Can't we just throw the correct exception directly instead > of > > > >>>> wrapping it later? > > > >>>> > > > >>>> When would we throw an `StateStoreEmptyException`? The semantics > is > > > >>>> unclear to me atm. > > > >>>> > > > >>>> Is `StreamThreadNotRunningException` really an retryable error? > > > >>>> > > > >>>> When the state is RUNNING, is `StateStoreClosedException` a > > retryable > > > >>>> error? > > > >>>> > > > >>>> One more nits: ReadOnlyWindowStore got a new method #fetch(K key, > > long > > > >>>> time); that should be added > > > >>>> > > > >>>> > > > >>>> Overall I like the KIP but some details are still unclear. Maybe > it > > > >>>> might help if you open an PR in parallel? > > > >>>> > > > >>>> > > > >>>> -Matthias > > > >>>> > > > >>>> On 4/24/18 8:18 AM, vito jeng wrote: > > > >>>>> Hi, Guozhang, > > > >>>>> > > > >>>>> Thanks for the comment! > > > >>>>> > > > >>>>> > > > >>>>> > > > >>>>> Hi, Bill, > > > >>>>> > > > >>>>> I'll try to make some update to make the KIP better. > > > >>>>> > > > >>>>> Thanks for the comment! > > > >>>>> > > > >>>>> > > > >>>>> --- > > > >>>>> Vito > > > >>>>> > > > >>>>> On Sat, Apr 21, 2018 at 5:40 AM, Bill Bejeck <bbej...@gmail.com> > > > >> wrote: > > > >>>>> > > > >>>>>> Hi Vito, > > > >>>>>> > > > >>>>>> Thanks for the KIP, overall it's a +1 from me. > > > >>>>>> > > > >>>>>> At this point, the only thing I would change is possibly > removing > > > the > > > >>>>>> listing of all methods called by the user and the listing of all > > > store > > > >>>>>> types and focus on what states result in which exceptions thrown > > to > > > >> the > > > >>>>>> user. > > > >>>>>> > > > >>>>>> Thanks, > > > >>>>>> Bill > > > >>>>>> > > > >>>>>> On Fri, Apr 20, 2018 at 2:10 PM, Guozhang Wang < > > wangg...@gmail.com> > > > >>>> wrote: > > > >>>>>> > > > >>>>>>> Thanks for the KIP Vito! > > > >>>>>>> > > > >>>>>>> I made a pass over the wiki and it looks great to me. I'm +1 on > > the > > > >>>> KIP. > > > >>>>>>> > > > >>>>>>> About the base class InvalidStateStoreException itself, I'd > > > actually > > > >>>>>>> suggest we do not deprecate it but still expose it as part of > the > > > >>>> public > > > >>>>>>> API, for people who do not want to handle these cases > differently > > > (if > > > >>>> we > > > >>>>>>> deprecate it then we are enforcing them to capture all three > > > >> exceptions > > > >>>>>>> one-by-one). > > > >>>>>>> > > > >>>>>>> > > > >>>>>>> Guozhang > > > >>>>>>> > > > >>>>>>> > > > >>>>>>> On Fri, Apr 20, 2018 at 9:14 AM, John Roesler < > j...@confluent.io > > > > > > >>>> wrote: > > > >>>>>>> > > > >>>>>>>> Hi Vito, > > > >>>>>>>> > > > >>>>>>>> Thanks for the KIP! > > > >>>>>>>> > > > >>>>>>>> I think it's much nicer to give callers different exceptions > to > > > tell > > > >>>>>> them > > > >>>>>>>> whether the state store got migrated, whether it's still > > > >> initializing, > > > >>>>>> or > > > >>>>>>>> whether there's some unrecoverable error. > > > >>>>>>>> > > > >>>>>>>> In the KIP, it's typically not necessary to discuss > > > non-user-facing > > > >>>>>>> details > > > >>>>>>>> such as what exceptions we will throw internally. The KIP is > > > >> primarily > > > >>>>>> to > > > >>>>>>>> discuss public interface changes. > > > >>>>>>>> > > > >>>>>>>> You might consider simply removing all the internal details > from > > > the > > > >>>>>> KIP, > > > >>>>>>>> which will have the dual advantage that it makes the KIP > smaller > > > and > > > >>>>>>> easier > > > >>>>>>>> to agree on, as well as giving you more freedom in the > internal > > > >>>> details > > > >>>>>>>> when it comes to implementation. > > > >>>>>>>> > > > >>>>>>>> I like your decision to have your refined exceptions extend > > > >>>>>>>> InvalidStateStoreException to ensure backward compatibility. > > Since > > > >> we > > > >>>>>>> want > > > >>>>>>>> to encourage callers to catch the more specific exceptions, > and > > we > > > >>>>>> don't > > > >>>>>>>> expect to ever throw a raw InvalidStateStoreException anymore, > > you > > > >>>>>> might > > > >>>>>>>> consider adding the @Deprecated annotation to > > > >>>>>> InvalidStateStoreException. > > > >>>>>>>> This will gently encourage callers to migrate to the new > > exception > > > >> and > > > >>>>>>> open > > > >>>>>>>> the possibility of removing InvalidStateStoreException > entirely > > > in a > > > >>>>>>> future > > > >>>>>>>> release. > > > >>>>>>>> > > > >>>>>>>> Thanks, > > > >>>>>>>> -John > > > >>>>>>>> > > > >>>>>>>> On Thu, Apr 19, 2018 at 8:58 AM, Matthias J. Sax < > > > >>>>>> matth...@confluent.io> > > > >>>>>>>> wrote: > > > >>>>>>>> > > > >>>>>>>>> Thanks for clarification! That makes sense to me. > > > >>>>>>>>> > > > >>>>>>>>> Can you update the KIP to make those suggestions explicit? > > > >>>>>>>>> > > > >>>>>>>>> > > > >>>>>>>>> -Matthias > > > >>>>>>>>> > > > >>>>>>>>> On 4/18/18 2:19 PM, vito jeng wrote: > > > >>>>>>>>>> Matthias, > > > >>>>>>>>>> > > > >>>>>>>>>> Thanks for the feedback! > > > >>>>>>>>>> > > > >>>>>>>>>>> It's up to you to keep the details part in the KIP or not. > > > >>>>>>>>>> > > > >>>>>>>>>> Got it! > > > >>>>>>>>>> > > > >>>>>>>>>>> The (incomplete) question was, if we need > > > >>>>>> `StateStoreFailException` > > > >>>>>>> or > > > >>>>>>>>>>> if existing `InvalidStateStoreException` could be used? Do > > you > > > >>>>>>> suggest > > > >>>>>>>>>>> that `InvalidStateStoreException` is not thrown at all > > anymore, > > > >>>>>> but > > > >>>>>>>> only > > > >>>>>>>>>>> the new sub-classes (just to get a better understanding). > > > >>>>>>>>>> > > > >>>>>>>>>> Yes. I suggest that `InvalidStateStoreException` is not > thrown > > > at > > > >>>>>> all > > > >>>>>>>>>> anymore, > > > >>>>>>>>>> but only new sub-classes. > > > >>>>>>>>>> > > > >>>>>>>>>>> Not sure what this sentence means: > > > >>>>>>>>>>>> The internal exception will be wrapped as category > exception > > > >>>>>>> finally. > > > >>>>>>>>>>> Can you elaborate? > > > >>>>>>>>>> > > > >>>>>>>>>> For example, `StreamThreadStateStoreProvider#stores()` will > > > throw > > > >>>>>>>>>> `StreamThreadNotRunningException`(internal exception). > > > >>>>>>>>>> And then the internal exception will be wrapped as > > > >>>>>>>>>> `StateStoreRetryableException` or `StateStoreFailException` > > > during > > > >>>>>>> the > > > >>>>>>>>>> `KafkaStreams.store()` and throw to the user. > > > >>>>>>>>>> > > > >>>>>>>>>> > > > >>>>>>>>>>> Can you explain the purpose of the "internal exceptions". > > It's > > > >>>>>>> unclear > > > >>>>>>>>>> to me atm why they are introduced. > > > >>>>>>>>>> > > > >>>>>>>>>> Hmmm...the purpose of the "internal exceptions" is to > > > distinguish > > > >>>>>>>> between > > > >>>>>>>>>> the different kinds of InvalidStateStoreException. > > > >>>>>>>>>> The original idea is that we can distinguish different state > > > store > > > >>>>>>>>>> exception for > > > >>>>>>>>>> different handling. > > > >>>>>>>>>> But to be honest, I am not quite sure this is necessary. > Maybe > > > >> have > > > >>>>>>>>>> some change during implementation. > > > >>>>>>>>>> > > > >>>>>>>>>> Does it make sense? > > > >>>>>>>>>> > > > >>>>>>>>>> > > > >>>>>>>>>> > > > >>>>>>>>>> > > > >>>>>>>>>> --- > > > >>>>>>>>>> Vito > > > >>>>>>>>>> > > > >>>>>>>>>> On Mon, Apr 16, 2018 at 5:59 PM, Matthias J. Sax < > > > >>>>>>>> matth...@confluent.io> > > > >>>>>>>>>> wrote: > > > >>>>>>>>>> > > > >>>>>>>>>>> Thanks for the update Vito! > > > >>>>>>>>>>> > > > >>>>>>>>>>> It's up to you to keep the details part in the KIP or not. > > > >>>>>>>>>>> > > > >>>>>>>>>>> > > > >>>>>>>>>>> The (incomplete) question was, if we need > > > >>>>>> `StateStoreFailException` > > > >>>>>>> or > > > >>>>>>>>>>> if existing `InvalidStateStoreException` could be used? Do > > you > > > >>>>>>> suggest > > > >>>>>>>>>>> that `InvalidStateStoreException` is not thrown at all > > anymore, > > > >>>>>> but > > > >>>>>>>> only > > > >>>>>>>>>>> the new sub-classes (just to get a better understanding). > > > >>>>>>>>>>> > > > >>>>>>>>>>> > > > >>>>>>>>>>> Not sure what this sentence means: > > > >>>>>>>>>>> > > > >>>>>>>>>>>> The internal exception will be wrapped as category > exception > > > >>>>>>> finally. > > > >>>>>>>>>>> > > > >>>>>>>>>>> Can you elaborate? > > > >>>>>>>>>>> > > > >>>>>>>>>>> > > > >>>>>>>>>>> Can you explain the purpose of the "internal exceptions". > > It's > > > >>>>>>> unclear > > > >>>>>>>>>>> to me atm why they are introduced. > > > >>>>>>>>>>> > > > >>>>>>>>>>> > > > >>>>>>>>>>> -Matthias > > > >>>>>>>>>>> > > > >>>>>>>>>>> On 4/10/18 12:33 AM, vito jeng wrote: > > > >>>>>>>>>>>> Matthias, > > > >>>>>>>>>>>> > > > >>>>>>>>>>>> Thanks for the review. > > > >>>>>>>>>>>> I reply separately in the following sections. > > > >>>>>>>>>>>> > > > >>>>>>>>>>>> > > > >>>>>>>>>>>> --- > > > >>>>>>>>>>>> Vito > > > >>>>>>>>>>>> > > > >>>>>>>>>>>> On Sun, Apr 8, 2018 at 1:30 PM, Matthias J. Sax < > > > >>>>>>>> matth...@confluent.io > > > >>>>>>>>>> > > > >>>>>>>>>>>> wrote: > > > >>>>>>>>>>>> > > > >>>>>>>>>>>>> Thanks for updating the KIP and sorry for the long > pause... > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>> Seems you did a very thorough investigation of the code. > > It's > > > >>>>>>> useful > > > >>>>>>>>> to > > > >>>>>>>>>>>>> understand what user facing interfaces are affected. > > > >>>>>>>>>>>> > > > >>>>>>>>>>>> (Some parts might be even too detailed for a KIP.) > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>> > > > >>>>>>>>>>>> I also think too detailed. Especially the section `Changes > > in > > > >>>>>> call > > > >>>>>>>>>>> trace`. > > > >>>>>>>>>>>> Do you think it should be removed? > > > >>>>>>>>>>>> > > > >>>>>>>>>>>> > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>> To summarize my current understanding of your KIP, the > main > > > >>>>>> change > > > >>>>>>>> is > > > >>>>>>>>> to > > > >>>>>>>>>>>>> introduce new exceptions that extend > > > >>>>>> `InvalidStateStoreException`. > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>> > > > >>>>>>>>>>>> yep. Keep compatibility in this KIP is important things. > > > >>>>>>>>>>>> I think the best way is that all new exceptions extend > from > > > >>>>>>>>>>>> `InvalidStateStoreException`. > > > >>>>>>>>>>>> > > > >>>>>>>>>>>> > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>> Some questions: > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>> - Why do we need ```? Could `InvalidStateStoreException` > > be > > > >>>>>> used > > > >>>>>>>> for > > > >>>>>>>>>>>>> this purpose? > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>> > > > >>>>>>>>>>>> Does this question miss some word? > > > >>>>>>>>>>>> > > > >>>>>>>>>>>> > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>> - What the superclass of `StateStoreStreamThreadNotRunni > > > >>>>>>>> ngException` > > > >>>>>>>>>>>>> is? Should it be `InvalidStateStoreException` or > > > >>>>>>>>>>> `StateStoreFailException` > > > >>>>>>>>>>>>> ? > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>> - Is `StateStoreClosed` a fatal or retryable exception ? > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>> I apologize for not well written parts. I tried to modify > > some > > > >>>>>> code > > > >>>>>>>> in > > > >>>>>>>>>>> the > > > >>>>>>>>>>>> recent period and modify the KIP. > > > >>>>>>>>>>>> The modification is now complete. Please look again. > > > >>>>>>>>>>>> > > > >>>>>>>>>>>> > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>> -Matthias > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>> On 2/21/18 5:15 PM, vito jeng wrote: > > > >>>>>>>>>>>>>> Matthias, > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>>> Sorry for not response these days. > > > >>>>>>>>>>>>>> I just finished it. Please have a look. :) > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>>> --- > > > >>>>>>>>>>>>>> Vito > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>>> On Wed, Feb 14, 2018 at 5:45 AM, Matthias J. Sax < > > > >>>>>>>>>>> matth...@confluent.io> > > > >>>>>>>>>>>>>> wrote: > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>> Is there any update on this KIP? > > > >>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>> -Matthias > > > >>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>> On 1/3/18 12:59 AM, vito jeng wrote: > > > >>>>>>>>>>>>>>>> Matthias, > > > >>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>> Thank you for your response. > > > >>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>> I think you are right. We need to look at the state > both > > > of > > > >>>>>>>>>>>>>>>> KafkaStreams and StreamThread. > > > >>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>> After further understanding of KafkaStreams thread and > > > state > > > >>>>>>>> store, > > > >>>>>>>>>>>>>>>> I am currently rewriting the KIP. > > > >>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>> --- > > > >>>>>>>>>>>>>>>> Vito > > > >>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>> On Fri, Dec 29, 2017 at 4:32 AM, Matthias J. Sax < > > > >>>>>>>>>>>>> matth...@confluent.io> > > > >>>>>>>>>>>>>>>> wrote: > > > >>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>> Vito, > > > >>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>> Sorry for this late reply. > > > >>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>> There can be two cases: > > > >>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>> - either a store got migrated way and thus, is not > > > hosted > > > >>>>>> an > > > >>>>>>>> the > > > >>>>>>>>>>>>>>>>> application instance anymore, > > > >>>>>>>>>>>>>>>>> - or, a store is hosted but the instance is in state > > > >>>>>>> rebalance > > > >>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>> For the first case, users need to rediscover the > store. > > > For > > > >>>>>>> the > > > >>>>>>>>>>> second > > > >>>>>>>>>>>>>>>>> case, they need to wait until rebalance is finished. > > > >>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>> If KafkaStreams is in state ERROR, PENDING_SHUTDOWN, > or > > > >>>>>>>>> NOT_RUNNING, > > > >>>>>>>>>>>>>>>>> uses cannot query at all and thus they cannot > > rediscover > > > or > > > >>>>>>>> retry. > > > >>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>> Does this make sense? > > > >>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>> -Matthias > > > >>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>> On 12/20/17 12:54 AM, vito jeng wrote: > > > >>>>>>>>>>>>>>>>>> Matthias, > > > >>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>> I try to clarify some concept. > > > >>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>> When streams state is REBALANCING, it means the user > > can > > > >>>>>> just > > > >>>>>>>>> plain > > > >>>>>>>>>>>>>>>>> retry. > > > >>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>> When streams state is ERROR or PENDING_SHUTDOWN or > > > >>>>>>> NOT_RUNNING, > > > >>>>>>>>> it > > > >>>>>>>>>>>>>>> means > > > >>>>>>>>>>>>>>>>>> state store migrated to another instance, the user > > needs > > > >> to > > > >>>>>>>>>>>>> rediscover > > > >>>>>>>>>>>>>>>>> the > > > >>>>>>>>>>>>>>>>>> store. > > > >>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>> Is my understanding correct? > > > >>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>> --- > > > >>>>>>>>>>>>>>>>>> Vito > > > >>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>> On Sun, Nov 5, 2017 at 12:30 AM, Matthias J. Sax < > > > >>>>>>>>>>>>>>> matth...@confluent.io> > > > >>>>>>>>>>>>>>>>>> wrote: > > > >>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>> Thanks for the KIP Vito! > > > >>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>> I agree with what Guozhang said. The original idea > of > > > the > > > >>>>>>> Jira > > > >>>>>>>>>>> was, > > > >>>>>>>>>>>>> to > > > >>>>>>>>>>>>>>>>>>> give different exceptions for different "recovery" > > > >>>>>>> strategies > > > >>>>>>>> to > > > >>>>>>>>>>> the > > > >>>>>>>>>>>>>>>>> user. > > > >>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>> For example, if a store is currently recreated, a > > user > > > >>>>>> just > > > >>>>>>>> need > > > >>>>>>>>>>> to > > > >>>>>>>>>>>>>>> wait > > > >>>>>>>>>>>>>>>>>>> and can query the store later. On the other hand, > if > > a > > > >>>>>> store > > > >>>>>>>> go > > > >>>>>>>>>>>>>>> migrated > > > >>>>>>>>>>>>>>>>>>> to another instance, a user needs to rediscover the > > > store > > > >>>>>>>>> instead > > > >>>>>>>>>>>>> of a > > > >>>>>>>>>>>>>>>>>>> "plain retry". > > > >>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>> Fatal errors might be a third category. > > > >>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>> Not sure if there is something else? > > > >>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>> Anyway, the KIP should contain a section that talks > > > about > > > >>>>>>> this > > > >>>>>>>>>>> ideas > > > >>>>>>>>>>>>>>> and > > > >>>>>>>>>>>>>>>>>>> reasoning. > > > >>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>> -Matthias > > > >>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>> On 11/3/17 11:26 PM, Guozhang Wang wrote: > > > >>>>>>>>>>>>>>>>>>>> Thanks for writing up the KIP. > > > >>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>> Vito, Matthias: one thing that I wanted to figure > > out > > > >>>>>> first > > > >>>>>>>> is > > > >>>>>>>>>>> what > > > >>>>>>>>>>>>>>>>>>>> categories of errors we want to notify the users, > if > > > we > > > >>>>>>> only > > > >>>>>>>>>>> wants > > > >>>>>>>>>>>>> to > > > >>>>>>>>>>>>>>>>>>>> distinguish fatal v.s. retriable then probably we > > > should > > > >>>>>>>> rename > > > >>>>>>>>>>> the > > > >>>>>>>>>>>>>>>>>>>> proposed StateStoreMigratedException / > > > >>>>>>>>> StateStoreClosedException > > > >>>>>>>>>>>>>>>>> classes. > > > >>>>>>>>>>>>>>>>>>>> And then from there we should list what are the > > > possible > > > >>>>>>>>> internal > > > >>>>>>>>>>>>>>>>>>>> exceptions ever thrown in those APIs in the call > > > trace, > > > >>>>>> and > > > >>>>>>>>> which > > > >>>>>>>>>>>>>>>>>>>> exceptions should be wrapped to what others, and > > which > > > >>>>>> ones > > > >>>>>>>>>>> should > > > >>>>>>>>>>>>> be > > > >>>>>>>>>>>>>>>>>>>> handled without re-throwing, and which ones should > > not > > > >> be > > > >>>>>>>>> wrapped > > > >>>>>>>>>>>>> at > > > >>>>>>>>>>>>>>>>> all > > > >>>>>>>>>>>>>>>>>>>> but directly thrown to user's face. > > > >>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>> Guozhang > > > >>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>> On Wed, Nov 1, 2017 at 11:09 PM, vito jeng < > > > >>>>>>>>> v...@is-land.com.tw> > > > >>>>>>>>>>>>>>>>> wrote: > > > >>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>>> Hi, > > > >>>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>>> I'd like to start discuss KIP-216: > > > >>>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>>> https://cwiki.apache.org/ > > > confluence/display/KAFKA/KIP- > > > >>>>>>>>>>>>>>>>>>>>> 216%3A+IQ+should+throw+different+exceptions+for+ > > > >>>>>>>>>>> different+errors > > > >>>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>>> Please have a look. > > > >>>>>>>>>>>>>>>>>>>>> Thanks! > > > >>>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>>> --- > > > >>>>>>>>>>>>>>>>>>>>> Vito > > > >>>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>>> > > > >>>>>>>>>>>>>> > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>>> > > > >>>>>>>>>>>> > > > >>>>>>>>>>> > > > >>>>>>>>>>> > > > >>>>>>>>>> > > > >>>>>>>>> > > > >>>>>>>>> > > > >>>>>>>> > > > >>>>>>> > > > >>>>>>> > > > >>>>>>> > > > >>>>>>> -- > > > >>>>>>> -- Guozhang > > > >>>>>>> > > > >>>>>> > > > >>>>> > > > >>>> > > > >>>> > > > >>> > > > >> > > > >> > > > > > > > > > > > > > > > > > > > > -- > > -- Guozhang > > >