From f7c13d399639b549da0c37933391c8dcd9f1f5ad Mon Sep 17 00:00:00 2001 From: Ilya Tregubov Date: Wed, 3 Apr 2019 16:47:52 +1100 Subject: [PATCH] MDL-65249 Session: Throw exception if number of attempts exceeded. --- lib/classes/session/redis.php | 8 ++++---- lib/tests/session_redis_test.php | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/lib/classes/session/redis.php b/lib/classes/session/redis.php index a669996e764..d4758675de0 100644 --- a/lib/classes/session/redis.php +++ b/lib/classes/session/redis.php @@ -199,9 +199,7 @@ class redis extends handler { $logstring = "Failed to connect (try {$counter} out of {$maxnumberofretries}) to redis "; $logstring .= "at {$this->host}:{$this->port}, error returned was: {$e->getMessage()}"; - // @codingStandardsIgnoreStart - error_log($logstring); - // @codingStandardsIgnoreEnd + debugging($logstring); } $counter++; @@ -211,7 +209,9 @@ class redis extends handler { } // We have exhausted our retries, time to give up. - return false; + if (isset($logstring)) { + throw new RedisException($logstring); + } } /** diff --git a/lib/tests/session_redis_test.php b/lib/tests/session_redis_test.php index 316b41ea60b..45a17ed15f5 100644 --- a/lib/tests/session_redis_test.php +++ b/lib/tests/session_redis_test.php @@ -270,6 +270,24 @@ class core_session_redis_testcase extends advanced_testcase { $this->assertEmpty($this->redis->keys($this->keyprefix.'*'), 'There should be no session data left.'); } + public function test_exception_when_connection_attempts_exceeded() { + global $CFG; + + $CFG->session_redis_port = 111111; + $actual = ''; + + $sess = new \core\session\redis(); + try { + $sess->init(); + } catch (RedisException $e) { + $actual = $e->getMessage(); + } + + $expected = 'Failed to connect (try 5 out of 5) to redis at 127.0.0.1:111111'; + $this->assertDebuggingCalledCount(5); + $this->assertContains($expected, $actual); + } + /** * Assert that we don't have any session locks in Redis. */