murmur-rpc 0.0.7 → 0.0.8

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.
Files changed (3) hide show
  1. data/lib/interfaces/ice.rb +159 -158
  2. data/lib/murmur-rpc.rb +1 -1
  3. metadata +3 -3
@@ -1,158 +1,159 @@
1
- require 'timeout'
2
- require 'benchmark'
3
- require 'Glacier2'
4
- require File.join(File.expand_path(File.dirname(__FILE__)), "..", "..", "vendor", "ice", "Murmur.rb")
5
- module Murmur
6
- module Ice
7
- class ::InvalidMetaException < Exception; end
8
- class ::Murmur::Ice::InvalidServerException < Exception; end
9
- class Meta
10
- def initialize(glacierHost = nil, glacierPort = nil, user = nil, pass = nil, host = "127.0.0.1", port = "6502", icesecret = nil, idletime = nil)
11
- ic = nil
12
- if icesecret and icesecret != ""
13
- props = ::Ice::createProperties
14
- props.setProperty "Ice.ImplicitContext", "Shared"
15
- props.setProperty "Ice.MessageSizeMax", "65536"
16
- props.setProperty "Ice.ACM.Client", idletime.to_s unless idletime == nil
17
- idd = ::Ice::InitializationData.new
18
- idd.properties = props
19
- ic = ::Ice::initialize idd
20
- ic.getImplicitContext.put("secret", icesecret)
21
- else
22
- ic = ::Ice::initialize
23
- end
24
-
25
- if glacierHost and glacierHost != "" then
26
- @glacierHost = glacierHost
27
- @glacierPort = glacierPort
28
- validate_connection(glacierHost, glacierPort)
29
- prx = ic.stringToProxy("Glacier2/router:tcp -h #{glacierHost} -p #{glacierPort}")
30
- @router = ::Glacier2::RouterPrx::uncheckedCast(prx).ice_router(nil)
31
- @session = @router.createSession(user, pass)
32
- end
33
- conn = "tcp -h #{host} -p #{port}"
34
- @meta = add_proxy_router(Murmur::MetaPrx::checkedCast(ic.stringToProxy("Meta:#{conn}")))
35
- raise "Invalid proxy" unless @meta
36
-
37
- @servers = {}
38
- end
39
-
40
- def destroy
41
- begin
42
- @router.destroySession @session unless @router.nil?
43
- rescue ::Ice::ConnectionLostException
44
- # Expected - Ice raises this when the connection is terminated. Yay for exceptions as flow control?
45
- end
46
- return nil
47
- end
48
-
49
- def add_proxy_router(prx)
50
- @router ? prx.ice_router(@router) : prx
51
- end
52
-
53
- def get_server(id)
54
- @servers[id] ||= Server.new(self, @meta, id)
55
- end
56
-
57
- def uncache_server(id)
58
- @servers[id] = nil
59
- end
60
-
61
- def list_servers(only_booted = false)
62
- method = only_booted ? :getBootedServers : :getAllServers
63
- @meta.send(method).collect do |server|
64
- server = add_proxy_router(server)
65
- @servers[server.id] ||= Server.new(self, @meta, nil, server)
66
- end
67
- end
68
-
69
- def validate
70
- @meta.getVersion
71
- return true
72
- end
73
-
74
- def new_server(port = nil)
75
- server = @meta.newServer
76
- @servers[server.id] = Server.new(self, @meta, nil, add_proxy_router(server))
77
- end
78
-
79
- def method_missing(method, *args)
80
- method = method.to_s
81
- method.gsub!(/_([a-z])/) { $1.upcase }
82
- @meta.send method, *args
83
- end
84
-
85
- def validate_connection(host, port)
86
- Timeout::timeout(2) do
87
- begin
88
- s = TCPSocket.new(host, port)
89
- s.close
90
- rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH
91
- raise InvalidMetaException
92
- end
93
- end
94
- rescue Timeout::Error
95
- raise InvalidMetaException
96
- end
97
- end
98
-
99
- class Server
100
- def initialize(host, meta, id = nil, interface = nil)
101
- @meta = meta
102
- @host = host
103
- if id.nil? and interface.nil? then
104
- raise "Must pass either a server ID or a server interface instance"
105
- end
106
- @interface = interface || begin
107
- server = @meta.getServer(id)
108
- raise ::Murmur::Ice::InvalidServerException if server.nil?
109
- host.add_proxy_router(server)
110
- end
111
- end
112
-
113
- def id
114
- @interface.id
115
- end
116
-
117
- def running?
118
- @interface.isRunning
119
- end
120
-
121
- def config
122
- @config = @meta.getDefaultConf.merge(@interface.getAllConf)
123
- end
124
-
125
- def destroy!
126
- @interface.stop if running?
127
- @host.uncache_server @interface.id
128
- @interface.delete
129
- end
130
- alias :delete :destroy!
131
-
132
- def restart!
133
- @interface.stop if running?
134
- @interface.start
135
- @running = nil
136
- end
137
-
138
- def [](key)
139
- config[key]
140
- end
141
-
142
- def []=(key, val)
143
- @interface.setConf(key, val.to_s)
144
- @config = nil
145
- end
146
-
147
- def setConf(key, val)
148
- self[key] = val
149
- end
150
-
151
- def method_missing(method, *args)
152
- method = method.to_s
153
- method.gsub!(/_([a-z])/) { $1.upcase }
154
- ret = @interface.send method, *args
155
- end
156
- end
157
- end
158
- end
1
+ require 'timeout'
2
+ require 'benchmark'
3
+ require 'Glacier2'
4
+ require File.join(File.expand_path(File.dirname(__FILE__)), "..", "..", "vendor", "ice", "Murmur.rb")
5
+ module Murmur
6
+ module Ice
7
+ class ::InvalidMetaException < Exception; end
8
+ class ::Murmur::Ice::InvalidServerException < Exception; end
9
+ class Meta
10
+ def initialize(glacierHost = nil, glacierPort = nil, user = nil, pass = nil, host = "127.0.0.1", port = "6502", icesecret = nil, connect_timeout=nil, idletime = nil)
11
+ ic = nil
12
+ if icesecret and icesecret != ""
13
+ props = ::Ice::createProperties
14
+ props.setProperty "Ice.ImplicitContext", "Shared"
15
+ props.setProperty "Ice.Override.ConnectTimeout", connect_timeout.to_s unless connect_timeout == nil
16
+ props.setProperty "Ice.MessageSizeMax", "65536"
17
+ props.setProperty "Ice.ACM.Client", idletime.to_s unless idletime == nil
18
+ idd = ::Ice::InitializationData.new
19
+ idd.properties = props
20
+ ic = ::Ice::initialize idd
21
+ ic.getImplicitContext.put("secret", icesecret)
22
+ else
23
+ ic = ::Ice::initialize
24
+ end
25
+
26
+ if glacierHost and glacierHost != "" then
27
+ @glacierHost = glacierHost
28
+ @glacierPort = glacierPort
29
+ validate_connection(glacierHost, glacierPort)
30
+ prx = ic.stringToProxy("Glacier2/router:tcp -h #{glacierHost} -p #{glacierPort}")
31
+ @router = ::Glacier2::RouterPrx::uncheckedCast(prx).ice_router(nil)
32
+ @session = @router.createSession(user, pass)
33
+ end
34
+ conn = "tcp -h #{host} -p #{port}"
35
+ @meta = add_proxy_router(Murmur::MetaPrx::checkedCast(ic.stringToProxy("Meta:#{conn}")))
36
+ raise "Invalid proxy" unless @meta
37
+
38
+ @servers = {}
39
+ end
40
+
41
+ def destroy
42
+ begin
43
+ @router.destroySession @session unless @router.nil?
44
+ rescue ::Ice::ConnectionLostException
45
+ # Expected - Ice raises this when the connection is terminated. Yay for exceptions as flow control?
46
+ end
47
+ return nil
48
+ end
49
+
50
+ def add_proxy_router(prx)
51
+ @router ? prx.ice_router(@router) : prx
52
+ end
53
+
54
+ def get_server(id)
55
+ @servers[id] ||= Server.new(self, @meta, id)
56
+ end
57
+
58
+ def uncache_server(id)
59
+ @servers[id] = nil
60
+ end
61
+
62
+ def list_servers(only_booted = false)
63
+ method = only_booted ? :getBootedServers : :getAllServers
64
+ @meta.send(method).collect do |server|
65
+ server = add_proxy_router(server)
66
+ @servers[server.id] ||= Server.new(self, @meta, nil, server)
67
+ end
68
+ end
69
+
70
+ def validate
71
+ @meta.getVersion
72
+ return true
73
+ end
74
+
75
+ def new_server(port = nil)
76
+ server = @meta.newServer
77
+ @servers[server.id] = Server.new(self, @meta, nil, add_proxy_router(server))
78
+ end
79
+
80
+ def method_missing(method, *args)
81
+ method = method.to_s
82
+ method.gsub!(/_([a-z])/) { $1.upcase }
83
+ @meta.send method, *args
84
+ end
85
+
86
+ def validate_connection(host, port)
87
+ Timeout::timeout(2) do
88
+ begin
89
+ s = TCPSocket.new(host, port)
90
+ s.close
91
+ rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH
92
+ raise InvalidMetaException
93
+ end
94
+ end
95
+ rescue Timeout::Error
96
+ raise InvalidMetaException
97
+ end
98
+ end
99
+
100
+ class Server
101
+ def initialize(host, meta, id = nil, interface = nil)
102
+ @meta = meta
103
+ @host = host
104
+ if id.nil? and interface.nil? then
105
+ raise "Must pass either a server ID or a server interface instance"
106
+ end
107
+ @interface = interface || begin
108
+ server = @meta.getServer(id)
109
+ raise ::Murmur::Ice::InvalidServerException if server.nil?
110
+ host.add_proxy_router(server)
111
+ end
112
+ end
113
+
114
+ def id
115
+ @interface.id
116
+ end
117
+
118
+ def running?
119
+ @interface.isRunning
120
+ end
121
+
122
+ def config
123
+ @config = @meta.getDefaultConf.merge(@interface.getAllConf)
124
+ end
125
+
126
+ def destroy!
127
+ @interface.stop if running?
128
+ @host.uncache_server @interface.id
129
+ @interface.delete
130
+ end
131
+ alias :delete :destroy!
132
+
133
+ def restart!
134
+ @interface.stop if running?
135
+ @interface.start
136
+ @running = nil
137
+ end
138
+
139
+ def [](key)
140
+ config[key]
141
+ end
142
+
143
+ def []=(key, val)
144
+ @interface.setConf(key, val.to_s)
145
+ @config = nil
146
+ end
147
+
148
+ def setConf(key, val)
149
+ self[key] = val
150
+ end
151
+
152
+ def method_missing(method, *args)
153
+ method = method.to_s
154
+ method.gsub!(/_([a-z])/) { $1.upcase }
155
+ ret = @interface.send method, *args
156
+ end
157
+ end
158
+ end
159
+ end
data/lib/murmur-rpc.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  require File.dirname(__FILE__) + '/interfaces/ice.rb'
2
2
 
3
3
  module MurmurRPC
4
- VERSION="0.0.7"
4
+ VERSION="0.0.8"
5
5
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: murmur-rpc
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.7
5
+ version: 0.0.8
6
6
  platform: ruby
7
7
  authors:
8
8
  - Brian Stolz
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-03-08 00:00:00 -08:00
13
+ date: 2011-05-05 00:00:00 +00:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -67,7 +67,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
67
67
  requirements: []
68
68
 
69
69
  rubyforge_project:
70
- rubygems_version: 1.5.0
70
+ rubygems_version: 1.6.2
71
71
  signing_key:
72
72
  specification_version: 3
73
73
  summary: RPC interface for Murmur