leofs_manager_client 0.2.6 → 0.2.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -84,7 +84,7 @@ module LeoFSManager
84
84
 
85
85
  # Assigned file info Model
86
86
  class AssignedFile
87
- attr_reader :node, :vnode_id, :size, :clock, :checksum, :timestamp, :delete
87
+ attr_reader :node, :vnode_id, :size, :clock, :checksum, :timestamp, :delete, :num_of_chunks
88
88
 
89
89
  def initialize(h)
90
90
  @node = h[:node]
@@ -94,6 +94,7 @@ module LeoFSManager
94
94
  @checksum = h[:checksum]
95
95
  @timestamp = h[:timestamp]
96
96
  @delete = h[:delete]
97
+ @num_of_chunks = Integer(h[:num_of_chunks])
97
98
  end
98
99
  end
99
100
 
@@ -26,21 +26,7 @@ require "time"
26
26
  require_relative "leofs_manager_client/leofs_manager_models"
27
27
 
28
28
  module LeoFSManager
29
- VERSION = "0.2.6"
30
-
31
- # Class for close TCP socket on GC.
32
- class Remover
33
- def initialize(data)
34
- @data = data
35
- end
36
-
37
- # it will be called on GC.
38
- def call(*args)
39
- socket = @data[0]
40
- socket.close if socket && !socket.closed?
41
- warn "Closed socket: #{socket}" if $DEBUG
42
- end
43
- end
29
+ VERSION = "0.2.7"
44
30
 
45
31
  class Client
46
32
  CMD_VERSION = "version"
@@ -69,8 +55,6 @@ module LeoFSManager
69
55
  def initialize(*servers)
70
56
  @servers = parse_servers(servers)
71
57
  set_current_server
72
- final = Remover.new(@data = [])
73
- ObjectSpace.define_finalizer(self, final)
74
58
  @mutex = Mutex.new
75
59
  connect
76
60
  end
@@ -184,10 +168,11 @@ module LeoFSManager
184
168
  # Remove an endpoint from the system
185
169
  # Return::
186
170
  # _nil_
187
- def s3_del_endpoint(endpoint)
171
+ def s3_delete_endpoint(endpoint)
188
172
  sender(CMD_S3_DEL_ENDPOINT % endpoint)
189
173
  nil
190
174
  end
175
+ alias :s3_del_endpoint :s3_delete_endpoint
191
176
 
192
177
  # Retrieve an endpoint in the system
193
178
  # Return::
@@ -213,6 +198,13 @@ module LeoFSManager
213
198
  buckets.map {|bucket| Bucket.new(bucket) }
214
199
  end
215
200
 
201
+ # Disconnect to LeoFS Manager explicitly
202
+ # Return::
203
+ # _nil_
204
+ def disconnect!
205
+ disconnect
206
+ end
207
+
216
208
  ## ======================================================================
217
209
  ## PRIVATE
218
210
  ## ======================================================================
@@ -234,7 +226,8 @@ module LeoFSManager
234
226
  end
235
227
 
236
228
  def set_current_server
237
- raise Error, "No servers to connect" if @servers.empty?
229
+ @servers.delete(@current_server) if @current_server
230
+ raise "No servers to connect" if @servers.empty?
238
231
  @current_server = @servers.first
239
232
  end
240
233
 
@@ -243,20 +236,30 @@ module LeoFSManager
243
236
  retry_count = 0
244
237
  begin
245
238
  @socket = TCPSocket.new(@current_server[:host], @current_server[:port])
246
- @data[0] = @socket
247
239
  rescue => ex
248
240
  warn "Faild to connect: #{ex.class} (server: #{@current_server})"
249
241
  warn ex.message
250
242
  retry_count += 1
251
243
  if retry_count > 3
252
- warn "Connecting another server..."
253
- @socket.close if @socket && !@socket.closed?
254
- @servers.delete(@current_server)
255
244
  set_current_server
245
+ warn "Connecting another server: #{@current_server}"
256
246
  retry_count = 0
257
247
  end
248
+ sleep 1
258
249
  retry
259
250
  end
251
+ @socket.autoclose = true
252
+ nil
253
+ end
254
+
255
+ def disconnect
256
+ @socket.close if @socket && !@socket.closed?
257
+ end
258
+
259
+ def reconnect
260
+ disconnect
261
+ sleep 1
262
+ connect
260
263
  end
261
264
 
262
265
  # Send a request to LeoFS Manager
@@ -267,8 +270,11 @@ module LeoFSManager
267
270
  begin
268
271
  @mutex.synchronize do
269
272
  @socket.puts command
270
- response = JSON.parse(@socket.gets, symbolize_names: true)
273
+ response = JSON.parse(@socket.readline, symbolize_names: true)
271
274
  end
275
+ rescue EOFError => ex
276
+ warn "EOFError occured (server: #{@current_server})"
277
+ reconnect
272
278
  rescue => ex
273
279
  raise "An Error occured: #{ex.class} (server: #{@current_server})\n#{ex.message}"
274
280
  end
@@ -70,7 +70,8 @@ module Dummy
70
70
  :clock => "",
71
71
  :checksum => "",
72
72
  :timestamp => "",
73
- :delete => 0
73
+ :delete => 0,
74
+ :num_of_chunks => 0
74
75
  }
75
76
  ]
76
77
  }.to_json
@@ -102,29 +103,32 @@ module Dummy
102
103
  Thread.new do
103
104
  TCPServer.open(Host, Port) do |server|
104
105
  loop do
105
- socket = server.accept
106
- while line = socket.gets.split.first
107
- line.rstrip!
108
- begin
109
- case line
110
- when "status"
111
- result = Response::Status
112
- when "s3-get-buckets"
113
- result = Response::S3GetBuckets
114
- when "whereis"
115
- result = Response::Whereis
116
- when "s3-get-endpoints"
117
- result = Response::S3GetEndpoints
118
- when "s3-get-buckets"
119
- result = Response::S3GetBuckets
120
- else
121
- result = { :result => line }.to_json
106
+ begin
107
+ socket = server.accept
108
+ while line = socket.readline.split.first
109
+ line.rstrip!
110
+ begin
111
+ case line
112
+ when "status"
113
+ result = Response::Status
114
+ when "s3-get-buckets"
115
+ result = Response::S3GetBuckets
116
+ when "whereis"
117
+ result = Response::Whereis
118
+ when "s3-get-endpoints"
119
+ result = Response::S3GetEndpoints
120
+ when "s3-get-buckets"
121
+ result = Response::S3GetBuckets
122
+ else
123
+ result = { :result => line }.to_json
124
+ end
125
+ rescue => ex
126
+ result = { :error => ex.message }.to_json
127
+ ensure
128
+ socket.puts(result)
122
129
  end
123
- rescue => ex
124
- result = { :error => ex.message }.to_json
125
- ensure
126
- socket.puts(result)
127
130
  end
131
+ rescue EOFError
128
132
  end
129
133
  end
130
134
  end
@@ -147,79 +151,94 @@ NoResultAPIs = {
147
151
  include LeoFSManager
148
152
 
149
153
  describe LeoFSManager do
150
- before(:all) do
151
- Dummy::Manager.new
152
- @manager = Client.new("#{Host}:#{Port}")
153
- end
154
-
155
- it "raises error when it is passed invalid params" do
156
- lambda { Client.new }.should raise_error
157
- end
158
-
159
- describe "#status" do
160
- it "returns Status" do
161
- @manager.status.should be_a Status
154
+ describe Client do
155
+ before(:all) do
156
+ Dummy::Manager.new
157
+ @manager = Client.new("#{Host}:#{Port}")
162
158
  end
163
159
 
164
- it "returns SystemInfo" do
165
- @manager.status.system_info.should be_a Status::System
160
+ it "raises error when it is passed invalid params" do
161
+ lambda { Client.new }.should raise_error
166
162
  end
167
163
 
168
- it "returns node list" do
169
- node_list = @manager.status.node_list
170
- node_list.should be_a Array
171
- node_list.each do |node|
172
- node.should be_a Status::Node
164
+ describe "#status" do
165
+ it "returns Status" do
166
+ @manager.status.should be_a Status
167
+ end
168
+
169
+ it "returns SystemInfo" do
170
+ @manager.status.system_info.should be_a Status::System
171
+ end
172
+
173
+ it "returns Array of Node" do
174
+ node_list = @manager.status.node_list
175
+ node_list.should be_a Array
176
+ node_list.each do |node|
177
+ node.should be_a Status::Node
178
+ end
173
179
  end
174
180
  end
175
- end
176
181
 
177
- describe "#whereis" do
178
- it "returns Array of WhereInfo" do
179
- result = @manager.whereis("path")
180
- result.should be_a Array
181
- result.each do |where_info|
182
- where_info.should be_a AssignedFile
182
+ describe "#whereis" do
183
+ it "returns Array of WhereInfo" do
184
+ result = @manager.whereis("path")
185
+ result.should be_a Array
186
+ result.each do |where_info|
187
+ where_info.should be_a AssignedFile
188
+ where_info.num_of_chunks.should be_a Integer
189
+ end
190
+ end
191
+ end
192
+
193
+ describe "#du" do
194
+ it "returns DiskUsage" do
195
+ @manager.du("node").should be_a StorageStat
183
196
  end
184
- end
185
- end
197
+ end
186
198
 
187
- describe "#du" do
188
- it "returns DiskUsage" do
189
- @manager.du("node").should be_a StorageStat
199
+ describe "#s3_gen_key" do
200
+ it "returns Credential" do
201
+ @manager.s3_gen_key("user_id").should be_a Credential
202
+ end
190
203
  end
191
- end
192
204
 
193
- describe "#s3_gen_key" do
194
- it "returns Credential" do
195
- @manager.s3_gen_key("user_id").should be_a Credential
196
- end
197
- end
205
+ describe "#s3_get_endpoints" do
206
+ it "returns Arrany of Endpoint" do
207
+ result = @manager.s3_get_endpoints
208
+ result.should be_a Array
209
+ result.each do |endpoint|
210
+ endpoint.should be_a Endpoint
211
+ end
212
+ end
213
+ end
198
214
 
199
- describe "#s3_get_endpoints" do
200
- it "returns Arrany of Endpoint" do
201
- result = @manager.s3_get_endpoints
202
- result.should be_a Array
203
- result.each do |endpoint|
204
- endpoint.should be_a Endpoint
215
+ describe "#s3_get_buckets" do
216
+ it "returns Array of Bucket" do
217
+ result = @manager.s3_get_buckets
218
+ result.should be_a Array
219
+ result.each do |buckets|
220
+ buckets.should be_a Bucket
221
+ end
205
222
  end
206
223
  end
207
- end
208
224
 
209
- describe "#s3_get_buckets" do
210
- it "returns Array of Bucket" do
211
- result = @manager.s3_get_buckets
212
- result.should be_a Array
213
- result.each do |buckets|
214
- buckets.should be_a Bucket
225
+ NoResultAPIs.each do |api, num_of_args|
226
+ describe "##{api}" do
227
+ it "returns nil" do
228
+ @manager.send(api, *(["argument"] * num_of_args)).should be_nil
229
+ end
215
230
  end
216
231
  end
217
- end
218
232
 
219
- NoResultAPIs.each do |api, num_of_args|
220
- describe "##{api}" do
233
+ describe "#disconnect!" do
221
234
  it "returns nil" do
222
- @manager.send(api, *(["argument"] * num_of_args)).should be_nil
235
+ @manager.disconnect!.should be_nil
236
+ end
237
+
238
+ it "accepts no more requests" do
239
+ lambda {
240
+ @manager.status
241
+ }.should raise_error
223
242
  end
224
243
  end
225
244
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: leofs_manager_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.6
4
+ version: 0.2.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-10-11 00:00:00.000000000 Z
13
+ date: 2012-10-22 00:00:00.000000000 Z
14
14
  dependencies: []
15
15
  description: Client for LeoFS Manager
16
16
  email: