From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-2.9 required=3.0 tests=ALL_TRUSTED,AWL,BAYES_00, URIBL_BLOCKED shortcircuit=no autolearn=unavailable version=3.3.2 X-Original-To: yahns-public@yhbt.net Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 719BC1FE1C; Wed, 23 Sep 2015 08:05:04 +0000 (UTC) Date: Wed, 23 Sep 2015 08:05:04 +0000 From: Eric Wong To: "Lin Jen-Shin (godfat)" Cc: yahns-public@yhbt.net Subject: Re: -1 shutdown_timeout? Message-ID: <20150923080504.GA19141@dcvr.yhbt.net> References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: List-Id: "Lin Jen-Shin (godfat)" wrote: > Hi, > > I am trying to switch one application from using rainbows > to yahns, and the application would do some long-polling. > > When I ctrl+c to interrupt yahns, I would see yahns is > trying to drop clients which still connect, with timeout > set to 5 (from my config setting client_timeout to 5). > > However, after a few seconds, there would be messages > like this from yahns: > > dropping 0 of 1 clients for timeout=-1 -1 means gently kill off every socket that can be killed (inside fdmap.rb __expire). But the shutdown tries to be gentle: it merely makes the socket unusable to the worker thread. It has no way to interrupt a worker thread. > The timeout would be -1 after a few seconds, and then > it would only stop when those clients timeout at 60 seconds > (this is my assumption though, it would show a request was > around 60 seconds from CommonLogger (assumption again) > in the end, and yahns would quit gracefully) So your long request taking 60s is normal/expected? yahns *should* be waiting that long (unless you send another SIGQUIT). You can probably set a shutdown_timeout >= 60s to quiet down the log messages. It defaults to the highest client_timeout of all the apps running. > I looked around the code, which should be: > > def dropping(fdmap) > if drop_acceptors[0] || fdmap.size > 0 > timeout = @shutdown_expire < Yahns.now ? -1 : @shutdown_timeout > fdmap.desperate_expire(timeout) > true > else > false > end > end > > While Yahns.now would get growing, I don't really understand why > it's written like this? Is this intentional? If so, how could I force > yahns shut those clients down in this case? Rereading the code, it seems intentional and correct. Setting the -1 timeout, means the shutdown_timeout has expired. yahns will not raise cross-thread exceptions or signals to interrupt apps, so I guess the use of the word "desperate" is a misnomer. Admittedly, the shutdown code is a bit hairy and it took me to a bit to fix some of the race conditions back in 2013.