From bc4010fe6c05761ecdbacf9de88d6f9ffb493f63 Mon Sep 17 00:00:00 2001 From: Albert Yi Date: Wed, 9 May 2018 17:09:04 -0700 Subject: [PATCH] when PostKeeperManager.check_and_update fails, retry (fixes #3699) --- app/logical/post_keeper_manager.rb | 3 +++ app/models/post_archive.rb | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/app/logical/post_keeper_manager.rb b/app/logical/post_keeper_manager.rb index 0fbdcf8f8..8539e32c5 100644 --- a/app/logical/post_keeper_manager.rb +++ b/app/logical/post_keeper_manager.rb @@ -17,6 +17,9 @@ class PostKeeperManager def self.check_and_update(post, updater_id = nil, increment_tags = nil) check_and_assign(post, updater_id, increment_tags) post.update_column(:keeper_data, post.keeper_data) + rescue ActiveRecord::StatementInvalid => e + PostArchive.check_for_retry(e.message) + raise end def self.check_and_assign(post, updater_id = nil, increment_tags = nil) diff --git a/app/models/post_archive.rb b/app/models/post_archive.rb index 88dd7f9bd..e31737fd2 100644 --- a/app/models/post_archive.rb +++ b/app/models/post_archive.rb @@ -11,6 +11,12 @@ class PostArchive < ApplicationRecord establish_connection (ENV["ARCHIVE_DATABASE_URL"] || "archive_#{Rails.env}".to_sym) if enabled? self.table_name = "post_versions" + def self.check_for_retry(msg) + if msg =~ /can't get socket descriptor/ && msg =~ /post_versions/ + connection.reconnect! + end + end + module SearchMethods def for_user(user_id) if user_id