mirror of
https://github.com/moodle/moodle.git
synced 2025-07-27 09:20:36 +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) {
|
public function handler_read($id) {
|
||||||
try {
|
try {
|
||||||
|
if ($this->requires_write_lock()) {
|
||||||
$this->lock_session($id);
|
$this->lock_session($id);
|
||||||
|
}
|
||||||
$sessiondata = $this->connection->get($id);
|
$sessiondata = $this->connection->get($id);
|
||||||
if ($sessiondata === false) {
|
if ($sessiondata === false && $this->requires_write_lock()) {
|
||||||
$this->unlock_session($id);
|
$this->unlock_session($id);
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
@@ -94,6 +94,7 @@ class core_session_redis_testcase extends advanced_testcase {
|
|||||||
public function test_normal_session_start_stop_works() {
|
public function test_normal_session_start_stop_works() {
|
||||||
$sess = new \core\session\redis();
|
$sess = new \core\session\redis();
|
||||||
$sess->init();
|
$sess->init();
|
||||||
|
$sess->set_requires_write_lock(true);
|
||||||
$this->assertTrue($sess->handler_open('Not used', 'Not used'));
|
$this->assertTrue($sess->handler_open('Not used', 'Not used'));
|
||||||
$this->assertSame('', $sess->handler_read('sess1'));
|
$this->assertSame('', $sess->handler_read('sess1'));
|
||||||
$this->assertTrue($sess->handler_write('sess1', 'DATA'));
|
$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() {
|
public function test_session_blocks_with_existing_session() {
|
||||||
$sess = new \core\session\redis();
|
$sess = new \core\session\redis();
|
||||||
$sess->init();
|
$sess->init();
|
||||||
|
$sess->set_requires_write_lock(true);
|
||||||
$this->assertTrue($sess->handler_open('Not used', 'Not used'));
|
$this->assertTrue($sess->handler_open('Not used', 'Not used'));
|
||||||
$this->assertSame('', $sess->handler_read('sess1'));
|
$this->assertSame('', $sess->handler_read('sess1'));
|
||||||
$this->assertTrue($sess->handler_write('sess1', 'DATA'));
|
$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 = new \core\session\redis();
|
||||||
$sessblocked->init();
|
$sessblocked->init();
|
||||||
|
$sessblocked->set_requires_write_lock(true);
|
||||||
$this->assertTrue($sessblocked->handler_open('Not used', 'Not used'));
|
$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.
|
// 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() {
|
public function test_session_is_destroyed_when_it_does_not_exist() {
|
||||||
$sess = new \core\session\redis();
|
$sess = new \core\session\redis();
|
||||||
$sess->init();
|
$sess->init();
|
||||||
|
$sess->set_requires_write_lock(true);
|
||||||
$this->assertTrue($sess->handler_open('Not used', 'Not used'));
|
$this->assertTrue($sess->handler_open('Not used', 'Not used'));
|
||||||
$this->assertTrue($sess->handler_destroy('sess-destroy'));
|
$this->assertTrue($sess->handler_destroy('sess-destroy'));
|
||||||
$this->assertSessionNoLocks();
|
$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() {
|
public function test_session_is_destroyed_when_we_have_it_open() {
|
||||||
$sess = new \core\session\redis();
|
$sess = new \core\session\redis();
|
||||||
$sess->init();
|
$sess->init();
|
||||||
|
$sess->set_requires_write_lock(true);
|
||||||
$this->assertTrue($sess->handler_open('Not used', 'Not used'));
|
$this->assertTrue($sess->handler_open('Not used', 'Not used'));
|
||||||
$this->assertSame('', $sess->handler_read('sess-destroy'));
|
$this->assertSame('', $sess->handler_read('sess-destroy'));
|
||||||
$this->assertTrue($sess->handler_destroy('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() {
|
public function test_multiple_sessions_do_not_interfere_with_each_other() {
|
||||||
$sess1 = new \core\session\redis();
|
$sess1 = new \core\session\redis();
|
||||||
|
$sess1->set_requires_write_lock(true);
|
||||||
$sess1->init();
|
$sess1->init();
|
||||||
$sess2 = new \core\session\redis();
|
$sess2 = new \core\session\redis();
|
||||||
|
$sess2->set_requires_write_lock(true);
|
||||||
$sess2->init();
|
$sess2->init();
|
||||||
|
|
||||||
// Initialize session 1.
|
// 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() {
|
public function test_multiple_sessions_work_with_a_single_instance() {
|
||||||
$sess = new \core\session\redis();
|
$sess = new \core\session\redis();
|
||||||
$sess->init();
|
$sess->init();
|
||||||
|
$sess->set_requires_write_lock(true);
|
||||||
|
|
||||||
// Initialize session 1.
|
// Initialize session 1.
|
||||||
$this->assertTrue($sess->handler_open('Not used', 'Not used'));
|
$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() {
|
public function test_session_exists_returns_valid_values() {
|
||||||
$sess = new \core\session\redis();
|
$sess = new \core\session\redis();
|
||||||
$sess->init();
|
$sess->init();
|
||||||
|
$sess->set_requires_write_lock(true);
|
||||||
|
|
||||||
$this->assertTrue($sess->handler_open('Not used', 'Not used'));
|
$this->assertTrue($sess->handler_open('Not used', 'Not used'));
|
||||||
$this->assertSame('', $sess->handler_read('sess1'));
|
$this->assertSame('', $sess->handler_read('sess1'));
|
||||||
|
Reference in New Issue
Block a user