From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on dcvr.yhbt.net X-Spam-Level: * X-Spam-ASN: AS33070 50.56.128.0/17 X-Spam-Status: No, score=1.0 required=3.0 tests=AWL,HK_RANDOM_FROM, MSGID_FROM_MTA_HEADER,TVD_RCVD_IP shortcircuit=no autolearn=no version=3.3.2 Path: news.gmane.org!not-for-mail From: Eric Wong Newsgroups: gmane.comp.lang.ruby.rainbows.general Subject: Re: [PATCH] close_connection_after_writing only if not deferred, as in cool.io Date: Sat, 29 Dec 2012 13:26:01 +0000 Message-ID: <20121229132601.GA16997@dcvr.yhbt.net> References: <20121218214538.GA12275@dcvr.yhbt.net> <20121218235954.GA14404@dcvr.yhbt.net> <20121228084337.GB19512@dcvr.yhbt.net> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Trace: ger.gmane.org 1356787566 2338 80.91.229.3 (29 Dec 2012 13:26:06 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Sat, 29 Dec 2012 13:26:06 +0000 (UTC) To: Rainbows! list Original-X-From: rainbows-talk-bounces-GrnCvJ7WPxnNLxjTenLetw@public.gmane.org Sat Dec 29 14:26:22 2012 Return-path: Envelope-to: gclrrg-rainbows-talk@m.gmane.org X-Original-To: rainbows-talk-GrnCvJ7WPxnNLxjTenLetw@public.gmane.org Delivered-To: rainbows-talk-GrnCvJ7WPxnNLxjTenLetw@public.gmane.org Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-BeenThere: rainbows-talk-GrnCvJ7WPxnNLxjTenLetw@public.gmane.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: rainbows-talk-bounces-GrnCvJ7WPxnNLxjTenLetw@public.gmane.org Errors-To: rainbows-talk-bounces-GrnCvJ7WPxnNLxjTenLetw@public.gmane.org Xref: news.gmane.org gmane.comp.lang.ruby.rainbows.general:429 Archived-At: Received: from 50-56-192-79.static.cloud-ips.com ([50.56.192.79] helo=rubyforge.org) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1TowQf-000147-RY for gclrrg-rainbows-talk@m.gmane.org; Sat, 29 Dec 2012 14:26:22 +0100 Received: from localhost.localdomain (localhost [127.0.0.1]) by rubyforge.org (Postfix) with ESMTP id 71FC12E09E; Sat, 29 Dec 2012 13:26:06 +0000 (UTC) Received: from dcvr.yhbt.net (dcvr.yhbt.net [64.71.152.64]) by rubyforge.org (Postfix) with ESMTP id 59C2E2E096 for ; Sat, 29 Dec 2012 13:26:03 +0000 (UTC) Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 280AE1F6CA; Sat, 29 Dec 2012 13:26:02 +0000 (UTC) "Lin Jen-Shin (godfat)" wrote: > On Fri, Dec 28, 2012 at 4:43 PM, Eric Wong wrote: > > I definitely don't want to rely on GNU-isms in shell scripts, > > it should rely on POSIX behavior. > > > > It /should/ work on *BSD, I'll try again on FreeBSD tomorrow. > > I got managed to get them all passed now :D > The problem is at `wc`. On my mac, wc would print > some leading spaces even if you use `wc -c < random_blob`. > > $ echo 's' | wc -c > 2 > > After using coreutils from GNU or use sed to strip the spaces, > everything passed, except for the one for Apache ab. I've heard Ah, probably good to add a byte_count() function to test-lib.sh to get around this... FreeBSD 9.0 does this, too. I didn't manage to work more on FreeBSD, got distracted by bugs in other projects... > Also, after confirming all tests are fine, the only test which cannot > pass for eventmachine with threads is: > > "send big pipelined identity requests" > > As you mentioned before, the issue is that there is no easy way to > disable a connection and enable it later on? I tried `pause' and > `resume', but it doesn't seem to work correctly? Or I might have > done something wrong or missed something. I think that was another issue I had with the EM thread implementation I tried... > If I took out this line to make Rainbows! buffer everything, it would > also work. > > @_io.shutdown(Socket::SHUT_RD) if @buf.size > 0x1c000 > > But I guess we shouldn't really buffer them in Ruby. I am still trying > to solve this :/ You can find my working copy here: > https://github.com/godfat/rainbows/pull/2/files > I don't paste it inline here because it's large and I guess we should > make all tests pass. Or we could skip that test for this model? Tests for features are fine to skip, but being open to such a trivial DoS is not fine... Perhaps disable keepalive support entirely? (you'd have to disable a lot of tests, perhaps like StreamResponseEpoll :x) > Another concern is that, the most straightforward implementation > would be subclass Rainbows::EventMachine::Client to make it > app_call in a thread. But there's em_client_class option which > users might provide their own eventmachine connection. That was for Cramp, I can't remember exactly how it worked... > If I did this in a client class, then users who provide their own > client class won't really respect the threads, making using > EventMachine or EventMachineThreadSpawn basically the same. > I think this is somehow unexpected. They'd have to pick the threaded concurrency model. Maybe more Ruby code is thread-safe nowadays... > But then I realized using another option for threads or not really > complicates the original implementation, this is not what I really > want either. I am not sure if there's a perfect solution for this, > so I just concentrate on passing all tests first... Yes, Rainbows! already has so many options it's hard to keep things straight :x I believe EM is one of the concurrency options people actually use in Rainbows!, so it's important to not break it. I don't mind copy+pasting first and eventually factoring out the common parts if possible. _______________________________________________ Rainbows! mailing list - rainbows-talk-GrnCvJ7WPxnNLxjTenLetw@public.gmane.org http://rubyforge.org/mailman/listinfo/rainbows-talk Do not quote signatures (like this one) or top post when replying