Return-Path: Delivered-To: apmail-hadoop-core-dev-archive@www.apache.org Received: (qmail 74724 invoked from network); 11 Feb 2008 23:13:31 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 11 Feb 2008 23:13:31 -0000 Received: (qmail 3853 invoked by uid 500); 11 Feb 2008 23:13:24 -0000 Delivered-To: apmail-hadoop-core-dev-archive@hadoop.apache.org Received: (qmail 3475 invoked by uid 500); 11 Feb 2008 23:13:23 -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 3453 invoked by uid 99); 11 Feb 2008 23:13:23 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 11 Feb 2008 15:13:23 -0800 X-ASF-Spam-Status: No, hits=-1998.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; Mon, 11 Feb 2008 23:13:00 +0000 Received: from brutus (localhost [127.0.0.1]) by brutus.apache.org (Postfix) with ESMTP id CB19D714081 for ; Mon, 11 Feb 2008 15:13:08 -0800 (PST) Message-ID: <30438707.1202771588829.JavaMail.jira@brutus> Date: Mon, 11 Feb 2008 15:13:08 -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-after-patch.log.gz > 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 > Assignee: Raghu Angadi > Priority: Critical > Fix For: 0.16.1 > > Attachments: failure-after-patch.log.gz, failure-with-patch.log, failure.log, HADOOP-2789-Test.patch, HADOOP-2789.patch, HADOOP-2789.patch, HADOOP-2789.patch, HADOOP-2789.patch, HADOOP-2789.patch, 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.