It appears that one or more of the following are true:
- There are no backup failed notifications
- low disk space notifications
- failure notifications are not working
I have recently experienced a disk space issue where Discourse was left in a Read-only state.
Although backups had failed for a few days before this was the first time it was left read-only.
I had received no notifications of backup errors or disk space issues at all.
In addition I didn’t get any notification again of the “download remote images” option being changed and it didn’t appear in the staff actions log.
https://meta.discourse.org/t/download-remote-images-setting-reset-during-upgrade/20357
I have PM’ed @zogstrip to reopen this one, because it doesn’t appear in any log I can’t tell when this option changed.
I would expect to get some notification when errors with backups occur.
I would not expect the system to be left read-only, although this time around this was the only warning sign there was an issue.
Here is a log you might wish to review:
[STARTED]
'system' has started the backup!
Marking backup as running...
Making sure '/var/www/discourse/tmp/backups/default/2015-01-18-030000' exists...
Making sure '/var/www/discourse/public/backups/default' exists...
Writing metadata to '/var/www/discourse/tmp/backups/default/2015-01-18-030000/meta.json'...
Enabling readonly mode...
Pausing sidekiq...
Waiting for sidekiq to finish running jobs...
Dumping the public schema of the database...
pg_dump: reading schemas
pg_dump: reading user-defined tables
pg_dump: reading extensions
pg_dump: reading user-defined functions
pg_dump: reading user-defined types
pg_dump: reading procedural languages
pg_dump: reading user-defined aggregate functions
pg_dump: reading user-defined operators
pg_dump: reading user-defined operator classes
pg_dump: reading user-defined operator families
pg_dump: reading user-defined text search parsers
pg_dump: reading user-defined text search templates
pg_dump: reading user-defined text search dictionaries
pg_dump: reading user-defined text search configurations
pg_dump: reading user-defined foreign-data wrappers
pg_dump: reading user-defined foreign servers
pg_dump: reading default privileges
pg_dump: reading user-defined collations
pg_dump: reading user-defined conversions
pg_dump: reading type casts
pg_dump: reading table inheritance information
pg_dump: reading event triggers
pg_dump: finding extension members
pg_dump: finding inheritance relationships
pg_dump: reading column info for interesting tables
pg_dump: finding the columns and types of table "schema_migrations"
pg_dump: finding the columns and types of table "topics"
pg_dump: finding default expressions of table "topics"
pg_dump: finding check constraints for table "topics"
pg_dump: finding the columns and types of table "posts"
pg_dump: finding default expressions of table "posts"
pg_dump: finding the columns and types of table "users"
pg_dump: finding default expressions of table "users"
pg_dump: finding the columns and types of table "versions"
pg_dump: finding default expressions of table "versions"
pg_dump: finding the columns and types of table "topic_views"
pg_dump: finding the columns and types of table "uploads"
pg_dump: finding default expressions of table "uploads"
pg_dump: finding the columns and types of table "topic_users"
pg_dump: finding default expressions of table "topic_users"
pg_dump: finding the columns and types of table "topic_links"
pg_dump: finding default expressions of table "topic_links"
pg_dump: finding the columns and types of table "post_timings"
pg_dump: finding the columns and types of table "message_bus"
pg_dump: finding default expressions of table "message_bus"
pg_dump: finding the columns and types of table "notifications"
pg_dump: finding default expressions of table "notifications"
pg_dump: finding the columns and types of table "incoming_links"
pg_dump: finding default expressions of table "incoming_links"
pg_dump: finding the columns and types of table "post_replies"
pg_dump: finding the columns and types of table "categories"
pg_dump: finding default expressions of table "categories"
pg_dump: finding the columns and types of table "category_featured_topics"
pg_dump: finding default expressions of table "category_featured_topics"
pg_dump: finding the columns and types of table "site_settings"
pg_dump: finding default expressions of table "site_settings"
pg_dump: finding the columns and types of table "user_open_ids"
pg_dump: finding default expressions of table "user_open_ids"
pg_dump: finding the columns and types of table "user_actions"
pg_dump: finding default expressions of table "user_actions"
pg_dump: finding the columns and types of table "post_actions"
pg_dump: finding default expressions of table "post_actions"
pg_dump: finding the columns and types of table "post_action_types"
pg_dump: finding default expressions of table "post_action_types"
pg_dump: finding the columns and types of table "topic_link_clicks"
pg_dump: finding default expressions of table "topic_link_clicks"
pg_dump: finding the columns and types of table "category_featured_users"
pg_dump: finding default expressions of table "category_featured_users"
pg_dump: finding the columns and types of table "twitter_user_infos"
pg_dump: finding default expressions of table "twitter_user_infos"
pg_dump: finding the columns and types of table "email_logs"
pg_dump: finding default expressions of table "email_logs"
pg_dump: finding the columns and types of table "topic_allowed_users"
pg_dump: finding default expressions of table "topic_allowed_users"
pg_dump: finding the columns and types of table "facebook_user_infos"
pg_dump: finding default expressions of table "facebook_user_infos"
pg_dump: finding the columns and types of table "invites"
pg_dump: finding default expressions of table "invites"
pg_dump: finding the columns and types of table "topic_invites"
pg_dump: finding default expressions of table "topic_invites"
pg_dump: finding the columns and types of table "user_visits"
pg_dump: finding default expressions of table "user_visits"
pg_dump: finding the columns and types of table "email_tokens"
pg_dump: finding default expressions of table "email_tokens"
pg_dump: finding the columns and types of table "drafts"
pg_dump: finding default expressions of table "drafts"
pg_dump: finding the columns and types of table "site_customizations"
pg_dump: finding default expressions of table "site_customizations"
pg_dump: finding the columns and types of table "draft_sequences"
pg_dump: finding default expressions of table "draft_sequences"
pg_dump: finding the columns and types of table "post_search_data"
pg_dump: finding the columns and types of table "user_search_data"
pg_dump: finding the columns and types of table "category_search_data"
pg_dump: finding the columns and types of table "github_user_infos"
pg_dump: finding default expressions of table "github_user_infos"
pg_dump: finding the columns and types of table "site_texts"
pg_dump: finding the columns and types of table "user_histories"
pg_dump: finding default expressions of table "user_histories"
pg_dump: finding the columns and types of table "groups"
pg_dump: finding default expressions of table "groups"
pg_dump: finding the columns and types of table "group_users"
pg_dump: finding default expressions of table "group_users"
pg_dump: finding the columns and types of table "category_groups"
pg_dump: finding default expressions of table "category_groups"
pg_dump: finding the columns and types of table "topic_allowed_groups"
pg_dump: finding default expressions of table "topic_allowed_groups"
pg_dump: finding the columns and types of table "post_uploads"
pg_dump: finding default expressions of table "post_uploads"
pg_dump: finding the columns and types of table "optimized_images"
pg_dump: finding default expressions of table "optimized_images"
pg_dump: finding the columns and types of table "screened_emails"
pg_dump: finding default expressions of table "screened_emails"
pg_dump: finding the columns and types of table "screened_urls"
pg_dump: finding default expressions of table "screened_urls"
pg_dump: finding the columns and types of table "oauth2_user_infos"
pg_dump: finding default expressions of table "oauth2_user_infos"
pg_dump: finding the columns and types of table "plugin_store_rows"
pg_dump: finding default expressions of table "plugin_store_rows"
pg_dump: finding the columns and types of table "user_stats"
pg_dump: finding default expressions of table "user_stats"
pg_dump: finding the columns and types of table "post_details"
pg_dump: finding default expressions of table "post_details"
pg_dump: finding the columns and types of table "screened_ip_addresses"
pg_dump: finding default expressions of table "screened_ip_addresses"
pg_dump: finding the columns and types of table "api_keys"
pg_dump: finding default expressions of table "api_keys"
pg_dump: finding the columns and types of table "post_revisions"
pg_dump: finding default expressions of table "post_revisions"
pg_dump: finding the columns and types of table "topic_embeds"
pg_dump: finding default expressions of table "topic_embeds"
pg_dump: finding the columns and types of table "top_topics"
pg_dump: finding default expressions of table "top_topics"
pg_dump: finding the columns and types of table "category_users"
pg_dump: finding default expressions of table "category_users"
pg_dump: finding the columns and types of table "single_sign_on_records"
pg_dump: finding default expressions of table "single_sign_on_records"
pg_dump: finding the columns and types of table "badge_types"
pg_dump: finding default expressions of table "badge_types"
pg_dump: finding the columns and types of table "badges"
pg_dump: finding default expressions of table "badges"
pg_dump: finding the columns and types of table "user_badges"
pg_dump: finding default expressions of table "user_badges"
pg_dump: finding the columns and types of table "color_schemes"
pg_dump: finding default expressions of table "color_schemes"
pg_dump: finding the columns and types of table "color_scheme_colors"
pg_dump: finding default expressions of table "color_scheme_colors"
pg_dump: finding the columns and types of table "user_custom_fields"
pg_dump: finding default expressions of table "user_custom_fields"
pg_dump: finding the columns and types of table "category_custom_fields"
pg_dump: finding default expressions of table "category_custom_fields"
pg_dump: finding the columns and types of table "group_custom_fields"
pg_dump: finding default expressions of table "group_custom_fields"
pg_dump: finding the columns and types of table "post_custom_fields"
pg_dump: finding default expressions of table "post_custom_fields"
pg_dump: finding the columns and types of table "topic_custom_fields"
pg_dump: finding default expressions of table "topic_custom_fields"
pg_dump: finding the columns and types of table "invited_groups"
pg_dump: finding default expressions of table "invited_groups"
pg_dump: finding the columns and types of table "google_user_infos"
pg_dump: finding default expressions of table "google_user_infos"
pg_dump: finding the columns and types of table "user_avatars"
pg_dump: finding default expressions of table "user_avatars"
pg_dump: finding the columns and types of table "user_profiles"
pg_dump: finding default expressions of table "user_profiles"
pg_dump: finding the columns and types of table "quoted_posts"
pg_dump: finding default expressions of table "quoted_posts"
pg_dump: finding the columns and types of table "badge_groupings"
pg_dump: finding default expressions of table "badge_groupings"
pg_dump: finding the columns and types of table "incoming_referers"
pg_dump: finding default expressions of table "incoming_referers"
pg_dump: finding the columns and types of table "incoming_domains"
pg_dump: finding default expressions of table "incoming_domains"
pg_dump: finding the columns and types of table "topic_search_data"
pg_dump: finding the columns and types of table "badge_posts"
pg_dump: finding the columns and types of table "permalinks"
pg_dump: finding default expressions of table "permalinks"
pg_dump: finding the columns and types of table "warnings"
pg_dump: finding default expressions of table "warnings"
pg_dump: finding the columns and types of table "user_fields"
pg_dump: finding default expressions of table "user_fields"
pg_dump: finding the columns and types of table "user_exports"
pg_dump: finding default expressions of table "user_exports"
pg_dump: flagging inherited columns in subtables
pg_dump: reading indexes
pg_dump: reading indexes for table "schema_migrations"
pg_dump: reading indexes for table "topics"
pg_dump: reading indexes for table "posts"
pg_dump: reading indexes for table "users"
pg_dump: reading indexes for table "versions"
pg_dump: reading indexes for table "topic_views"
pg_dump: reading indexes for table "uploads"
pg_dump: reading indexes for table "topic_users"
pg_dump: reading indexes for table "topic_links"
pg_dump: reading indexes for table "post_timings"
pg_dump: reading indexes for table "message_bus"
pg_dump: reading indexes for table "notifications"
pg_dump: reading indexes for table "incoming_links"
pg_dump: reading indexes for table "post_replies"
pg_dump: reading indexes for table "categories"
pg_dump: reading indexes for table "category_featured_topics"
pg_dump: reading indexes for table "site_settings"
pg_dump: reading indexes for table "user_open_ids"
pg_dump: reading indexes for table "user_actions"
pg_dump: reading indexes for table "post_actions"
pg_dump: reading indexes for table "post_action_types"
pg_dump: reading indexes for table "topic_link_clicks"
pg_dump: reading indexes for table "category_featured_users"
pg_dump: reading indexes for table "twitter_user_infos"
pg_dump: reading indexes for table "email_logs"
pg_dump: reading indexes for table "topic_allowed_users"
pg_dump: reading indexes for table "facebook_user_infos"
pg_dump: reading indexes for table "invites"
pg_dump: reading indexes for table "topic_invites"
pg_dump: reading indexes for table "user_visits"
pg_dump: reading indexes for table "email_tokens"
pg_dump: reading indexes for table "drafts"
pg_dump: reading indexes for table "site_customizations"
pg_dump: reading indexes for table "draft_sequences"
pg_dump: reading indexes for table "post_search_data"
pg_dump: reading indexes for table "user_search_data"
pg_dump: reading indexes for table "category_search_data"
pg_dump: reading indexes for table "github_user_infos"
pg_dump: reading indexes for table "site_texts"
pg_dump: reading indexes for table "user_histories"
pg_dump: reading indexes for table "groups"
pg_dump: reading indexes for table "group_users"
pg_dump: reading indexes for table "category_groups"
pg_dump: reading indexes for table "topic_allowed_groups"
pg_dump: reading indexes for table "post_uploads"
pg_dump: reading indexes for table "optimized_images"
pg_dump: reading indexes for table "screened_emails"
pg_dump: reading indexes for table "screened_urls"
pg_dump: reading indexes for table "oauth2_user_infos"
...
pg_dump: executing SEQUENCE SET plugin_store_rows_id_seq
pg_dump: processing data for table "post_action_types"
pg_dump: dumping contents of table post_action_types
pg_dump: executing SEQUENCE SET post_action_types_id_seq
pg_dump: processing data for table "post_actions"
pg_dump: dumping contents of table post_actions
pg_dump: executing SEQUENCE SET post_actions_id_seq
pg_dump: processing data for table "post_custom_fields"
pg_dump: dumping contents of table post_custom_fields
pg_dump: executing SEQUENCE SET post_custom_fields_id_seq
pg_dump: processing data for table "post_details"
pg_dump: dumping contents of table post_details
pg_dump: executing SEQUENCE SET post_details_id_seq
pg_dump: processing data for table "post_replies"
pg_dump: dumping contents of table post_replies
pg_dump: processing data for table "post_revisions"
pg_dump: dumping contents of table post_revisions
pg_dump: executing SEQUENCE SET post_revisions_id_seq
pg_dump: processing data for table "post_search_data"
pg_dump: dumping contents of table post_search_data
pg_dump: processing data for table "post_timings"
pg_dump: dumping contents of table post_timings
pg_dump: processing data for table "post_uploads"
pg_dump: dumping contents of table post_uploads
pg_dump: executing SEQUENCE SET post_uploads_id_seq
pg_dump: processing data for table "posts"
pg_dump: dumping contents of table posts
pg_dump: [archiver] could not write to output file: No space left on device
EXCEPTION: pg_dump failed
/var/www/discourse/lib/backup_restore/backuper.rb:171:in `dump_public_schema'
/var/www/discourse/lib/backup_restore/backuper.rb:37:in `run'
/var/www/discourse/lib/backup_restore/backup_restore.rb:161:in `block in start!'
/var/www/discourse/lib/backup_restore/backup_restore.rb:158:in `fork'
/var/www/discourse/lib/backup_restore/backup_restore.rb:158:in `start!'
/var/www/discourse/lib/backup_restore/backup_restore.rb:13:in `backup!'
/var/www/discourse/app/jobs/scheduled/create_backup.rb:10:in `execute'
/var/www/discourse/app/jobs/base.rb:153:in `block (2 levels) in perform'
Notifying 'system' of the end of the backup...
Cleaning stuff up...
Removing tmp '/var/www/discourse/tmp/backups/default/2015-01-18-030000' directory...
Unpausing sidekiq...
Something went wrong while unpausing Sidekiq.
Disabling readonly mode...
--------------------------------------------
---------------- EXCEPTION -----------------
MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.
/var/www/discourse/vendor/bundle/ruby/2.0.0/gems/redis-3.2.0/lib/redis/client.rb:110:in `call'
/var/www/discourse/vendor/bundle/ruby/2.0.0/gems/redis-3.2.0/lib/redis.rb:416:in `block in del'
/var/www/discourse/vendor/bundle/ruby/2.0.0/gems/redis-3.2.0/lib/redis.rb:37:in `block in synchronize'
/usr/local/lib/ruby/2.0.0/monitor.rb:211:in `mon_synchronize'
/var/www/discourse/vendor/bundle/ruby/2.0.0/gems/redis-3.2.0/lib/redis.rb:37:in `synchronize'
/var/www/discourse/vendor/bundle/ruby/2.0.0/gems/redis-3.2.0/lib/redis.rb:415:in `del'
/var/www/discourse/lib/discourse_redis.rb:63:in `del'
/var/www/discourse/lib/discourse.rb:177:in `disable_readonly_mode'
/var/www/discourse/lib/backup_restore/backuper.rb:310:in `disable_readonly_mode'
/var/www/discourse/lib/backup_restore/backuper.rb:288:in `clean_up'
/var/www/discourse/lib/backup_restore/backuper.rb:61:in `run'
/var/www/discourse/lib/backup_restore/backup_restore.rb:161:in `block in start!'
/var/www/discourse/lib/backup_restore/backup_restore.rb:158:in `fork'
/var/www/discourse/lib/backup_restore/backup_restore.rb:158:in `start!'
/var/www/discourse/lib/backup_restore/backup_restore.rb:13:in `backup!'
/var/www/discourse/app/jobs/scheduled/create_backup.rb:10:in `execute'
/var/www/discourse/app/jobs/base.rb:153:in `block (2 levels) in perform'
--------------------------------------------
============================================
================ EXCEPTION =================
MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.
/var/www/discourse/vendor/bundle/ruby/2.0.0/gems/redis-3.2.0/lib/redis/client.rb:110:in `call'
/var/www/discourse/vendor/bundle/ruby/2.0.0/gems/redis-3.2.0/lib/redis.rb:416:in `block in del'
/var/www/discourse/vendor/bundle/ruby/2.0.0/gems/redis-3.2.0/lib/redis.rb:37:in `block in synchronize'
/usr/local/lib/ruby/2.0.0/monitor.rb:211:in `mon_synchronize'
/var/www/discourse/vendor/bundle/ruby/2.0.0/gems/redis-3.2.0/lib/redis.rb:37:in `synchronize'
/var/www/discourse/vendor/bundle/ruby/2.0.0/gems/redis-3.2.0/lib/redis.rb:415:in `del'
/var/www/discourse/lib/discourse_redis.rb:63:in `del'
/var/www/discourse/lib/backup_restore/backup_restore.rb:141:in `clear_shutdown_signal!'
/var/www/discourse/lib/backup_restore/backup_restore.rb:170:in `block in start!'
/var/www/discourse/lib/backup_restore/backup_restore.rb:158:in `fork'
/var/www/discourse/lib/backup_restore/backup_restore.rb:158:in `start!'
/var/www/discourse/lib/backup_restore/backup_restore.rb:13:in `backup!'
/var/www/discourse/app/jobs/scheduled/create_backup.rb:10:in `execute'
/var/www/discourse/app/jobs/base.rb:153:in `block (2 levels) in perform'
============================================
Sidekiq heartbeat test failed, restarting
The difference between the backup that apparently left the instance in read-only mode and that of the days previous appears to be just these extra lines in the latest log:
/var/www/discourse/lib/backup_restore/backup_restore.rb:158:in `start!'
/var/www/discourse/lib/backup_restore/backup_restore.rb:13:in `backup!'
/var/www/discourse/app/jobs/scheduled/create_backup.rb:10:in `execute'
/var/www/discourse/app/jobs/base.rb:153:in `block (2 levels) in perform'
Notifying 'system' of the end of the backup...
Cleaning stuff up...
Removing tmp '/var/www/discourse/tmp/backups/default/2015-01-18-030000' directory...
Unpausing sidekiq...
Something went wrong while unpausing Sidekiq.
Disabling readonly mode...
--------------------------------------------
---------------- EXCEPTION -----------------
MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.
/var/www/discourse/vendor/bundle/ruby/2.0.0/gems/redis-3.2.0/lib/redis/client.rb:110:in `call'
/var/www/discourse/vendor/bundle/ruby/2.0.0/gems/redis-3.2.0/lib/redis.rb:416:in `block in del'
/var/www/discourse/vendor/bundle/ruby/2.0.0/gems/redis-3.2.0/lib/redis.rb:37:in `block in synchronize'
/usr/local/lib/ruby/2.0.0/monitor.rb:211:in `mon_synchronize'
/var/www/discourse/vendor/bundle/ruby/2.0.0/gems/redis-3.2.0/lib/redis.rb:37:in `synchronize'
/var/www/discourse/vendor/bundle/ruby/2.0.0/gems/redis-3.2.0/lib/redis.rb:415:in `del'
/var/www/discourse/lib/discourse_redis.rb:63:in `del'
/var/www/discourse/lib/discourse.rb:177:in `disable_readonly_mode'
/var/www/discourse/lib/backup_restore/backuper.rb:310:in `disable_readonly_mode'
/var/www/discourse/lib/backup_restore/backuper.rb:288:in `clean_up'
/var/www/discourse/lib/backup_restore/backuper.rb:61:in `run'
/var/www/discourse/lib/backup_restore/backup_restore.rb:161:in `block in start!'
/var/www/discourse/lib/backup_restore/backup_restore.rb:158:in `fork'
/var/www/discourse/lib/backup_restore/backup_restore.rb:158:in `start!'
/var/www/discourse/lib/backup_restore/backup_restore.rb:13:in `backup!'
/var/www/discourse/app/jobs/scheduled/create_backup.rb:10:in `execute'
/var/www/discourse/app/jobs/base.rb:153:in `block (2 levels) in perform'
--------------------------------------------
============================================
================ EXCEPTION =================
MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.
/var/www/discourse/vendor/bundle/ruby/2.0.0/gems/redis-3.2.0/lib/redis/client.rb:110:in `call'
/var/www/discourse/vendor/bundle/ruby/2.0.0/gems/redis-3.2.0/lib/redis.rb:416:in `block in del'
/var/www/discourse/vendor/bundle/ruby/2.0.0/gems/redis-3.2.0/lib/redis.rb:37:in `block in synchronize'
/usr/local/lib/ruby/2.0.0/monitor.rb:211:in `mon_synchronize'
/var/www/discourse/vendor/bundle/ruby/2.0.0/gems/redis-3.2.0/lib/redis.rb:37:in `synchronize'
/var/www/discourse/vendor/bundle/ruby/2.0.0/gems/redis-3.2.0/lib/redis.rb:415:in `del'
/var/www/discourse/lib/discourse_redis.rb:63:in `del'
/var/www/discourse/lib/backup_restore/backup_restore.rb:141:in `clear_shutdown_signal!'
/var/www/discourse/lib/backup_restore/backup_restore.rb:170:in `block in start!'
/var/www/discourse/lib/backup_restore/backup_restore.rb:158:in `fork'
/var/www/discourse/lib/backup_restore/backup_restore.rb:158:in `start!'
/var/www/discourse/lib/backup_restore/backup_restore.rb:13:in `backup!'
/var/www/discourse/app/jobs/scheduled/create_backup.rb:10:in `execute'
/var/www/discourse/app/jobs/base.rb:153:in `block (2 levels) in perform'
============================================
Sidekiq heartbeat test failed, restarting