From 2b7d759afdb3ce0327367cb7e719afb288334d39 Mon Sep 17 00:00:00 2001 From: Kamil Trzcinski Date: Tue, 20 Dec 2016 20:01:48 +0100 Subject: Add with_lease to session [ci skip] --- lib/mattermost/session.rb | 40 ++++++++++++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 8 deletions(-) (limited to 'lib/mattermost') diff --git a/lib/mattermost/session.rb b/lib/mattermost/session.rb index 7a7912d02fc..38a71061097 100644 --- a/lib/mattermost/session.rb +++ b/lib/mattermost/session.rb @@ -26,6 +26,8 @@ module Mattermost include Doorkeeper::Helpers::Controller include HTTParty + LEASE_TIMEOUT = 60 + base_uri Settings.mattermost.host attr_accessor :current_resource_owner, :token @@ -35,14 +37,16 @@ module Mattermost end def with_session - raise NoSessionError unless create - - begin - yield self - rescue Errno::ECONNREFUSED - raise NoSessionError - ensure - destroy + with_lease do + raise NoSessionError unless create + + begin + yield self + rescue Errno::ECONNREFUSED + raise NoSessionError + ensure + destroy + end end end @@ -130,5 +134,25 @@ module Mattermost response.headers['token'] end end + + def with_lease + lease_uuid = lease_try_obtain + raise NoSessionError unless lease_uuid + + begin + yield + ensure + Gitlab::ExclusiveLease.cancel(lease_key, lease_uuid) + end + end + + def lease_key + "mattermost:session" + end + + def lease_try_obtain + lease = ::Gitlab::ExclusiveLease.new(lease_key, timeout: LEASE_TIMEOUT) + lease.try_obtain + end end end -- cgit v1.2.1