mirror of
https://github.com/moodle/moodle.git
synced 2025-07-27 01:10:51 +02:00
MDL-58018 core: add support to redis for read-only sessions
This commit is contained in:
@@ -255,9 +255,11 @@ class redis extends handler {
|
||||
*/
|
||||
public function handler_read($id) {
|
||||
try {
|
||||
if ($this->requires_write_lock()) {
|
||||
$this->lock_session($id);
|
||||
}
|
||||
$sessiondata = $this->connection->get($id);
|
||||
if ($sessiondata === false) {
|
||||
if ($sessiondata === false && $this->requires_write_lock()) {
|
||||
$this->unlock_session($id);
|
||||
return '';
|
||||
}
|
||||
|
@@ -94,6 +94,7 @@ class core_session_redis_testcase extends advanced_testcase {
|
||||
public function test_normal_session_start_stop_works() {
|
||||
$sess = new \core\session\redis();
|
||||
$sess->init();
|
||||
$sess->set_requires_write_lock(true);
|
||||
$this->assertTrue($sess->handler_open('Not used', 'Not used'));
|
||||
$this->assertSame('', $sess->handler_read('sess1'));
|
||||
$this->assertTrue($sess->handler_write('sess1', 'DATA'));
|
||||
@@ -110,6 +111,7 @@ class core_session_redis_testcase extends advanced_testcase {
|
||||
public function test_session_blocks_with_existing_session() {
|
||||
$sess = new \core\session\redis();
|
||||
$sess->init();
|
||||
$sess->set_requires_write_lock(true);
|
||||
$this->assertTrue($sess->handler_open('Not used', 'Not used'));
|
||||
$this->assertSame('', $sess->handler_read('sess1'));
|
||||
$this->assertTrue($sess->handler_write('sess1', 'DATA'));
|
||||
@@ -121,6 +123,7 @@ class core_session_redis_testcase extends advanced_testcase {
|
||||
|
||||
$sessblocked = new \core\session\redis();
|
||||
$sessblocked->init();
|
||||
$sessblocked->set_requires_write_lock(true);
|
||||
$this->assertTrue($sessblocked->handler_open('Not used', 'Not used'));
|
||||
|
||||
// Trap the error log and send it to stdOut so we can expect output at the right times.
|
||||
@@ -143,6 +146,7 @@ class core_session_redis_testcase extends advanced_testcase {
|
||||
public function test_session_is_destroyed_when_it_does_not_exist() {
|
||||
$sess = new \core\session\redis();
|
||||
$sess->init();
|
||||
$sess->set_requires_write_lock(true);
|
||||
$this->assertTrue($sess->handler_open('Not used', 'Not used'));
|
||||
$this->assertTrue($sess->handler_destroy('sess-destroy'));
|
||||
$this->assertSessionNoLocks();
|
||||
@@ -151,6 +155,7 @@ class core_session_redis_testcase extends advanced_testcase {
|
||||
public function test_session_is_destroyed_when_we_have_it_open() {
|
||||
$sess = new \core\session\redis();
|
||||
$sess->init();
|
||||
$sess->set_requires_write_lock(true);
|
||||
$this->assertTrue($sess->handler_open('Not used', 'Not used'));
|
||||
$this->assertSame('', $sess->handler_read('sess-destroy'));
|
||||
$this->assertTrue($sess->handler_destroy('sess-destroy'));
|
||||
@@ -160,8 +165,10 @@ class core_session_redis_testcase extends advanced_testcase {
|
||||
|
||||
public function test_multiple_sessions_do_not_interfere_with_each_other() {
|
||||
$sess1 = new \core\session\redis();
|
||||
$sess1->set_requires_write_lock(true);
|
||||
$sess1->init();
|
||||
$sess2 = new \core\session\redis();
|
||||
$sess2->set_requires_write_lock(true);
|
||||
$sess2->init();
|
||||
|
||||
// Initialize session 1.
|
||||
@@ -203,6 +210,7 @@ class core_session_redis_testcase extends advanced_testcase {
|
||||
public function test_multiple_sessions_work_with_a_single_instance() {
|
||||
$sess = new \core\session\redis();
|
||||
$sess->init();
|
||||
$sess->set_requires_write_lock(true);
|
||||
|
||||
// Initialize session 1.
|
||||
$this->assertTrue($sess->handler_open('Not used', 'Not used'));
|
||||
@@ -223,6 +231,7 @@ class core_session_redis_testcase extends advanced_testcase {
|
||||
public function test_session_exists_returns_valid_values() {
|
||||
$sess = new \core\session\redis();
|
||||
$sess->init();
|
||||
$sess->set_requires_write_lock(true);
|
||||
|
||||
$this->assertTrue($sess->handler_open('Not used', 'Not used'));
|
||||
$this->assertSame('', $sess->handler_read('sess1'));
|
||||
|
Reference in New Issue
Block a user