Return-Path: Delivered-To: apmail-hadoop-core-dev-archive@www.apache.org Received: (qmail 10312 invoked from network); 7 Feb 2008 01:51:31 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 7 Feb 2008 01:51:31 -0000 Received: (qmail 79334 invoked by uid 500); 7 Feb 2008 01:51:23 -0000 Delivered-To: apmail-hadoop-core-dev-archive@hadoop.apache.org Received: (qmail 79209 invoked by uid 500); 7 Feb 2008 01:51:22 -0000 Mailing-List: contact core-dev-help@hadoop.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: core-dev@hadoop.apache.org Delivered-To: mailing list core-dev@hadoop.apache.org Received: (qmail 79200 invoked by uid 99); 7 Feb 2008 01:51:22 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 06 Feb 2008 17:51:22 -0800 X-ASF-Spam-Status: No, hits=-98.0 required=10.0 tests=ALL_TRUSTED,URIBL_BLACK X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO brutus.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 07 Feb 2008 01:51:01 +0000 Received: from brutus (localhost [127.0.0.1]) by brutus.apache.org (Postfix) with ESMTP id 64FCE714045 for ; Wed, 6 Feb 2008 17:51:09 -0800 (PST) Message-ID: <12991200.1202349069410.JavaMail.jira@brutus> Date: Wed, 6 Feb 2008 17:51:09 -0800 (PST) From: "Clint Morgan (JIRA)" To: core-dev@hadoop.apache.org Subject: [jira] Updated: (HADOOP-2789) Race condition in ipc.Server prevents responce being written back to client. In-Reply-To: <3571230.1202335290995.JavaMail.jira@brutus> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Virus-Checked: Checked by ClamAV on apache.org [ https://issues.apache.org/jira/browse/HADOOP-2789?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Clint Morgan updated HADOOP-2789: --------------------------------- Attachment: failure-with-patch.log This log shows the failure with Dhruba's patch proposal. > Race condition in ipc.Server prevents responce being written back to client. > ---------------------------------------------------------------------------- > > Key: HADOOP-2789 > URL: https://issues.apache.org/jira/browse/HADOOP-2789 > Project: Hadoop Core > Issue Type: Bug > Components: ipc > Affects Versions: 0.16.0 > Reporter: Clint Morgan > Priority: Critical > Attachments: failure-with-patch.log, failure.log, HADOOP-2789.patch, success.log > > > I encountered a race condition in ipc.Server when writing the response > back to the socket. Sometimes the write SelectKey is being canceled > when it should not be, and thus the full response never gets > written. This results in clients timing out on the socket while waiting for the response. > I am attaching a unit test that demonstrates the problem. It follows > closely the TestIPC test, however the socket output buffer is set > smaller than the result being sent back, so that partial writes > occur. I also put random sleep in the client to help provoke the race > condition. > On my machine this fails over half of the time. > Looking at the code in ipc.Server.java. The problem is manifested in > Responder.doAsyncWrite(). If I comment out the key.cancel() line, then > everything works fine. > So we need to identify when to safely cancel the key. > I tried the following: > {noformat} > private void doAsyncWrite(SelectionKey key) throws IOException { > Call call = (Call)key.attachment(); > if (call == null) { > return; > } > if (key.channel() != call.connection.channel) { > throw new IOException("doAsyncWrite: bad channel"); > } > if (processResponse(call.connection.responseQueue)) { > synchronized(call.connection.responseQueue) { > if (call.connection.responseQueue.size() == 0) { > LOG.info("Cancelling key for call "+call.toString()+ " key: "+ key.toString()); > key.cancel(); // remove item from selector. > } else { > LOG.warn("NOT REALLY DONE: "+call.toString()+ " key: "+ key.toString()); > } > } > } > } > {noformat} > And this does catch some of the cases (EG, the LOG.warn message gets hit), but i still hit the race condition. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.