[infinispan-commits] Infinispan SVN: r1880 - trunk/server/hotrod/src/main/scala/org/infinispan/server/hotrod.
infinispan-commits at lists.jboss.org
infinispan-commits at lists.jboss.org
Tue Jun 1 07:59:55 EDT 2010
Author: galder.zamarreno at jboss.com
Date: 2010-06-01 07:59:55 -0400 (Tue, 01 Jun 2010)
New Revision: 1880
Modified:
trunk/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: trunk/server/hotrod/src/main/scala/org/infinispan/server/hotrod/HotRodDecoder.scala
===================================================================
--- trunk/server/hotrod/src/main/scala/org/infinispan/server/hotrod/HotRodDecoder.scala 2010-06-01 07:29:19 UTC (rev 1879)
+++ trunk/server/hotrod/src/main/scala/org/infinispan/server/hotrod/HotRodDecoder.scala 2010-06-01 11:59:55 UTC (rev 1880)
@@ -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