| Class | Rinda::TupleEntry |
| In: |
lib/rinda/tuplespace.rb
|
| Parent: | Object |
A TupleEntry is a Tuple (i.e. a possible entry in some Tuplespace) together with expiry and cancellation data.
| expires | [RW] |
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 lib/rinda/tuplespace.rb, line 27
27: def initialize(ary, sec=nil)
28: @cancel = false
29: @expires = nil
30: @tuple = make_tuple(ary)
31: @renewer = nil
32: renew(sec)
33: end
Retrieves key from the tuple.
# File lib/rinda/tuplespace.rb, line 111
111: def [](key)
112: @tuple[key]
113: end
A TupleEntry is dead when it is canceled or expired.
# File lib/rinda/tuplespace.rb, line 45
45: def alive?
46: !canceled? && !expired?
47: end
Marks this TupleEntry as canceled.
# File lib/rinda/tuplespace.rb, line 38
38: def cancel
39: @cancel = true
40: end
Returns the canceled status.
# File lib/rinda/tuplespace.rb, line 58
58: 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 lib/rinda/tuplespace.rb, line 66
66: def expired?
67: return true unless @expires
68: return false if @expires > Time.now
69: return true if @renewer.nil?
70: renew(@renewer)
71: return true unless @expires
72: return @expires < Time.now
73: end
Fetches key from the tuple.
# File lib/rinda/tuplespace.rb, line 118
118: def fetch(key)
119: @tuple.fetch(key)
120: 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 lib/rinda/tuplespace.rb, line 97
97: def make_expires(sec=nil)
98: case sec
99: when Numeric
100: Time.now + sec
101: when true
102: Time.at(1)
103: when nil
104: Time.at(2**31-1)
105: end
106: end
Creates a Rinda::Tuple for ary.
# File lib/rinda/tuplespace.rb, line 132
132: def make_tuple(ary)
133: Rinda::Tuple.new(ary)
134: end
Reset the expiry time according to sec_or_renewer.
| nil: | it is set to expire in the far future. |
| false: | 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 lib/rinda/tuplespace.rb, line 85
85: def renew(sec_or_renewer)
86: sec, @renewer = get_renewer(sec_or_renewer)
87: @expires = make_expires(sec)
88: 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 lib/rinda/tuplespace.rb, line 145
145: def get_renewer(it)
146: case it
147: when Numeric, true, nil
148: return it, nil
149: else
150: begin
151: return it.renew, it
152: rescue Exception
153: return it, nil
154: end
155: end
156: end