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 7dc7b21f855..770f2edea86 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. */