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 > > >