[RFC PATCH v2] imapd.c: imapoptions: implement idle timeout

ellie timoney ellie at fastmail.com
Sun Sep 11 21:08:23 EDT 2016


On Thu, Sep 8, 2016, at 07:37 PM, Philipp Gesang wrote:
> thanks for the review. There’s a v3 of the patch now in which I
> address your points.

Looks good, builds fine, passes tests (including the new Cassandane
tests for this behaviour: https://git.io/viEmd ). I'm quite happy to
merge this.

> I’m not convinced that wall clock time with all the complexity it
> entails is necessary here. That’s why I went with the simpler
> monotonic clock.
> 
> If you insist on using time(3) instead, I can rewrite that part
> accordingly. After all, I tagged this an RFC patch for a reason
> =)

Yeah, no, I don't at all insist on using time(3), was just wondering
about the reasoning for not starting there (since struct timespec is
slightly fiddlier to deal with than time_t, and we only care about
seconds resolution).  And it sounds pretty sensible, thanks :)

Cheers,

ellie

On Thu, Sep 8, 2016, at 07:37 PM, Philipp Gesang wrote:
> Hi,
> 
> thanks for the review. There’s a v3 of the patch now in which I
> address your points.
> 
> -<| Quoting ellie timoney <ellie at fastmail.com>, on Thursday, 2016-09-08
> 11:07:54 AM |>-
> > > +    if (clock_gettime(CLOCK_MONOTONIC_COARSE, &now) == -1) {
> > > +        syslog(LOG_ERR, "clock_gettime (%d %s): error reading clock",
> > > +               errno, strerror(errno));
> > > +        return false;
> > > +    }
> > 
> > I'm curious about the choice of struct timespec/clock_gettime() vs
> > time_t/time() -- considering we're operating at seconds (or maybe
> > minutes) granularity anyway?
> > 
> > I can kind of see a point about the ability to request a monotonic
> > clock, such that some sysadmin changing the system time doesn't
> > prematurely timeout a bunch of idle connections.  Though that doesn't
> > seem likely to be a real problem in practice (a: don't do that, b: the
> > clients will just reconnect in a bit anyway).
> 
> I’m not convinced that wall clock time with all the complexity it
> entails is necessary here. That’s why I went with the simpler
> monotonic clock.
> 
> If you insist on using time(3) instead, I can rewrite that part
> accordingly. After all, I tagged this an RFC patch for a reason
> =)
> 
> > And I'm having mixed feelings about CLOCK_MONOTONIC_COARSE, which Linux
> > documents as "Linux-specific".  I know we have some Solaris users out
> > there (because they very kindly send us patches every time us
> > Linux-using developers break it for them!)
> 
> My bad, that’s indeed an unintended Linuxism. V3 uses plain
> CLOCK_MONOTONIC which is POSIX.
> 
> > Also, I'm curious about the explicit %s=>strerror(errno) in the syslog
> > lines, instead of just doing something like: syslog(LOG_ERR,
> > "clock_gettime: %m").  Not sure if this is a case of you not knowing
> > about %m, or you knowing something I don't about %m...
> 
> Fixed.
> 
> > > +            if (deadline_exceeded(&deadline)) {
> > > +                shutdown = shutdown_silent;
> > > +                goto done_shutdown;
> > > +            }
> > 
> > I notice this bit is explicitly skipping past terminating IDLE on the
> > backend? I guess we specifically didn't receive an idle termination from
> > the client in this case, so passing one on to the backend would be
> > misleading, but I wonder.
> 
> Since no DONE arrived from the idler, I opted not to emit one on
> the remote line either. But I agree it makes more sense to
> cleanly leave the idle state; v3 reflects that.
> 
> > Anyway, the patch applies cleanly, builds fine for me, and passes our
> > current tests.  I'll try and put together a couple of Cassandane tests
> > for the new behaviour and see what shakes out of that.
> 
> Great.
> 
> Also changed with v3: When the idle timeout strikes, a debug
> message is logged. This feedback makes sense considering that
> it’s mainly due to buggy clients that the facility is needed at
> all. Also, I added a line to reset errno that I missed when
> forward porting the patch from our ancient internal cyrus tree ;)
> 
> Best,
> Philipp
> 
> Email had 1 attachment:
> + signature.asc
>   1k (application/pgp-signature)


More information about the Cyrus-devel mailing list