Class: Rinda::TupleEntry

Inherits:
Object
  • Object
show all
Includes:
DRbUndumped
Defined in:
lib/rinda/tuplespace.rb

Overview

A TupleEntry is a Tuple (i.e. a possible entry in some Tuplespace) together with expiry and cancellation data.

Direct Known Subclasses

TemplateEntry

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(ary, sec = nil) ⇒ TupleEntry

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.


26
27
28
29
30
31
32
# File 'lib/rinda/tuplespace.rb', line 26

def initialize(ary, sec=nil)
  @cancel = false
  @expires = nil
  @tuple = make_tuple(ary)
  @renewer = nil
  renew(sec)
end

Instance Attribute Details

#expiresObject

Returns the value of attribute expires


17
18
19
# File 'lib/rinda/tuplespace.rb', line 17

def expires
  @expires
end

Instance Method Details

#[](key) ⇒ Object

Retrieves key from the tuple.


110
111
112
# File 'lib/rinda/tuplespace.rb', line 110

def [](key)
  @tuple[key]
end

#alive?Boolean

A TupleEntry is dead when it is canceled or expired.


44
45
46
# File 'lib/rinda/tuplespace.rb', line 44

def alive?
  !canceled? && !expired?
end

#cancelObject

Marks this TupleEntry as canceled.


37
38
39
# File 'lib/rinda/tuplespace.rb', line 37

def cancel
  @cancel = true
end

#canceled?Boolean

Returns the canceled status.


57
# File 'lib/rinda/tuplespace.rb', line 57

def canceled?; @cancel; end

#expired?Boolean

Has this tuple expired? (true/false).

A tuple has expired when its expiry timer based on the sec argument to #initialize runs out.


65
66
67
68
69
70
71
72
# File '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

#fetch(key) ⇒ Object

Fetches key from the tuple.


117
118
119
# File 'lib/rinda/tuplespace.rb', line 117

def fetch(key)
  @tuple.fetch(key)
end

#make_expires(sec = nil) ⇒ Object

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)


96
97
98
99
100
101
102
103
104
105
# File '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

#make_tuple(ary) ⇒ Object

Creates a Rinda::Tuple for ary.


131
132
133
# File 'lib/rinda/tuplespace.rb', line 131

def make_tuple(ary)
  Rinda::Tuple.new(ary)
end

#renew(sec_or_renewer) ⇒ Object

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.


84
85
86
87
# File 'lib/rinda/tuplespace.rb', line 84

def renew(sec_or_renewer)
  sec, @renewer = get_renewer(sec_or_renewer)
  @expires = make_expires(sec)
end

#sizeObject

The size of the tuple.


124
125
126
# File 'lib/rinda/tuplespace.rb', line 124

def size
  @tuple.size
end

#valueObject

Return the object which makes up the tuple itself: the Array or Hash.


52
# File 'lib/rinda/tuplespace.rb', line 52

def value; @tuple.value; end