I was previously preferring logging + exist, but Jiangjie had a point that
by doing this we are effectively silently changing the close(>0) call to
close(0) call although we log an error to it. The problem is that users may
just think the close(>0) call exit normally and do not check the logs.

Guozhang

On Thu, Mar 26, 2015 at 6:31 AM, Jiangjie Qin <j...@linkedin.com.invalid>
wrote:

> Hi Neha,
>
> I totally agree that from program behavior point of view, blocking is not
> a good idea.
>
> I think the ultimate question here is whether we define calling
> close()/close(timeout) from callback as a legal usage or not.
>
> If it is a legal usage, logging a warning and exit makes perfect sense, we
> just need to document that in this case close() is same as close(0).
>
> On the other hand, if we define this as an illegal usage and want users to
> correct it, blocking has merit in some cases.
> Let¹s say I¹m writing a unit test for exit-on-send-faiure and call close()
> in callback, if we detect the mis-usage of close() and replace it with
> close(0). User might never know that they were not using the right
> interface in the callback, because the unit test will pass just with an
> error log which might not even be printed. So we are indulging user to use
> a wrong interface in this case.
>
> My previous assumption was that we don¹t want to allow user to use
> close()/close(timeout) in callback. That¹s why I preferred blocking.
>
> That said, I do not have strong opinion over the options, so I¹m happy
> with whichever way we decide to go.
>
> Thanks.
>
> Jiangjie (Becket) Qin
>
> On 3/25/15, 9:02 PM, "Neha Narkhede" <n...@confluent.io> wrote:
>
> >>
> >> We have agreed that we will have an error log to inform user about this
> >> mis-usage. The options differ in the way how we can force user to take a
> >> look at that error log.
> >
> >
> >Since we have to detect the problem in order to log an appropriate error
> >message, we have a way to tell if the user is doing something that will
> >cause their application to block indefinitely, which can't be ideal
> >behavior in any case I can imagine.
> >
> >My concern is that this might add to this long list
> ><http://ingest.tips/2015/03/26/what-is-confusing-about-kafka/> of
> >confusing
> >Kafka behaviors, so I'd vote to log an appropriate error message and exit.
> >
> >On Wed, Mar 25, 2015 at 10:04 AM, Jiangjie Qin <j...@linkedin.com.invalid
> >
> >wrote:
> >
> >> Hi Jay,
> >>
> >> The reason we keep the blocking behavior if close() or close(timeout) is
> >> called from callback is discussed in another thread.
> >> I copy/paste the message here:
> >>
> >> It looks that the problem we want to solve and the purpose we want to
> >> achieve is:
> >> If user uses close() in callback, we want to let user be aware that they
> >> should use close(0) instead of close() in the callback.
> >>
> >> We have agreed that we will have an error log to inform user about this
> >> mis-usage. The options differ in the way how we can force user to take a
> >> look at that error log.
> >> There are two scenarios:
> >> 1. User does not expect the program to exit.
> >> 2. User expect the program to exit.
> >>
> >> For scenario 1), blocking will probably delay the discovery of the
> >> problem. Calling close(0) exposes the problem quicker. In this scenario
> >> producer just encounter a send failure when running normally.
> >> For scenario 2), blocking will expose the problem quick. Calling
> >>close(-1)
> >> might hide the problem. This scenario might include: a) Unit test for a
> >> send failure. b) Message sent during a close() call from a user thread.
> >>
> >> So as a summary table:
> >>
> >>                  Scenario 1)                     Scenario 2)
> >>
> >> Blocking    Delay problem discovery        Guaranteed problem discovery
> >>
> >> Close(-1)   Immediate problem discovery    Problem might be hidden
> >>
> >>
> >> Personally I prefer blocking because it seems providing more guarantees
> >> and safer.
> >>
> >> Thanks.
> >>
> >> Jiangjie (Becket) Qin
> >>
> >>
> >>
> >> On 3/25/15, 9:20 AM, "Jay Kreps" <jay.kr...@gmail.com> wrote:
> >>
> >> >Wait, actually, why would the thread block forever? I would understand
> >> >throwing an error and failing immediately (fail fast) and I would
> >> >understand logging an error and blocking for the time they specified
> >> >(since
> >> >that is what they asked for), but the logging an error and putatively
> >> >blocking forever if they only specified a wait time of say 15 ms just
> >> >seems
> >> >weird, right? There is no other error condition where we intentionally
> >> >block forever as far as I know.
> >> >
> >> >Sorry to keep going around and around on this minor point I just want
> >>to
> >> >clarify that that is what you mean.
> >> >
> >> >-Jay
> >> >
> >> >On Wed, Mar 25, 2015 at 9:17 AM, Jay Kreps <jay.kr...@gmail.com>
> wrote:
> >> >
> >> >> +1
> >> >>
> >> >> -Jay
> >> >>
> >> >> On Tue, Mar 24, 2015 at 2:43 PM, Guozhang Wang <wangg...@gmail.com>
> >> >>wrote:
> >> >>
> >> >>> +1.
> >> >>>
> >> >>> On Tue, Mar 24, 2015 at 2:15 PM, Jiangjie Qin
> >> >>><j...@linkedin.com.invalid>
> >> >>> wrote:
> >> >>>
> >> >>> >
> >> >>> >
> >> >>>
> >> >>>
> >>
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-15+-+Add+a+close+m
> >> >>>ethod+with+a+timeout+in+the+producer
> >> >>> >
> >> >>> > As a short summary, the new interface will be as following:
> >> >>> > Close(Long Timeout, TimeUnit timeUnit)
> >> >>> >
> >> >>> >   1.  When timeout > 0, it will try to wait up to timeout for the
> >> >>>sender
> >> >>> > thread to complete all the requests, then join the sender thread.
> >>If
> >> >>>the
> >> >>> > sender thread is not able to finish work before timeout, the
> >>method
> >> >>> force
> >> >>> > close the producer by fail all the incomplete requests and join
> >>the
> >> >>> sender
> >> >>> > thread.
> >> >>> >   2.  When timeout = 0, it will be a non-blocking call, just
> >>initiate
> >> >>> the
> >> >>> > force close and DOES NOT join the sender thread.
> >> >>> >
> >> >>> > If close(timeout) is called from callback, an error message will
> >>be
> >> >>> logged
> >> >>> > and the producer sender thread will block forever.
> >> >>> >
> >> >>> >
> >> >>>
> >> >>>
> >> >>> --
> >> >>> -- Guozhang
> >> >>>
> >> >>
> >> >>
> >>
> >>
> >
> >
> >--
> >Thanks,
> >Neha
>
>


-- 
-- Guozhang

Reply via email to