Class: LS4::FaultDetector

Inherits:
Object
  • Object
show all
Defined in:
lib/ls4/logic/fault_detector.rb

Defined Under Namespace

Classes: Term

Instance Method Summary collapse

Constructor Details

#initializeFaultDetector

Returns a new instance of FaultDetector.



115
116
117
118
119
120
# File 'lib/ls4/logic/fault_detector.rb', line 115

def initialize
	@period = 10
	@detect = 5
	@first_detect = 20  # FIXME
	@map = {}  # {nid => Term}
end

Instance Method Details

#add_nid(nid) ⇒ Object



154
155
156
157
158
159
160
# File 'lib/ls4/logic/fault_detector.rb', line 154

def add_nid(nid)
	if term = @map[nid]
		return nil
	end
	@map[nid] = Term.new(@period + @first_detect)
	return true
end

#delete_nid(nid) ⇒ Object



170
171
172
173
174
175
176
177
178
# File 'lib/ls4/logic/fault_detector.rb', line 170

def delete_nid(nid)
	if term = @map.delete(nid)
		if term.expired?
			on_change
		end
		return true
	end
	return nil
end

#forward_timerObject



190
191
192
193
194
195
196
197
198
199
200
201
202
203
# File 'lib/ls4/logic/fault_detector.rb', line 190

def forward_timer
	fault_nids = []
	@map.each_pair {|nid,term|
		if term.forward_timer
			fault_nids << nid
		end
	}

	if !fault_nids.empty?
		on_change
	end

	fault_nids
end

#get_fault_nidsObject



180
181
182
183
184
185
186
187
188
# File 'lib/ls4/logic/fault_detector.rb', line 180

def get_fault_nids
	fault_nids = []
	@map.each_pair {|nid,term|
		if term.expired?
			fault_nids << nid
		end
	}
	fault_nids
end

#reset(nid) ⇒ Object



145
146
147
148
149
150
151
152
# File 'lib/ls4/logic/fault_detector.rb', line 145

def reset(nid)
	if term = @map[nid]
		term.reset(@period + @detect)
		on_change
		return true
	end
	return nil
end

#set_init(all_nids, fault_nids) ⇒ Object



122
123
124
125
126
127
128
129
130
131
132
133
134
# File 'lib/ls4/logic/fault_detector.rb', line 122

def set_init(all_nids, fault_nids)
	map = {}
	all_nids.each {|nid|
		map[nid] = Term.new(@period + @first_detect)
	}
	fault_nids.each {|nid|
		if all_nids.include?(nid)
			map[nid] = Term.new(0)
		end
	}
	@map = map
	nil
end

#set_nid(nid) ⇒ Object



162
163
164
165
166
167
168
# File 'lib/ls4/logic/fault_detector.rb', line 162

def set_nid(nid)
	if @map.has_key?(nid)
		reset(nid)
	else
		add_nid(nid)
	end
end

#update(nid) ⇒ Object



136
137
138
139
140
141
142
143
# File 'lib/ls4/logic/fault_detector.rb', line 136

def update(nid)
	term = @map[nid]
	if term && !term.expired?
		term.reset(@period + @detect)
		return @period
	end
	return nil
end