Method: DynaModel::Extensions::Lock.extend

Defined in:
lib/dyna_model/extensions/lock.rb

.extend(lock_name, extension_time = 5.seconds) ⇒ Object



100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# File 'lib/dyna_model/extensions/lock.rb', line 100

def self.extend(lock_name, extension_time=5.seconds)
  locked_at = DateTime.now
  expires_at = locked_at + extension_time

  lock_obj = self.new(
    lock_name: lock_name,
    locked_at: locked_at,
    expires_at: expires_at,
    locked_by: self.locked_by
  )

  if lock_obj.save(expected: {
    :locked_by.eq => self.locked_by
  })
    DynaModel::Config.logger.info "Extended lock '#{lock_name}' for #{extension_time} seconds"
    true
  else
    raise "Error extending lock: #{lock_obj.errors.full_messages.to_sentence}"
  end
rescue AWS::DynamoDB::Errors::ConditionalCheckFailedException => e
  DynaModel::Config.logger.info "Condition failed to extend lock '#{lock_name}'"
end