Return-Path: Delivered-To: apmail-avro-commits-archive@www.apache.org Received: (qmail 38418 invoked from network); 7 Feb 2011 18:37:42 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 7 Feb 2011 18:37:42 -0000 Received: (qmail 20749 invoked by uid 500); 7 Feb 2011 18:37:42 -0000 Delivered-To: apmail-avro-commits-archive@avro.apache.org Received: (qmail 20710 invoked by uid 500); 7 Feb 2011 18:37:41 -0000 Mailing-List: contact commits-help@avro.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@avro.apache.org Delivered-To: mailing list commits@avro.apache.org Received: (qmail 20701 invoked by uid 99); 7 Feb 2011 18:37:40 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 07 Feb 2011 18:37:40 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 07 Feb 2011 18:37:38 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 2650E2388A44; Mon, 7 Feb 2011 18:37:17 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1068045 - in /avro/trunk: CHANGES.txt lang/java/avro/src/main/java/org/apache/avro/generic/GenericDatumReader.java Date: Mon, 07 Feb 2011 18:37:17 -0000 To: commits@avro.apache.org From: scottcarey@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20110207183717.2650E2388A44@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: scottcarey Date: Mon Feb 7 18:37:16 2011 New Revision: 1068045 URL: http://svn.apache.org/viewvc?rev=1068045&view=rev Log: AVRO-743 Java: Performance Regression and memory pressure with GenericDatumReader Modified: avro/trunk/CHANGES.txt avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericDatumReader.java Modified: avro/trunk/CHANGES.txt URL: http://svn.apache.org/viewvc/avro/trunk/CHANGES.txt?rev=1068045&r1=1068044&r2=1068045&view=diff ============================================================================== --- avro/trunk/CHANGES.txt (original) +++ avro/trunk/CHANGES.txt Mon Feb 7 18:37:16 2011 @@ -150,6 +150,9 @@ Avro 1.5.0 (unreleased) BUG FIXES + AVRO-743. Java: Performance Regression and memory pressure with + GenericDatumReader. (scottcarey) + AVRO-675. C: Bytes and fixed setters don't update datum size. (Douglas Creager via massie) Modified: avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericDatumReader.java URL: http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericDatumReader.java?rev=1068045&r1=1068044&r2=1068045&view=diff ============================================================================== --- avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericDatumReader.java (original) +++ avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericDatumReader.java Mon Feb 7 18:37:16 2011 @@ -37,6 +37,9 @@ public class GenericDatumReader imple private GenericData data; private Schema actual; private Schema expected; + + private ResolvingDecoder creatorResolver = null; + private final Thread creator; public GenericDatumReader() { this(null, null, GenericData.get()); @@ -56,6 +59,7 @@ public class GenericDatumReader imple this.actual = writer; this.expected = reader; this.data = data; + this.creator = Thread.currentThread(); } @Override @@ -64,18 +68,15 @@ public class GenericDatumReader imple if (expected == null) { expected = actual; } - threadResolver.set(null); + creatorResolver = null; } /** Set the reader's schema. */ public void setExpected(Schema reader) throws IOException { this.expected = reader; - threadResolver.set(null); + creatorResolver = null; } - private final ThreadLocal threadResolver = - new ThreadLocal(); - private static final ThreadLocal>> RESOLVER_CACHE = new ThreadLocal>>() { @@ -86,9 +87,11 @@ public class GenericDatumReader imple private ResolvingDecoder getResolver(Schema actual, Schema expected) throws IOException { - ResolvingDecoder resolver = threadResolver.get(); - if (resolver != null) - return resolver; + Thread currThread = Thread.currentThread(); + ResolvingDecoder resolver; + if (currThread == creator && creatorResolver != null) { + return creatorResolver; + } Map cache = RESOLVER_CACHE.get().get(actual); if (cache == null) { @@ -101,7 +104,11 @@ public class GenericDatumReader imple expected, null); cache.put(expected, resolver); } - threadResolver.set(resolver); + + if (currThread == creator){ + creatorResolver = resolver; + } + return resolver; }