From 2bcc7d7dc07759441615cede65c26761170cdb4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Galder=20Zamarre=C3=B1o?= Date: Wed, 1 Dec 2010 15:13:33 +0100 Subject: [PATCH] ISPN-810 - Treat Memcached flush_all delay same way as store commands Fixed by making sure flush_all delay is converted to milliseconds after passing through the UNIX time check. --- .../server/core/AbstractProtocolDecoder.scala | 2 +- .../server/memcached/MemcachedDecoder.scala | 2 +- .../server/memcached/MemcachedFunctionalTest.scala | 13 ++++++++++--- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/server/core/src/main/scala/org/infinispan/server/core/AbstractProtocolDecoder.scala b/server/core/src/main/scala/org/infinispan/server/core/AbstractProtocolDecoder.scala index 58ae53c4a24c..f445113b8e59 100644 --- a/server/core/src/main/scala/org/infinispan/server/core/AbstractProtocolDecoder.scala +++ b/server/core/src/main/scala/org/infinispan/server/core/AbstractProtocolDecoder.scala @@ -222,7 +222,7 @@ abstract class AbstractProtocolDecoder[K, V <: CacheValue] extends Decoder { * Otherwise it's just considered number of seconds from * now and it's returned in milliseconds unit. */ - private def toMillis(lifespan: Int): Long = { + protected def toMillis(lifespan: Int): Long = { if (lifespan > SecondsInAMonth) { val unixTimeExpiry = TimeUnit.SECONDS.toMillis(lifespan) - System.currentTimeMillis if (unixTimeExpiry < 0) 0 else unixTimeExpiry diff --git a/server/memcached/src/main/scala/org/infinispan/server/memcached/MemcachedDecoder.scala b/server/memcached/src/main/scala/org/infinispan/server/memcached/MemcachedDecoder.scala index 0600b04aa390..d09f2bef466e 100644 --- a/server/memcached/src/main/scala/org/infinispan/server/memcached/MemcachedDecoder.scala +++ b/server/memcached/src/main/scala/org/infinispan/server/memcached/MemcachedDecoder.scala @@ -286,7 +286,7 @@ class MemcachedDecoder(cache: Cache[String, MemcachedValue], scheduler: Schedule if (flushDelay == 0) flushFunction(cache.getAdvancedCache) else - scheduler.schedule(new DelayedFlushAll(cache, flushFunction), flushDelay, TimeUnit.SECONDS) + scheduler.schedule(new DelayedFlushAll(cache, flushFunction), toMillis(flushDelay), TimeUnit.MILLISECONDS) if (params == None || !params.get.noReply) OK else null } case VersionRequest => new StringBuilder().append("VERSION ").append(Version.version).append(CRLF) diff --git a/server/memcached/src/test/scala/org/infinispan/server/memcached/MemcachedFunctionalTest.scala b/server/memcached/src/test/scala/org/infinispan/server/memcached/MemcachedFunctionalTest.scala index e05a76a08d5e..5018b30ded60 100644 --- a/server/memcached/src/test/scala/org/infinispan/server/memcached/MemcachedFunctionalTest.scala +++ b/server/memcached/src/test/scala/org/infinispan/server/memcached/MemcachedFunctionalTest.scala @@ -337,7 +337,14 @@ class MemcachedFunctionalTest extends MemcachedSingleNodeTest { } } - def testFlushAllDelayed(m: Method) { + def testFlushAllDelayed(m: Method) = flushAllDelayed(m, 2, 2200) + + def testFlushAllDelayedUnixTime(m: Method) { + val delay: Int = TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis + 2000).asInstanceOf[Int] + flushAllDelayed(m, delay, 2200) + } + + private def flushAllDelayed(m: Method, delay: Int, sleep: Long) { for (i <- 1 to 5) { val key = k(m, "k" + i + "-"); val value = v(m, "v" + i + "-"); @@ -346,10 +353,10 @@ class MemcachedFunctionalTest extends MemcachedSingleNodeTest { assertEquals(client.get(key), value) } - val f = client.flush(2); + val f = client.flush(delay); assertTrue(f.get(timeout, TimeUnit.SECONDS).booleanValue) - sleepThread(2200); + sleepThread(sleep); for (i <- 1 to 5) { val key = k(m, "k" + i + "-");