[infinispan-commits] Infinispan SVN: r1882 - branches/4.1.x/server/hotrod/src/main/scala/org/infinispan/server/hotrod.

infinispan-commits at lists.jboss.org infinispan-commits at lists.jboss.org
Wed Jun 2 05:02:19 EDT 2010


Author: galder.zamarreno at jboss.com
Date: 2010-06-02 05:02:18 -0400 (Wed, 02 Jun 2010)
New Revision: 1882

Modified:
   branches/4.1.x/server/hotrod/src/main/scala/org/infinispan/server/hotrod/HotRodDecoder.scala
Log:
[ISPN-472] (Stop creating a new instance of Decoder10 per each request) Done.

Modified: branches/4.1.x/server/hotrod/src/main/scala/org/infinispan/server/hotrod/HotRodDecoder.scala
===================================================================
--- branches/4.1.x/server/hotrod/src/main/scala/org/infinispan/server/hotrod/HotRodDecoder.scala	2010-06-01 13:31:36 UTC (rev 1881)
+++ branches/4.1.x/server/hotrod/src/main/scala/org/infinispan/server/hotrod/HotRodDecoder.scala	2010-06-02 09:02:18 UTC (rev 1882)
@@ -10,6 +10,7 @@
 import org.infinispan.server.hotrod.OperationResponse._
 import java.nio.channels.ClosedChannelException
 import org.infinispan.{CacheException, Cache}
+import collection.mutable.HashMap
 
 /**
  * // TODO: Document this
@@ -25,8 +26,8 @@
 
    private var isError = false
    private var joined = false
-
    private val isTrace = isTraceEnabled
+   private var decoders = new HashMap[Short, AbstractVersionedDecoder]()
 
    override def readHeader(buffer: ChannelBuffer): HotRodHeader = {
       try {
@@ -50,10 +51,7 @@
       
       try {
          val version = buffer.readUnsignedByte
-         val decoder = version match {
-            case Version10 => new Decoder10(cacheManager)
-            case _ => throw new UnknownVersionException("Unknown version:" + version)
-         }
+         val decoder = getDecoder(version)
          val header = decoder.readHeader(buffer, messageId)
          if (isTrace) trace("Decoded header {0}", header)
          isError = false
@@ -66,6 +64,20 @@
       }
    }
 
+   private def getDecoder(version: Short): AbstractVersionedDecoder = {
+      var option = decoders.get(version)
+      if (option == None) {
+         val decoder = version match {
+            case Version10 => new Decoder10(cacheManager)
+            case _ => throw new UnknownVersionException("Unknown version:" + version)
+         }
+         decoders += (version -> decoder)
+         decoder
+      } else {
+         option.get
+      }
+   }
+
    override def getCache(header: HotRodHeader): Cache[CacheKey, CacheValue] = {
       val cacheName = header.cacheName
       if (cacheName == TopologyCacheName)



More information about the infinispan-commits mailing list