From d1a142ebe89fc1c5ad0918a2895176b1ffb9a31b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?W=C5=82odzimierz=20Gajda?= Date: Mon, 9 Jul 2012 08:53:41 +0200 Subject: [PATCH] Issue #4719 - (Redis and Memcached fixes and test) --- .../Profiler/BaseMemcacheProfilerStorage.php | 29 ++++++++++++------- .../Profiler/RedisProfilerStorage.php | 29 ++++++++++++------- .../Profiler/AbstractProfilerStorageTest.php | 16 ++++++++++ 3 files changed, 52 insertions(+), 22 deletions(-) diff --git a/src/Symfony/Component/HttpKernel/Profiler/BaseMemcacheProfilerStorage.php b/src/Symfony/Component/HttpKernel/Profiler/BaseMemcacheProfilerStorage.php index ebf19127f2..c4e259aa84 100644 --- a/src/Symfony/Component/HttpKernel/Profiler/BaseMemcacheProfilerStorage.php +++ b/src/Symfony/Component/HttpKernel/Profiler/BaseMemcacheProfilerStorage.php @@ -153,20 +153,27 @@ abstract class BaseMemcacheProfilerStorage implements ProfilerStorageInterface 'time' => $profile->getTime(), ); + $profileIndexed = false !== $this->getValue($this->getItemName($profile->getToken())); + if ($this->setValue($this->getItemName($profile->getToken()), $data, $this->lifetime)) { - // Add to index - $indexName = $this->getIndexName(); - $indexRow = implode("\t", array( - $profile->getToken(), - $profile->getIp(), - $profile->getMethod(), - $profile->getUrl(), - $profile->getTime(), - $profile->getParentToken(), - ))."\n"; + if (!$profileIndexed) { + // Add to index + $indexName = $this->getIndexName(); - return $this->appendValue($indexName, $indexRow, $this->lifetime); + $indexRow = implode("\t", array( + $profile->getToken(), + $profile->getIp(), + $profile->getMethod(), + $profile->getUrl(), + $profile->getTime(), + $profile->getParentToken(), + ))."\n"; + + return $this->appendValue($indexName, $indexRow, $this->lifetime); + } + + return true; } return false; diff --git a/src/Symfony/Component/HttpKernel/Profiler/RedisProfilerStorage.php b/src/Symfony/Component/HttpKernel/Profiler/RedisProfilerStorage.php index f7e5f3c8ff..ec8ad1f160 100644 --- a/src/Symfony/Component/HttpKernel/Profiler/RedisProfilerStorage.php +++ b/src/Symfony/Component/HttpKernel/Profiler/RedisProfilerStorage.php @@ -167,20 +167,27 @@ class RedisProfilerStorage implements ProfilerStorageInterface 'time' => $profile->getTime(), ); + $profileIndexed = false !== $this->getValue($this->getItemName($profile->getToken())); + if ($this->setValue($this->getItemName($profile->getToken()), $data, $this->lifetime, self::REDIS_SERIALIZER_PHP)) { - // Add to index - $indexName = $this->getIndexName(); - $indexRow = implode("\t", array( - $profile->getToken(), - $profile->getIp(), - $profile->getMethod(), - $profile->getUrl(), - $profile->getTime(), - $profile->getParentToken(), - ))."\n"; + if (!$profileIndexed) { + // Add to index + $indexName = $this->getIndexName(); - return $this->appendValue($indexName, $indexRow, $this->lifetime); + $indexRow = implode("\t", array( + $profile->getToken(), + $profile->getIp(), + $profile->getMethod(), + $profile->getUrl(), + $profile->getTime(), + $profile->getParentToken(), + ))."\n"; + + return $this->appendValue($indexName, $indexRow, $this->lifetime); + } + + return true; } return false; diff --git a/src/Symfony/Component/HttpKernel/Tests/Profiler/AbstractProfilerStorageTest.php b/src/Symfony/Component/HttpKernel/Tests/Profiler/AbstractProfilerStorageTest.php index 15bcc39edb..62f24ce87a 100644 --- a/src/Symfony/Component/HttpKernel/Tests/Profiler/AbstractProfilerStorageTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/Profiler/AbstractProfilerStorageTest.php @@ -209,6 +209,22 @@ abstract class AbstractProfilerStorageTest extends \PHPUnit_Framework_TestCase $this->assertCount(0, $this->getStorage()->find('127.0.0.1', '', 10, 'GET'), '->purge() removes all items from index'); } + public function testDuplicates() + { + for ($i = 1; $i <= 5; $i++) { + $profile = new Profile('foo' . $i); + $profile->setIp('127.0.0.1'); + $profile->setUrl('http://example.net/'); + $profile->setMethod('GET'); + + ///three duplicates + $this->getStorage()->write($profile); + $this->getStorage()->write($profile); + $this->getStorage()->write($profile); + } + $this->assertCount(3, $this->getStorage()->find('127.0.0.1', 'http://example.net/', 3, 'GET'), '->find() method returns incorrect number of entries'); + } + /** * @return \Symfony\Component\HttpKernel\Profiler\ProfilerStorageInterface */