Hey Vito,

I saw that you updated your PR, but did not reply to my last comments.
Any thoughts?


-Matthias

On 10/19/18 10:34 AM, Matthias J. Sax wrote:
> Glad to have you back Vito :)
> 
> Some follow up thoughts:
> 
>  - the current `InvalidStateStoreException` is documents as being
> sometimes retry-able. From the JavaDocs:
> 
>> These exceptions may be transient [...] Hence, it is valid to backoff and 
>> retry when handling this exception.
> 
> I am wondering what the semantic impact/change is, if we introduce
> `RetryableStateStoreException` and `FatalStateStoreException` that both
> inherit from it. While I like the introduction of both from a high level
> point of view, I just want to make sure it's semantically sound and
> backward compatible. Atm, I think it's fine, but I want to point it out
> such that everybody can think about this, too, so we can verify that
> it's a natural evolving API change.
> 
>  - StateStoreClosedException:
> 
>> will be wrapped to StateStoreMigratedException or 
>> StateStoreNotAvailableException later.
> 
> Can you clarify the cases (ie, when will it be wrapped with the one or
> the other)?
> 
>  - StateStoreIsEmptyException:
> 
> I don't understand the semantic of this exception. Maybe it's a naming
> issue?
> 
>> will be wrapped to StateStoreMigratedException or 
>> StateStoreNotAvailableException later.
> 
> Also, can you clarify the cases (ie, when will it be wrapped with the
> one or the other)?
> 
> 
> I am also wondering, if we should introduce a fatal exception
> `UnkownStateStoreException` to tell users that they passed in an unknown
> store name?
> 
> 
> 
> -Matthias
> 
> 
> 
> On 10/17/18 8:14 PM, vito jeng wrote:
>> Just open a PR for further discussion:
>> https://github.com/apache/kafka/pull/5814
>>
>> Any suggestion is welcome.
>> Thanks!
>>
>> ---
>> Vito
>>
>>
>> On Thu, Oct 11, 2018 at 12:14 AM vito jeng <v...@is-land.com.tw> wrote:
>>
>>> 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
>>>>>
>>>>
>>>
>>
> 

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to