corosync 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/README.md +1 -0
- data/lib/corosync/cpg/member.rb +1 -1
- data/lib/corosync/cpg.rb +36 -13
- data/lib/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ec6cba2dc8f6d3d85accfe0821274b1bc3268e2a
|
4
|
+
data.tar.gz: 05257c44ede07405190a84caaf509be8216095d6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 16c7e8a4d0ac77525d5ba950d9f04b025d0424c07b39ba613ec70843f5ce80acf2eab56bc1762923fc5b0a22ad29710314553e8841322890338118755c12eebf
|
7
|
+
data.tar.gz: e818f76f4e96fa0bf648a62767c3ca7208646b36d319d4ae81c58d578a4a62a6c5fac6a08a22ed573e2994ba635c812a4b944f9b9749f75dd0382258a697bffe
|
data/.gitignore
CHANGED
data/README.md
CHANGED
data/lib/corosync/cpg/member.rb
CHANGED
@@ -20,7 +20,7 @@ class Corosync::CPG::Member
|
|
20
20
|
member = args.first
|
21
21
|
|
22
22
|
member = Corosync::CpgAddress.new(member) if member.is_a?(FFI::Pointer)
|
23
|
-
if member.is_a?(Corosync::CpgAddress) then
|
23
|
+
if member.is_a?(Corosync::CpgAddress) or member.is_a?(Corosync::CpgIterationDescriptionT) then
|
24
24
|
@nodeid = member[:nodeid]
|
25
25
|
@pid = member[:pid]
|
26
26
|
else
|
data/lib/corosync/cpg.rb
CHANGED
@@ -12,7 +12,7 @@ require 'corosync/cpg/member'
|
|
12
12
|
# This is all done through callbacks. You define a block of code to execute, and whenever a message is received, it is passed to that block.
|
13
13
|
# After registering the callbacks, you call {#dispatch} to check for any pending messages, upon which the appropriate callbacks will be executed.
|
14
14
|
#
|
15
|
-
# The simplest usage of this library is to call `Corosync::CPG.new('groupname')`. This will connect to CPG and join the specified group.
|
15
|
+
# The simplest usage of this library is to call `Corosync::CPG.new('groupname')`. This will connect to CPG and join the specified group.
|
16
16
|
#
|
17
17
|
# == Threading notice
|
18
18
|
# With MRI Ruby 1.9.3 and older, you cannot call {#dispatch} from within a thread. Attempting to do so will result in a segfault.
|
@@ -22,6 +22,7 @@ require 'corosync/cpg/member'
|
|
22
22
|
# ----
|
23
23
|
#
|
24
24
|
# @example
|
25
|
+
# require 'corosync/cpg'
|
25
26
|
# cpg = Corosync::CPG.new('mygroup')
|
26
27
|
# cpg.on_message do |message, member|
|
27
28
|
# puts "Received #{message}"
|
@@ -38,10 +39,6 @@ class Corosync::CPG
|
|
38
39
|
# @return [IO]
|
39
40
|
attr_reader :fd
|
40
41
|
|
41
|
-
# Members currently in the group.
|
42
|
-
# @return [Corosync::CPG::MemberList]
|
43
|
-
attr_reader :members
|
44
|
-
|
45
42
|
# Name of the currently joined group
|
46
43
|
# @return [String]
|
47
44
|
attr_reader :group
|
@@ -66,7 +63,6 @@ class Corosync::CPG
|
|
66
63
|
@group = nil
|
67
64
|
@fd = nil
|
68
65
|
@handle = nil
|
69
|
-
@members = Corosync::CPG::MemberList.new
|
70
66
|
|
71
67
|
join group if group
|
72
68
|
end
|
@@ -103,14 +99,12 @@ class Corosync::CPG
|
|
103
99
|
@fd = nil
|
104
100
|
@model = nil
|
105
101
|
@handle = nil
|
106
|
-
@members = Corosync::CPG::MemberList.new
|
107
102
|
|
108
103
|
true
|
109
104
|
end
|
110
105
|
alias_method :close, :finalize
|
111
106
|
|
112
107
|
# Join the specified closed process group.
|
113
|
-
# Note that the library will automatically make a call to {#dispatch} upon join. This is so that it can obtain a group membership list. If you wish to receive the initial join message, you must register the callback with {#on_confchg} before calling {#join}.
|
114
108
|
# @param name [String] Name of the group. Maximum length of 128 characters.
|
115
109
|
# @return [void]
|
116
110
|
def join(name)
|
@@ -124,8 +118,6 @@ class Corosync::CPG
|
|
124
118
|
raise StandardError, "Received #{cs_error.to_s.upcase} attempting to join group"
|
125
119
|
end
|
126
120
|
|
127
|
-
dispatch
|
128
|
-
|
129
121
|
@group = name
|
130
122
|
|
131
123
|
self
|
@@ -146,7 +138,6 @@ class Corosync::CPG
|
|
146
138
|
end
|
147
139
|
|
148
140
|
@group = nil
|
149
|
-
@members = Corosync::CPG::MemberList.new
|
150
141
|
end
|
151
142
|
|
152
143
|
# Checks for a single pending events and triggers the appropriate callback if found.
|
@@ -199,8 +190,6 @@ class Corosync::CPG
|
|
199
190
|
member_list << (member_list_p + i * Corosync::CpgAddress.size)
|
200
191
|
end
|
201
192
|
|
202
|
-
@members = member_list.dup.freeze
|
203
|
-
|
204
193
|
return if !@callback_confchg # no point in continuing otherwise
|
205
194
|
|
206
195
|
left_list = Corosync::CPG::MemberList.new
|
@@ -247,6 +236,40 @@ class Corosync::CPG
|
|
247
236
|
nodeid_p.read_uint
|
248
237
|
end
|
249
238
|
|
239
|
+
# Gets a list of members currently in the group
|
240
|
+
# @return [Corosync::CPG::MemberList]
|
241
|
+
def members
|
242
|
+
members = Corosync::CPG::MemberList.new
|
243
|
+
|
244
|
+
cpg_name = Corosync::CpgName.new
|
245
|
+
cpg_name[:value] = @group
|
246
|
+
cpg_name[:length] = @group.size
|
247
|
+
|
248
|
+
iteration_handle_ptr = FFI::MemoryPointer.new(Corosync.find_type(:cpg_iteration_handle_t))
|
249
|
+
cs_error = Corosync.cpg_iteration_initialize(@handle, Corosync::CPG_ITERATION_ONE_GROUP, cpg_name, iteration_handle_ptr)
|
250
|
+
if cs_error != :ok then
|
251
|
+
raise StandardError, "Received #{cs_error.to_s.upcase} attempting to initialize member iteration"
|
252
|
+
end
|
253
|
+
iteration_handle = iteration_handle_ptr.read_uint64
|
254
|
+
|
255
|
+
begin
|
256
|
+
iteration_description = Corosync::CpgIterationDescriptionT.new
|
257
|
+
while (cs_error = Corosync.cpg_iteration_next(iteration_handle, iteration_description.pointer)) == :ok do
|
258
|
+
members << Corosync::CPG::Member.new(iteration_description)
|
259
|
+
end
|
260
|
+
if cs_error != :err_no_sections then
|
261
|
+
raise StandardError, "Received #{cs_error.to_s.upcase} attempting to iterate group members"
|
262
|
+
end
|
263
|
+
ensure
|
264
|
+
cs_error = Corosync.cpg_iteration_finalize(iteration_handle)
|
265
|
+
if cs_error != :ok then
|
266
|
+
raise StandardError, "Received #{cs_error.to_s.upcase} attempting to finalize member iteration"
|
267
|
+
end
|
268
|
+
end
|
269
|
+
|
270
|
+
members
|
271
|
+
end
|
272
|
+
|
250
273
|
# Returns the {Corosync::CPG::Member member} object describing ourself.
|
251
274
|
# @return [Corosync::CPG::Member]
|
252
275
|
def member
|
data/lib/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: corosync
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Patrick Hemmer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-11-
|
11
|
+
date: 2013-11-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi
|