A TupleEntry is a Tuple (i.e. a possible entry in some Tuplespace) together with expiry and cancellation data.
Creates a TupleEntry based on ary with an optional renewer or expiry time sec.
A renewer must implement the renew method which returns a Numeric, nil, or true to indicate when the tuple has expired.
# File ruby-3.1.2/lib/rinda/tuplespace.rb, line 26
def initialize(ary, sec=nil)
@cancel = false
@expires = nil
@tuple = make_tuple(ary)
@renewer = nil
renew(sec)
end
Retrieves key from the tuple.
# File ruby-3.1.2/lib/rinda/tuplespace.rb, line 110
def [](key)
@tuple[key]
end
A TupleEntry is dead when it is canceled or expired.
# File ruby-3.1.2/lib/rinda/tuplespace.rb, line 44
def alive?
!canceled? && !expired?
end
Marks this TupleEntry as canceled.
# File ruby-3.1.2/lib/rinda/tuplespace.rb, line 37
def cancel
@cancel = true
end
Returns the canceled status.
# File ruby-3.1.2/lib/rinda/tuplespace.rb, line 57
def canceled?; @cancel; end
Has this tuple expired? (true/false).
A tuple has expired when its expiry timer based on the sec argument to initialize runs out.
# File ruby-3.1.2/lib/rinda/tuplespace.rb, line 65
def expired?
return true unless @expires
return false if @expires > Time.now
return true if @renewer.nil?
renew(@renewer)
return true unless @expires
return @expires < Time.now
end
Fetches key from the tuple.
# File ruby-3.1.2/lib/rinda/tuplespace.rb, line 117
def fetch(key)
@tuple.fetch(key)
end
Returns an expiry Time based on sec which can be one of:
Numeric
sec seconds into the future
true
the expiry time is the start of 1970 (i.e. expired)
nil
it is Tue Jan 19 03:14:07 GMT Standard Time 2038 (i.e. when UNIX clocks will die)
# File ruby-3.1.2/lib/rinda/tuplespace.rb, line 96
def make_expires(sec=nil)
case sec
when Numeric
Time.now + sec
when true
Time.at(1)
when nil
Time.at(2**31-1)
end
end
Creates a Rinda::Tuple for ary.
# File ruby-3.1.2/lib/rinda/tuplespace.rb, line 131
def make_tuple(ary)
Rinda::Tuple.new(ary)
end
Reset the expiry time according to sec_or_renewer.
nil
it is set to expire in the far future.
true
it has expired.
Numeric
it will expire in that many seconds.
Otherwise the argument refers to some kind of renewer object which will reset its expiry time.
# File ruby-3.1.2/lib/rinda/tuplespace.rb, line 84
def renew(sec_or_renewer)
sec, @renewer = get_renewer(sec_or_renewer)
@expires = make_expires(sec)
end
Returns a valid argument to make_expires and the renewer or nil.
Given true, nil, or Numeric, returns that value and nil (no actual renewer). Otherwise it returns an expiry value from calling it.renew and the renewer.
# File ruby-3.1.2/lib/rinda/tuplespace.rb, line 144
def get_renewer(it)
case it
when Numeric, true, nil
return it, nil
else
begin
return it.renew, it
rescue Exception
return it, nil
end
end
end