Uploaded image for project: 'Moodle'
  1. Moodle
  2. MDL-68608

Improve the readonly session debugging message

XMLWordPrintable

    • MOODLE_311_STABLE, MOODLE_400_STABLE
    • MOODLE_311_STABLE
    • MDL-68608-improve-readonly-debugging
    • Hide

      1) Tail the logs:

      tail -f /var/log/apache2/error.log
      

      2) Download the attached file - MDL-68608-readonly-debugging.php - and put it in your site root.

      3) Access the file and confirm there are no errors or exceptions in the tailed logs

      4) Enable debugging and reload MDL-68608-readonly-debugging.php

      5) Confirm that you do see errors showing what would have been written in the session (again, in the tailed logs)

      6) Turn off debugging (set it to 'Normal' or disabled entirely), and set this in config.php:

      $CFG->enable_read_only_sessions_debug = true;

      7) Check the tailed logs and confirm that you do see errors showing what would have been written in the session, eg

      Script /cache/admin.php defined READ_ONLY_SESSION but the following SESSION attributes were changed: $SESSION->cachestore_session

      8) Now fully turn on readonly sessions:

      $CFG->enable_read_only_sessions = true;

      At the moment the session cache is still stored in the session which is incompatible with readonly sessions, so this should be a hard failure.

      9) Confirm that any page load results in an exception and the UI shows the red error box hard kills the whole site, and explains clearly what is wrong and how to fix it.

      10) Confirm this exception is shown on all pages, eg home / dashboard

      11) Disable readonly session (via config.php) so the site works again

      12) Visit the cache admin page (/cache/admin.php) and configure a redis cache store instance:

      https://docs.moodle.org/310/en/Redis_cache_store

      You can very simply run redis like so:

      docker run --net=host -d redis 

      Then you'll need to create an instance of the redis cache store via the /cache/admin.php page. Use 'localhost' for the server and leave everything else default.

      13) Scroll down to the end of the cache configuration page and click 'Edit mappings'. Change the session from default to use redis

      14) To flush all the session caches logout or kill all sessions:

      php admin/cli/kill_all_sessions.php

      15) Now re-enable readonly sessions again:

      $CFG->enable_read_only_sessions = true;

      16) Confirm that the site homepage now loads and does not throw an exception or emit any debugging

      Show
      1) Tail the logs: tail -f /var/log/apache2/error.log 2) Download the attached file - MDL-68608 -readonly-debugging.php - and put it in your site root. 3) Access the file and confirm there are no errors or exceptions in the tailed logs 4) Enable debugging and reload  MDL-68608 -readonly-debugging.php 5) Confirm that you do see errors showing what would have been written in the session (again, in the tailed logs) 6) Turn off debugging (set it to 'Normal' or disabled entirely), and set this in config.php: $CFG->enable_read_only_sessions_debug = true; 7) Check the tailed logs and confirm that you do see errors showing what would have been written in the session, eg Script /cache/admin.php defined READ_ONLY_SESSION but the following SESSION attributes were changed: $SESSION->cachestore_session 8) Now fully turn on readonly sessions: $CFG->enable_read_only_sessions = true; At the moment the session cache is still stored in the session which is incompatible with readonly sessions, so this should be a hard failure. 9) Confirm that any page load results in an exception and the UI shows the red error box hard kills the whole site, and explains clearly what is wrong and how to fix it. 10) Confirm this exception is shown on all pages, eg home / dashboard 11) Disable readonly session (via config.php) so the site works again 12) Visit the cache admin page (/cache/admin.php) and configure a redis cache store instance: https://docs.moodle.org/310/en/Redis_cache_store You can very simply run redis like so: docker run --net=host -d redis Then you'll need to create an instance of the redis cache store via the /cache/admin.php page. Use 'localhost' for the server and leave everything else default. 13) Scroll down to the end of the cache configuration page and click 'Edit mappings'. Change the session from default to use redis 14) To flush all the session caches logout or kill all sessions: php admin/cli/kill_all_sessions.php 15) Now re-enable readonly sessions again: $CFG->enable_read_only_sessions = true; 16) Confirm that the site homepage now loads and does not throw an exception or emit any debugging

      The warning when a page mutates the session doesn't quite have enough info in it to be useful. In theory every instance of this debugging call should end up as a new tracker so we want the error message to be reasonably verbose and contain everything we need to create a tracker and trace down the problem.

            brendanheywood Brendan Heywood
            brendanheywood Brendan Heywood
            Dmitrii Metelkin Dmitrii Metelkin
            Jake Dallimore Jake Dallimore
            Janelle Barcega Janelle Barcega
            Votes:
            1 Vote for this issue
            Watchers:
            11 Start watching this issue

              Created:
              Updated:
              Resolved:

                Estimated:
                Original Estimate - 0 minutes
                0m
                Remaining:
                Remaining Estimate - 0 minutes
                0m
                Logged:
                Time Spent - 3 hours
                3h

                  Error rendering 'clockify-timesheets-time-tracking-reports:timer-sidebar'. Please contact your Jira administrators.