summaryrefslogtreecommitdiff
path: root/lib/gitlab/database/postgresql_adapter/force_disconnectable_mixin.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/database/postgresql_adapter/force_disconnectable_mixin.rb')
-rw-r--r--lib/gitlab/database/postgresql_adapter/force_disconnectable_mixin.rb30
1 files changed, 30 insertions, 0 deletions
diff --git a/lib/gitlab/database/postgresql_adapter/force_disconnectable_mixin.rb b/lib/gitlab/database/postgresql_adapter/force_disconnectable_mixin.rb
new file mode 100644
index 00000000000..9f664fa2137
--- /dev/null
+++ b/lib/gitlab/database/postgresql_adapter/force_disconnectable_mixin.rb
@@ -0,0 +1,30 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Database
+ module PostgresqlAdapter
+ module ForceDisconnectableMixin
+ extend ActiveSupport::Concern
+
+ prepended do
+ set_callback :checkin, :after, :force_disconnect_if_old!
+ end
+
+ def force_disconnect_if_old!
+ if force_disconnect_timer.expired?
+ disconnect!
+ reset_force_disconnect_timer!
+ end
+ end
+
+ def reset_force_disconnect_timer!
+ force_disconnect_timer.reset!
+ end
+
+ def force_disconnect_timer
+ @force_disconnect_timer ||= ConnectionTimer.starting_now
+ end
+ end
+ end
+ end
+end