leofs_manager_client 0.2.2 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,11 +1,52 @@
1
+ # ======================================================================
2
+ #
3
+ # LeoFS Manager Client
4
+ #
5
+ # Copyright (c) 2012 Rakuten, Inc.
6
+ #
7
+ # This file is provided to you under the Apache License,
8
+ # Version 2.0 (the "License"); you may not use this file
9
+ # except in compliance with the License. You may obtain
10
+ # a copy of the License at
11
+ #
12
+ # http://www.apache.org/licenses/LICENSE-2.0
13
+ #
14
+ # Unless required by applicable law or agreed to in writing,
15
+ # software distributed under the License is distributed on an
16
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17
+ # KIND, either express or implied. See the License for the
18
+ # specific language governing permissions and limitations
19
+ # under the License.
20
+ #
21
+ # ======================================================================
1
22
  module LeoFSManager
2
- ## ======================================================================
3
- ## CLASS
4
- ## ======================================================================
5
- ## @doc System Information Model
6
- ##
23
+ # System Information Model
7
24
  class Status
8
- class SystemInfo
25
+ # Node
26
+ attr_reader :node_stat
27
+ # System
28
+ attr_reader :system_info
29
+ # Array of Node
30
+ attr_reader :node_list
31
+
32
+ def initialize(h)
33
+ @node_stat = Node.new(h[:node_stat]) if h.has_key?(:node_stat)
34
+ @system_info = System.new(h[:system_info]) if h.has_key?(:system_info)
35
+ @node_list = h[:node_list].map {|node| Node.new(node) } if h.has_key?(:node_list)
36
+ end
37
+
38
+ class System
39
+ attr_reader :version, :ring_size, :ring_cur, :ring_prev
40
+
41
+ # number of replicas
42
+ attr_reader :n
43
+ # number of replicas needed for a successful READ operation
44
+ attr_reader :r
45
+ # number of replicas needed for a successful WRITE operation
46
+ attr_reader :w
47
+ # number of replicas needed for a successful DELETE operation
48
+ attr_reader :d
49
+
9
50
  def initialize(h)
10
51
  @version = h[:version]
11
52
  @n = h[:n]
@@ -16,99 +57,95 @@ module LeoFSManager
16
57
  @ring_cur = h[:ring_cur]
17
58
  @ring_prev = h[:ring_prev]
18
59
  end
19
-
20
- attr_reader :version, :n, :r, :w, :d, :ring_size, :ring_cur, :ring_prev
21
60
  end
22
61
 
23
- ## @doc Node Info Model
24
- ##
25
- class NodeInfo
62
+ # Node Status Model
63
+ class Node
64
+ attr_reader :version, :type, :node, :state, :log_dir, :ring_cur, :ring_prev, :joined_at,
65
+ :tota_mem_usage, :system_mem_usage, :procs_mem_usage, :ets_mem_usage, :num_of_procs
66
+
26
67
  def initialize(h)
68
+ @version = h[:version]
27
69
  @type = h[:type]
28
70
  @node = h[:node]
29
71
  @state = h[:state]
30
- @ring_cur = h[:ring_cur]
31
- @ring_prev = h[:ring_prev]
32
- @joined_at = h[:when]
33
- end
34
-
35
- attr_reader :type, :node, :state, :ring_cur, :ring_prev, :joined_at
36
- end
37
-
38
- ## @doc Node Status Model
39
- ##
40
- class NodeStat
41
- def initialize(h)
42
- @type = h[:version]
43
72
  @log_dir = h[:log_dir]
44
73
  @ring_cur = h[:ring_cur]
45
74
  @ring_prev = h[:ring_prev]
75
+ @joined_at = h[:when]
46
76
  @total_mem_usage = h[:total_mem_usage]
47
77
  @system_mem_usage = h[:system_mem_usage]
48
78
  @procs_mem_usage = h[:procs_mem_usage]
49
79
  @ets_mem_usage = h[:ets_mem_usage]
50
80
  @num_of_procs = h[:num_of_procs]
51
81
  end
52
-
53
- attr_reader :version, :log_dir, :ring_cur, :ring_prev, :tota_mem_usage,
54
- :system_mem_usage, :procs_mem_usage, :ets_mem_usage, :num_of_procs
55
- end
56
-
57
- def initialize(h)
58
- @node_stat = NodeStat.new(h[:node_stat]) if h.has_key?(:node_stat)
59
- @system_info = SystemInfo.new(h[:system_info]) if h.has_key?(:system_info)
60
- @node_list = h[:node_list].map {|node| NodeInfo.new(node) } if h.has_key?(:node_list)
61
82
  end
62
-
63
- attr_reader :node_stat, :system_info, :node_list
64
83
  end
65
84
 
66
- class WhereInfo
85
+ # Assigned file info Model
86
+ class AssignedFile
87
+ attr_reader :node, :vnode_id, :size, :clock, :checksum, :timestamp, :delete
88
+
67
89
  def initialize(h)
68
- @node = h[:node]
69
- @vnode_id = h[:vnode_id]
70
- @size = h[:size]
71
- @clock = h[:clock]
72
- @checksum = h[:checksum]
90
+ @node = h[:node]
91
+ @vnode_id = h[:vnode_id]
92
+ @size = h[:size]
93
+ @clock = h[:clock]
94
+ @checksum = h[:checksum]
73
95
  @timestamp = h[:timestamp]
74
- @delete = h[:delete]
96
+ @delete = h[:delete]
75
97
  end
76
-
77
- attr_reader :node, :vnode_id, :size, :clock, :checksum, :timestamp, :delete
78
98
  end
79
99
 
80
- class DiskUsage
100
+ # Storage Status Model
101
+ class StorageStat
102
+ attr_reader :file_size, :total_of_objects
103
+
81
104
  def initialize(h)
82
105
  @file_size = h[:file_size]
83
- @total_of_objects = h[:total_of_objects]
106
+ @total_of_objects = h[:total_of_objects]
84
107
  end
85
-
86
- attr_reader :file_size, :total_of_objects
87
108
  end
88
109
 
110
+ # S3 Credential
89
111
  class Credential
112
+ # AWS_ACCESS_KEY_ID
113
+ attr_reader :access_key_id
114
+ # AWS_SECRET_ACCESS_KEY
115
+ attr_reader :secret_access_key
116
+
90
117
  def initialize(h)
91
- @access_key_id = h[:access_key_id]
118
+ @access_key_id = h[:access_key_id]
92
119
  @secret_access_key = h[:secret_access_key]
93
120
  end
94
-
95
- attr_reader :access_key_id, :secret_access_key
96
121
  end
97
122
 
123
+ # Endpoint
98
124
  class Endpoint
125
+ # host of the endpoint
126
+ attr_reader :endpoint
127
+ # When the endpoint created at
128
+ attr_reader :created_at
129
+
99
130
  def initialize(h)
100
131
  @endpoint = h[:endpoint]
101
132
  @created_at = h[:created_at]
102
133
  end
103
-
104
- attr_reader :endpoint, :created_at
105
134
  end
106
135
 
136
+ # S3-Bucket Model
107
137
  class Bucket
138
+ # name of bucket
139
+ attr_reader :name
140
+ # name of the bucket's owner
141
+ attr_reader :owner
142
+ # when the bucket created at
143
+ attr_reader :created_at
144
+
108
145
  def initialize(h)
109
- @name = h[:bucket]
110
- @owner = h[:owner]
111
- @created_at = Time.parse(h[:created_at])
146
+ @name = h[:bucket]
147
+ @owner = h[:owner]
148
+ @created_at = h[:created_at]
112
149
  end
113
150
  end
114
151
  end
@@ -26,13 +26,15 @@ require "time"
26
26
  require_relative "leofs_manager_client/leofs_manager_models"
27
27
 
28
28
  module LeoFSManager
29
- VERSION = "0.2.2"
29
+ VERSION = "0.2.4"
30
30
 
31
+ # Class for close TCP socket on GC.
31
32
  class Remover
32
33
  def initialize(data)
33
34
  @data = data
34
35
  end
35
36
 
37
+ # it will be called on GC.
36
38
  def call(*args)
37
39
  socket = @data[0]
38
40
  socket.close if socket && !socket.closed?
@@ -41,7 +43,6 @@ module LeoFSManager
41
43
  end
42
44
 
43
45
  class Client
44
- ## LeoFS-related commands:
45
46
  CMD_VERSION = "version"
46
47
  CMD_STATUS = "status %s"
47
48
  CMD_START = "start"
@@ -60,131 +61,152 @@ module LeoFSManager
60
61
  CMD_S3_ADD_BUCKET = "s3-add-bucket %s %s"
61
62
  CMD_S3_GET_BUCKETS = "s3-get-buckets"
62
63
 
63
- ## ======================================================================
64
- ## APIs
65
- ## ======================================================================
66
- ## @doc Constructor
67
- ##
64
+ # ======================================================================
65
+ # APIs
66
+ # ======================================================================
67
+ # Constructor
68
+ #
68
69
  def initialize(*servers)
69
70
  @servers = parse_servers(servers)
70
71
  set_current_server
71
72
  final = Remover.new(@data = [])
72
73
  ObjectSpace.define_finalizer(self, final)
73
- @mutex = Mutex.new
74
74
  connect
75
75
  end
76
76
 
77
- attr_reader :servers, :current_server
77
+ # servers to connect
78
+ attr_reader :servers
79
+ # the server currently connected
80
+ attr_reader :current_server
78
81
 
79
- ## @doc Retrieve LeoFS's version from LeoFS Manager
80
- ## @return version
82
+ # Retrieve LeoFS's version from LeoFS Manager
83
+ # Return::
84
+ # Version of LeoFS
81
85
  def version
82
86
  h = sender(CMD_VERSION)
83
87
  return h[:result]
84
88
  end
85
89
 
86
- ## @doc Retrieve LeoFS's system status from LeoFS Manager
87
- ## @return
90
+ # Retrieve LeoFS's system status from LeoFS Manager
91
+ # Return::
92
+ # Status
88
93
  def status(node=nil)
89
94
  Status.new(sender(CMD_STATUS % node))
90
95
  end
91
96
 
92
- ## @doc Launch LeoFS's storage cluster
93
- ## @return nil
97
+ # Launch LeoFS's storage cluster
98
+ # Return::
99
+ # _nil_
94
100
  def start
95
101
  sender(CMD_START)
96
102
  nil
97
103
  end
98
104
 
99
- ## @doc Leave a node from the storage cluster
100
- ##
105
+ # Leave a node from the storage cluster
106
+ # Return::
107
+ # _nil_
101
108
  def detach(node)
102
109
  sender(CMD_DETACH % node)
103
110
  nil
104
111
  end
105
112
 
106
- ## @doc Suspend a node in the storage cluster
107
- ##
113
+ # Suspend a node in the storage cluster
114
+ # Return::
115
+ # _nil_
108
116
  def suspend(node)
109
117
  sender(CMD_SUSPEND % node)
110
118
  nil
111
119
  end
112
120
 
113
- ## @doc Resume a node in the storage cluster
114
- ##
121
+ # Resume a node in the storage cluster
122
+ # Return::
123
+ # _nil_
115
124
  def resume(node)
116
125
  sender(CMD_RESUME % node)
117
126
  nil
118
127
  end
119
128
 
120
- ## @doc Execute 'rebalance' in the storage cluster
121
- ##
129
+ # Execute 'rebalance' in the storage cluster
130
+ # Return::
131
+ # _nil_
122
132
  def rebalance
123
133
  sender(CMD_REBALANCE)
124
134
  nil
125
135
  end
126
136
 
127
- ## @doc Retrieve assigned file information
128
- ##
137
+ # Retrieve assigned file information
138
+ # Return::
139
+ # Array of AssignedFile
129
140
  def whereis(path)
130
- whereis = sender(CMD_WHEREIS % path)[:buckets]
131
- whereis.map {|h| WhereInfo.new(h)}
141
+ assigned_info = sender(CMD_WHEREIS % path)[:assigned_info]
142
+ assigned_info.map {|h| AssignedFile.new(h)}
132
143
  end
133
144
 
134
- ## @doc Retrieve storage status from the storage
135
- ##
145
+ # Retrieve storage status from the storage
146
+ # Return::
147
+ # StorageStat
136
148
  def du(node)
137
- DiskUsage.new(sender(CMD_DU % node))
149
+ StorageStat.new(sender(CMD_DU % node))
138
150
  end
139
151
 
140
- ## @doc Execute 'compaction'
141
- ##
152
+ # Execute 'compaction'
153
+ # Return::
154
+ # _nil_
142
155
  def compact(node)
143
156
  sender(CMD_COMPACT % node)
144
157
  nil
145
158
  end
146
159
 
147
- ## @doc Purge a cache in gateways
148
- ##
160
+ # Purge a cache in gateways
161
+ # Return::
162
+ # _nil_
149
163
  def purge(path)
150
164
  sender(CMD_PURGE % path)
151
165
  nil
152
166
  end
153
167
 
154
- ## @doc Generate credential for LeoFS
155
- ##
168
+ # Generate credential for LeoFS
169
+ # Return::
170
+ # Credential
156
171
  def s3_gen_key(user_id)
157
172
  Credential.new(sender(CMD_S3_GEN_KEY % user_id))
158
173
  end
159
174
 
160
- ## @doc Insert an endpoint in the system
161
- ##
175
+ # Insert an endpoint in the system
176
+ # Return::
177
+ # _nil_
162
178
  def s3_set_endpoint(endpoint)
163
179
  sender(CMD_S3_SET_ENDPOINT % endpoint)
164
180
  nil
165
181
  end
166
182
 
167
- ## @doc Remove an endpoint from the system
168
- ##
183
+ # Remove an endpoint from the system
184
+ # Return::
185
+ # _nil_
169
186
  def s3_del_endpoint(endpoint)
170
187
  sender(CMD_S3_DEL_ENDPOINT % endpoint)
171
188
  nil
172
189
  end
173
190
 
174
- ## @doc Retrieve an endpoint in the system
175
- ##
191
+ # Retrieve an endpoint in the system
192
+ # Return::
193
+ # Array of Endpoint
176
194
  def s3_get_endpoints
177
195
  endpoints = sender(CMD_S3_GET_ENDPOINTS)[:endpoints]
178
196
  endpoints.map {|endpoint| Endpoint.new(endpoint) }
179
197
  end
180
-
198
+
199
+ # Add an Bucket in the system
200
+ # Return::
201
+ # _nil_
181
202
  def s3_add_bucket(bucket_name, access_key_id)
182
203
  sender(CMD_S3_ADD_BUCKET % [bucket_name, access_key_id])
183
204
  nil
184
205
  end
185
206
 
186
- ## @doc Retrieve all buckets from the system
187
- ##
207
+ # Retrieve all buckets from the system
208
+ # Return::
209
+ # Array of Bucket
188
210
  def s3_get_buckets
189
211
  buckets = sender(CMD_S3_GET_BUCKETS)[:buckets]
190
212
  buckets.map {|bucket| Bucket.new(bucket) }
@@ -210,15 +232,12 @@ module LeoFSManager
210
232
  end
211
233
  end
212
234
 
213
- ## @doc
214
- ##
215
235
  def set_current_server
216
236
  raise Error, "No servers to connect" if @servers.empty?
217
237
  @current_server = @servers.first
218
238
  end
219
239
 
220
- ## @doc Connect to LeoFS Manager
221
- ##
240
+ # Connect to LeoFS Manager
222
241
  def connect
223
242
  retry_count = 0
224
243
  begin
@@ -239,15 +258,13 @@ module LeoFSManager
239
258
  end
240
259
  end
241
260
 
242
- ## @doc Send a request to LeoFS Manager
243
- ## @return Hash
261
+ # Send a request to LeoFS Manager
262
+ # Return::
263
+ # Hash
244
264
  def sender(command)
245
265
  begin
246
- response = nil
247
- @mutex.synchronize do
248
- @socket.puts command
249
- response = JSON.parse(@socket.gets, symbolize_names: true)
250
- end
266
+ @socket.puts command
267
+ response = JSON.parse(@socket.gets, symbolize_names: true)
251
268
  rescue => ex
252
269
  raise "An Error occured: #{ex.class} (server: #{@current_server})\n#{ex.message}"
253
270
  end
@@ -257,7 +274,7 @@ module LeoFSManager
257
274
  end
258
275
  end
259
276
 
260
-
277
+ # This section runs only when the file executed directly.
261
278
  if __FILE__ == $PROGRAM_NAME
262
279
  require "pp"
263
280
 
@@ -62,7 +62,7 @@ module Dummy
62
62
  }.to_json
63
63
 
64
64
  Whereis = {
65
- :buckets => [
65
+ :assigned_info => [
66
66
  {
67
67
  :node => "storage_0@127.0.0.1",
68
68
  :vnode_id => "",
@@ -162,14 +162,14 @@ describe LeoFSManager do
162
162
  end
163
163
 
164
164
  it "returns SystemInfo" do
165
- @manager.status.system_info.should be_a Status::SystemInfo
165
+ @manager.status.system_info.should be_a Status::System
166
166
  end
167
167
 
168
168
  it "returns node list" do
169
169
  node_list = @manager.status.node_list
170
170
  node_list.should be_a Array
171
171
  node_list.each do |node|
172
- node.should be_a Status::NodeInfo
172
+ node.should be_a Status::Node
173
173
  end
174
174
  end
175
175
  end
@@ -179,14 +179,14 @@ describe LeoFSManager do
179
179
  result = @manager.whereis("path")
180
180
  result.should be_a Array
181
181
  result.each do |where_info|
182
- where_info.should be_a WhereInfo
182
+ where_info.should be_a AssignedFile
183
183
  end
184
184
  end
185
185
  end
186
186
 
187
187
  describe "#du" do
188
188
  it "returns DiskUsage" do
189
- @manager.du("node").should be_a DiskUsage
189
+ @manager.du("node").should be_a StorageStat
190
190
  end
191
191
  end
192
192
 
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.2
4
+ version: 0.2.4
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-09-24 00:00:00.000000000 Z
13
+ date: 2012-09-27 00:00:00.000000000 Z
14
14
  dependencies: []
15
15
  description: Client for LeoFS Manager
16
16
  email: