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