vmware_web_service 2.1.1 → 3.0.0

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 (31) hide show
  1. checksums.yaml +4 -4
  2. data/lib/VMwareWebService/MiqHostDatastoreSystem.rb +5 -1
  3. data/lib/VMwareWebService/MiqVim.rb +58 -56
  4. data/lib/VMwareWebService/MiqVimClientBase.rb +11 -10
  5. data/lib/VMwareWebService/MiqVimCluster.rb +6 -2
  6. data/lib/VMwareWebService/MiqVimDataStore.rb +9 -6
  7. data/lib/VMwareWebService/MiqVimDump.rb +1 -1
  8. data/lib/VMwareWebService/MiqVimEventHistoryCollector.rb +5 -1
  9. data/lib/VMwareWebService/MiqVimEventMonitor.rb +22 -20
  10. data/lib/VMwareWebService/MiqVimFolder.rb +15 -11
  11. data/lib/VMwareWebService/MiqVimHost.rb +15 -13
  12. data/lib/VMwareWebService/MiqVimInventory.rb +78 -79
  13. data/lib/VMwareWebService/MiqVimPerfHistory.rb +13 -10
  14. data/lib/VMwareWebService/MiqVimUpdate.rb +50 -50
  15. data/lib/VMwareWebService/MiqVimVdlMod.rb +7 -7
  16. data/lib/VMwareWebService/MiqVimVm.rb +102 -101
  17. data/lib/VMwareWebService/VimService.rb +5 -2
  18. data/lib/VMwareWebService/VixDiskLib/VixDiskLib.rb +10 -6
  19. data/lib/VMwareWebService/VixDiskLib/VixDiskLibServer.rb +15 -13
  20. data/lib/VMwareWebService/VixDiskLib/vdl_wrapper.rb +26 -25
  21. data/lib/VMwareWebService/exception.rb +0 -2
  22. data/lib/VMwareWebService/logging.rb +16 -0
  23. data/lib/VMwareWebService/version.rb +1 -1
  24. data/lib/vmware_web_service.rb +2 -0
  25. metadata +6 -25
  26. data/lib/VMwareWebService/DMiqVim.rb +0 -95
  27. data/lib/VMwareWebService/DMiqVimSync.rb +0 -45
  28. data/lib/VMwareWebService/MiqVimBroker.rb +0 -581
  29. data/lib/VMwareWebService/MiqVimBrokerMods.rb +0 -222
  30. data/lib/VMwareWebService/MiqVimCoreUpdater.rb +0 -269
  31. data/lib/VMwareWebService/miq_fault_tolerant_vim.rb +0 -246
@@ -1,95 +0,0 @@
1
- require 'VMwareWebService/MiqVim'
2
- require 'VMwareWebService/DMiqVimSync'
3
-
4
- #
5
- # Class used to wrap locked object and return it through DRB.
6
- #
7
- class MiqDrbReturn
8
- attr_accessor :obj, :lock
9
-
10
- def initialize(obj, lock = nil)
11
- @obj = obj
12
- @lock = lock
13
- end
14
- end
15
-
16
- class DMiqVim < MiqVim
17
- alias_method :serverPrivateConnect, :connect
18
- alias_method :serverPrivateDisconnect, :disconnect
19
- alias_method :conditionalCopy, :deepClone
20
-
21
- include DRb::DRbUndumped
22
- include DMiqVimSync
23
-
24
- # @param server [String] DNS name or IP address of the vCenter Server
25
- # @param username [String] Username to connect to the vCenter Server
26
- # @param password [String] Password to connect to the vCenter Server
27
- # @param broker [MiqVimBroker] Instance of the broker worker this connection belongs to
28
- # @param preLoad [Bool] Should the cache be built before returning the connection (default: false)
29
- # @param debugUpdates [Bool] Should we print debug info for each update (default: false)
30
- # @param notifyMethod [Method] A optional method to call for each update (default: nil)
31
- # @param cacheScope [Symbol] A pre-defined set of properties to cache (default: nil)
32
- # @param maxWait [Integer] How many seconds to wait before breaking out of WaitForUpdates (default: 60)
33
- # @param maxObjects [Integer] How many objects to return from each WaitForUpdates page (default: 250)
34
- def initialize(server, username, password, broker, preLoad = false, debugUpdates = false, notifyMethod = nil, cacheScope = nil, maxWait = 60, maxObjects = 250)
35
- super(server, username, password, cacheScope, monitor_updates = true, preLoad, debugUpdates, notifyMethod, maxWait, maxObjects)
36
-
37
- @broker = broker
38
- @connectionShuttingDown = false
39
- @connectionRemoved = false
40
- end
41
-
42
- def monitor(preLoad)
43
- log_prefix = "DMiqVim.monitor (#{@connId})"
44
- begin
45
- monitorUpdates(preLoad)
46
- rescue Exception => err
47
- # if handleSessionNotAuthenticated(err)
48
- # $vim_log.info "#{log_prefix}: Restarting Update Monitor" if $vim_log
49
- # retry
50
- # end
51
- $vim_log.info "#{log_prefix}: returned from monitorUpdates via #{err.class} exception" if $vim_log
52
- @error = err
53
- ensure
54
- $vim_log.info "#{log_prefix}: returned from monitorUpdates" if $vim_log
55
- if @updateMonitorReady && !@broker.shuttingDown
56
- @broker.connTrySync(:EX, server, username) do |key|
57
- @broker.removeMiqVimSS(key, self)
58
- end
59
-
60
- if @notifyMethod
61
- @notifyMethod.call(:server => @server,
62
- :username => @username,
63
- :op => 'MiqVimRemoved',
64
- :error => @error
65
- )
66
- end
67
- end
68
- end
69
- end
70
-
71
- def shutdownConnection
72
- return if @connectionShuttingDown
73
- log_prefix = "DMiqVim.shutdownConnection (#{@connId})"
74
- $vim_log.info "#{log_prefix}: for address=<#{@server}>, username=<#{@username}>...Starting" if $vim_log
75
- @connectionShuttingDown = true
76
- serverPrivateDisconnect if self.isAlive?
77
- $vim_log.info "#{log_prefix}: for address=<#{@server}>, username=<#{@username}>...Complete" if $vim_log
78
- end
79
-
80
- def connectionRemoved?
81
- @connectionRemoved
82
- end
83
-
84
- def connectionRemoved
85
- @connectionRemoved = true
86
- end
87
-
88
- def connect
89
- (true)
90
- end
91
-
92
- def disconnect
93
- (true)
94
- end
95
- end # class DMiqVim
@@ -1,45 +0,0 @@
1
-
2
- module DMiqVimSync
3
- #
4
- # This method is called - with the cacheLock held - when returning an object from the cache to the client.
5
- # It used to produce a full recursive copy of the object before releasing the lock.
6
- # When used in the broker, the DRB layer would then marshal the copy of the object to return it to the remote client.
7
- # This new scheme enables us to hold the cacheLock until after DRB marshals the object, eliminating the need
8
- # for this method to produce a full recursive copy.
9
- #
10
- # The lock count of the cacheLock is incremented, so when this method's caller releases the lock, the lock
11
- # will still be held. The object to be returned and the cacheLock are wraped in a MiqDrbReturn object
12
- # and returned to the DRB layer, which will marshal the object and release the lock. See below.
13
- #
14
- def dupObj(obj)
15
- return(obj) unless @cacheLock.sync_locked?
16
- $vim_log.debug "DMiqVim::dupObj: LOCKING [#{Thread.current.object_id}] <#{obj.object_id}>" if $vim_log.debug?
17
- @cacheLock.sync_lock(:SH)
18
- (MiqDrbReturn.new(obj, @cacheLock))
19
- end
20
- end # module DMiqVimSync
21
-
22
- class DRb::DRbMessage
23
- alias_method :dump_original, :dump
24
-
25
- #
26
- # This is the DRB half of the dupObj locking scheme. If we get a MiqDrbReturn object,
27
- # we marshal the object it wraps and release the lock.
28
- #
29
- def dump(obj, error = false)
30
- #
31
- # Place a temp hold on the object until the client registers it.
32
- #
33
- obj.holdBrokerObj if obj.respond_to?(:holdBrokerObj)
34
-
35
- return(dump_original(obj, error)) unless obj.kind_of?(MiqDrbReturn)
36
- begin
37
- return(dump_original(obj.obj, error))
38
- ensure
39
- if obj.lock && obj.lock.sync_locked?
40
- $vim_log.debug "DRb::DRbMessage.dump: UNLOCKING [#{Thread.current.object_id}] <#{obj.obj.object_id}>" if $vim_log.debug?
41
- obj.lock.sync_unlock
42
- end
43
- end
44
- end
45
- end # class DRb::DRbMessage
@@ -1,581 +0,0 @@
1
- require 'drb'
2
- require 'drb/acl'
3
- require 'sync'
4
- require 'tmpdir'
5
-
6
- require 'VMwareWebService/MiqVimInventory'
7
- require 'VMwareWebService/VimTypes'
8
-
9
- class MiqVimBroker
10
- class VimBrokerIdConv < DRb::DRbIdConv
11
- def to_obj(ref)
12
- obj = super(ref)
13
- if obj.respond_to?(:connectionRemoved?) && obj.connectionRemoved?
14
- $vim_log.info "VimBrokerIdConv: #{obj.class.name} - connection removed"
15
- raise RangeError, "#{ref} is recycled object"
16
- end
17
- obj
18
- end
19
- end
20
-
21
- attr_reader :shuttingDown
22
-
23
- MB = 1048576
24
- DRb::DRbServer.default_load_limit(100 * MB)
25
-
26
- @@preLoad = false
27
- @@debugUpdates = false
28
- @@classModed = false
29
- @@notifyMethod = nil
30
- @@updateDelay = nil
31
- @@cacheScope = :cache_scope_full
32
- @@selectorHash = {}
33
- @@maxWait = 60
34
- @@maxObjects = 250
35
-
36
- def initialize(mode = :client, uri = nil)
37
- if mode == :client
38
- require 'rubygems'
39
- require 'httpclient' # needed for exception classes
40
- require 'VMwareWebService/MiqVimDump'
41
- require 'VMwareWebService/MiqVimVdlMod'
42
- #
43
- # Modify the meta-class of DRb::DRbObject
44
- # so we can alias class methods
45
- #
46
- unless @@classModed
47
- class <<DRb::DRbObject
48
- alias_method :new_with_original, :new_with
49
- def new_with(uri, ref)
50
- obj = new_with_original(uri, ref)
51
- obj.extend(MiqVimVdlVcConnectionMod) if obj.respond_to?(:vdlVcConnection)
52
- obj.registerBrokerObj($$) if obj.respond_to?(:registerBrokerObj)
53
- (obj)
54
- end
55
- end
56
-
57
- DRb.instance_variable_set(:@mutex, Sync.new)
58
- DRb::DRbConn.instance_variable_set(:@mutex, Sync.new)
59
- @@classModed = true
60
- end
61
-
62
- @mode = :client
63
-
64
- # start DRb service if it hasn't been started before
65
- begin
66
- DRb.current_server
67
- rescue DRb::DRbServerNotFound
68
- DRb.start_service
69
- end
70
-
71
- @broker = DRbObject.new(nil, uri)
72
- elsif mode == :server
73
- require 'timeout'
74
- require 'VMwareWebService/broker_timeout'
75
-
76
- unless @@classModed
77
- DRb.instance_variable_set(:@mutex, sync_for_drb)
78
- DRb::DRbConn.instance_variable_set(:@mutex, sync_for_drb_drbconn)
79
- end
80
- @@classModed = true
81
-
82
- require 'VMwareWebService/MiqVimBrokerMods' # only needed by the server
83
- @mode = :server
84
- @shuttingDown = false
85
-
86
- @connectionHash = {}
87
- @lockHash = {} # Protects individual @connectionHash entries
88
- @connectionLock = connection_lock # Protects @lockHash
89
-
90
- @configLock = config_lock
91
- @selectorHash = @@selectorHash
92
- @cacheScope = @@cacheScope
93
-
94
- acl = ACL.new(%w( deny all allow 127.0.0.1/32 ))
95
- DRb.install_acl(acl)
96
-
97
- Dir::Tmpname.create('MiqVimBroker', nil) do |path|
98
- DRb.start_service("drbunix://#{path}", self, :idconv => VimBrokerIdConv.new)
99
- FileUtils.chmod(0o750, path)
100
- end
101
- else
102
- raise "MiqVimBroker: unrecognized mode #{mode}"
103
- end
104
- end
105
-
106
- def connection_lock
107
- Sync.new
108
- end
109
-
110
- def config_lock
111
- Sync.new
112
- end
113
-
114
- def sync_for_lock_hash(_key)
115
- Sync.new
116
- end
117
-
118
- def sync_for_drb_drbconn
119
- Sync.new
120
- end
121
-
122
- def sync_for_drb
123
- Sync.new
124
- end
125
-
126
- def self.cacheScope
127
- @@cacheScope
128
- end
129
-
130
- def self.cacheScope=(val)
131
- @@cacheScope = val
132
- end
133
-
134
- attr_reader :cacheScope
135
-
136
- attr_writer :cacheScope
137
-
138
- #
139
- # The setSelector() and removeSelector() class methods, set the Selector specs that will be inherited
140
- # by all subsequent MiqVimBroker instances.
141
- #
142
- # Should only be called on the server-side.
143
- #
144
- def self.setSelector(selSpec)
145
- raise "MiqVimBroker.setSelector: selSpec must be a hash, received #{selSpec.class}" unless selSpec.kind_of?(Hash)
146
- selSpec.each_key do |k|
147
- raise "MiqVimBroker.setSelector: selSpec keys must be symbols, received #{k.class}" unless k.kind_of?(Symbol)
148
- end
149
- ov = nil
150
- selSpec.each_value do |v|
151
- if v.kind_of?(Array)
152
- v.each do |vv|
153
- unless vv.kind_of?(String)
154
- ov = vv
155
- break
156
- end
157
- end
158
- else
159
- ov = v unless v.kind_of?(String)
160
- end
161
- raise "MiqVimBroker.setSelector: selSpec values must be strings or arrays of strings, received #{ov.class}" unless ov.nil?
162
- end
163
- @@selectorHash.merge!(selSpec)
164
- end
165
-
166
- def self.removeSelector(selName)
167
- remKeys = nil
168
- if selName.kind_of?(Symbol)
169
- remKeys = [selName]
170
- elsif selName.kind_of?(Hash)
171
- remKeys = selName.keys
172
- elsif selName.kind_of?(Array)
173
- remKeys = selName
174
- else
175
- raise "MiqVimBroker.removeSelector: selName must be a symbol, hash or array, received #{selName.class}"
176
- end
177
- remKeys.each do |rk|
178
- raise "MiqVimBroker.removeSelector: keys must be symbols, received #{rk.class}" unless rk.kind_of?(Symbol)
179
- end
180
-
181
- remKeys.each do |rk|
182
- @@selectorHash.delete(rk)
183
- end
184
- end
185
-
186
- #
187
- # The setSelector() and removeSelector() instance methods, set the Selector specs that will be inherited
188
- # by all subsequent connections.
189
- #
190
- def setSelector(selSpec)
191
- if @mode == :client
192
- return @broker.setSelector(selSpec)
193
- end
194
-
195
- raise "setSelector: selSpec must be a hash, received #{selSpec.class}" unless selSpec.kind_of?(Hash)
196
- selSpec.each_key do |k|
197
- raise "setSelector: selSpec keys must be symbols, received #{k.class}" unless k.kind_of?(Symbol)
198
- end
199
- ov = nil
200
- selSpec.each_value do |v|
201
- if v.kind_of?(Array)
202
- v.each do |vv|
203
- unless vv.kind_of?(String)
204
- ov = vv
205
- break
206
- end
207
- end
208
- else
209
- ov = v unless v.kind_of?(String)
210
- end
211
- raise "setSelector: selSpec values must be strings or arrays of strings, received #{ov.class}" unless ov.nil?
212
- end
213
-
214
- @configLock.synchronize(:EX) do
215
- @selectorHash.merge!(selSpec)
216
- end
217
- end
218
-
219
- def removeSelector(selName)
220
- if @mode == :client
221
- return @broker.removeSelector(selName)
222
- end
223
-
224
- remKeys = nil
225
- if selName.kind_of?(Symbol)
226
- remKeys = [selName]
227
- elsif selName.kind_of?(Hash)
228
- remKeys = selName.keys
229
- elsif selName.kind_of?(Array)
230
- remKeys = selName
231
- else
232
- raise "removeSelector: selName must be a symbol, hash or array, received #{selName.class}"
233
- end
234
- remKeys.each do |rk|
235
- raise "removeSelector: keys must be symbols, received #{rk.class}" unless rk.kind_of?(Symbol)
236
- end
237
-
238
- @configLock.synchronize(:EX) do
239
- remKeys.each do |rk|
240
- @selectorHash.delete(rk)
241
- end
242
- end
243
- end
244
-
245
- def self.preLoad=(val)
246
- @@preLoad = val
247
- end
248
-
249
- def self.preLoad
250
- @@preLoad
251
- end
252
-
253
- def self.debugUpdates=(val)
254
- @@debugUpdates = val
255
- end
256
-
257
- def self.debugUpdates
258
- @@debugUpdates
259
- end
260
-
261
- #
262
- # Instance method changes the debugUpdates value of existing connections.
263
- #
264
- def debugUpdates=(val)
265
- return if @mode == :client
266
- @connectionHash.keys.each do |key|
267
- @lockHash[key].synchronize(:SH) do
268
- next if (vim = @connectionHash[key]).nil?
269
- vim.debugUpdates = val
270
- end
271
- end
272
- end
273
-
274
- def self.notifyMethod=(val)
275
- @@notifyMethod = val
276
- end
277
-
278
- def self.notifyMethod
279
- @@notifyMethod
280
- end
281
-
282
- #
283
- # Instance method changes the notifyMethod value of existing connections.
284
- #
285
- def notifyMethod=(val)
286
- return if @mode == :client
287
- @connectionHash.keys.each do |key|
288
- @lockHash[key].synchronize(:SH) do
289
- next if (vim = @connectionHash[key]).nil?
290
- vim.notifyMethod = val
291
- end
292
- end
293
- end
294
-
295
- def self.updateDelay=(val)
296
- @@updateDelay = val
297
- end
298
-
299
- def self.updateDelay
300
- @@updateDelay
301
- end
302
-
303
- #
304
- # Instance method changes the updateDelay value of existing connections.
305
- #
306
- def updateDelay=(val)
307
- return if @mode == :client
308
- @connectionHash.keys.each do |key|
309
- @lockHash[key].synchronize(:SH) do
310
- next if (vim = @connectionHash[key]).nil?
311
- vim.updateDelay = val
312
- end
313
- end
314
- end
315
-
316
- def self.maxWait=(val)
317
- @@maxWait = val
318
- end
319
-
320
- def self.maxWait
321
- @@maxWait
322
- end
323
-
324
- def self.maxObjects=(val)
325
- @@maxObjects = val
326
- end
327
-
328
- def self.maxObjects
329
- @@maxObjects
330
- end
331
-
332
- def releaseSession(sessionId)
333
- if @mode == :client
334
- $vim_log.info "Client releaseSession: #{sessionId}"
335
- @broker.releaseSession(sessionId)
336
- else
337
- $vim_log.info "Server releaseSession: #{sessionId}"
338
- $miqBrokerObjRegistry[sessionId].dup.each(&:release)
339
- end
340
- end
341
-
342
- def objectCounts
343
- if @mode == :client
344
- @broker.objectCounts
345
- else
346
- $miqBrokerObjRegistryLock.synchronize(:SH) do
347
- return $miqBrokerObjCounts.dup
348
- end
349
- end
350
- end
351
-
352
- def self.connectionKey(server, username)
353
- "#{server}_#{username}"
354
- end
355
-
356
- def connectionKey(server, username)
357
- self.class.connectionKey(server, username)
358
- end
359
-
360
- def lockHash(key)
361
- @connectionLock.synchronize(:EX) do
362
- raise "MiqVimBroker is shutting down" if @shuttingDown
363
- #
364
- # Once set, @lockHash[key] doesn't change.
365
- #
366
- @lockHash[key] ||= sync_for_lock_hash(key)
367
- end
368
- end
369
-
370
- def connSync(mode, server, username, &block)
371
- key = connectionKey(server, username)
372
- lock = lockHash(key)
373
-
374
- begin
375
- lock.sync_lock(mode)
376
- if block.arity < 1
377
- block.call
378
- elsif block.arity == 1
379
- block.call(key)
380
- elsif block.arity == 2
381
- block.call(key, @connectionHash[key])
382
- else
383
- raise "MiqVimBroker.connSync: unexpected number of block args: #{block.arity}"
384
- end
385
- ensure
386
- lock.sync_unlock
387
- end
388
- end
389
-
390
- def connTrySync(mode, server, username, &block)
391
- key = connectionKey(server, username)
392
- lock = lockHash(key)
393
-
394
- begin
395
- locked = lock.sync_try_lock(mode)
396
- return unless locked
397
-
398
- if block.arity < 1
399
- block.call
400
- elsif block.arity == 1
401
- block.call(key)
402
- elsif block.arity == 2
403
- block.call(key, @connectionHash[key])
404
- else
405
- raise "MiqVimBroker.connTrySync: unexpected number of block args: #{block.arity}"
406
- end
407
- ensure
408
- lock.sync_unlock if locked
409
- end
410
- end
411
-
412
- def getMiqVim(server, username, password)
413
- if @mode == :client
414
- vim = @broker.getMiqVim(server, username, password)
415
- vim.extend(MiqVimDump)
416
- vim.extend(MiqVimVdlConnectionMod)
417
- return(vim)
418
- else # :server
419
- connSync(:EX, server, username) do |key, vim|
420
- if vim
421
- $vim_log.info "MiqVimBroker.getMiqVim: found connection for #{key}"
422
- if vim.isAlive?
423
- $vim_log.info "MiqVimBroker.getMiqVim: returning existing connection for #{key}"
424
- return(vim)
425
- end
426
- $vim_log.info "MiqVimBroker.getMiqVim: existing connection for #{key} not alive"
427
- removeMiqVimSS(key, vim)
428
- end
429
- begin
430
- vim = DMiqVim.new(server.untaint, username, password, self, @@preLoad, @@debugUpdates, @@notifyMethod, @cacheScope, @@maxWait, @@maxObjects)
431
- vim.updateDelay = @@updateDelay if @@updateDelay
432
- vim.setSelector(@selectorHash) unless @selectorHash.empty?
433
- $vim_log.info "MiqVimBroker.getMiqVim: returning new connection for #{key}"
434
- @connectionHash[key] = vim
435
- return(vim)
436
- rescue Exception => err
437
- $vim_log.error "MiqVimBroker.getMiqVim: failed to create new connection for #{key}"
438
- $vim_log.error "#{err.class}: #{err}"
439
- if $vim_log.debug?
440
- $vim_log.debug "Stack trace START"
441
- $vim_log.debug err.backtrace.join("\n")
442
- $vim_log.debug "Stack trace END"
443
- end
444
- raise err
445
- end
446
- end
447
- end # :server
448
- end
449
-
450
- def removeMiqVim(server, username)
451
- if @mode == :client
452
- @broker.removeMiqVim(server, username)
453
- return
454
- end
455
-
456
- # server
457
- log_prefix = "MiqVimBroker.removeMiqVim"
458
- $vim_log.info "#{log_prefix}: client request to remove connection (#{server}, #{username})...Starting"
459
- connSync(:EX, server, username) do |key, vim|
460
- removeMiqVimSS(key, vim)
461
- end
462
- $vim_log.info "#{log_prefix}: client request to remove connection (#{server}, #{username})...Comolete"
463
- end
464
-
465
- #
466
- # Server-side removal of VIM connection.
467
- # Must be called within a connSync(:EX, server, username) context.
468
- #
469
- def removeMiqVimSS(key, vim)
470
- log_prefix = "MiqVimBroker.removeMiqVimSS"
471
- $vim_log.info "#{log_prefix}: removing connection for #{key}...Starting"
472
-
473
- if @shuttingDown
474
- $vim_log.info "#{log_prefix}: not removing connection for #{key} - broker shutting down"
475
- return
476
- end
477
- if vim.nil?
478
- $vim_log.info "#{log_prefix}: not removing connection for #{key} - connection not found"
479
- return
480
- end
481
- if vim.connectionRemoved?
482
- $vim_log.info "#{log_prefix}: not removing connection for #{key} - connection already removed"
483
- return
484
- end
485
-
486
- vim.shutdownConnection
487
- $miqBrokerObjRegistryByConn[key].dup.each(&:release)
488
- @connectionHash.delete(key)
489
- vim.connectionRemoved
490
-
491
- $vim_log.info "#{log_prefix}: removing connection for #{key}...Complete"
492
- end
493
-
494
- def shutdown
495
- raise "MiqVimBroker: shutdown cannot be called from client" if @mode == :client
496
- log_prefix = "MiqVimBroker.shutdown"
497
- $vim_log.info "#{log_prefix}...Starting"
498
- @connectionLock.synchronize(:EX) do
499
- @shuttingDown = true
500
- end
501
- @connectionHash.keys.each do |id|
502
- @lockHash[id].synchronize(:EX) do
503
- next if (vim = @connectionHash[id]).nil?
504
- vim.shutdownConnection
505
- @connectionHash.delete(id)
506
- vim.connectionRemoved
507
- end
508
- end
509
- DRb.stop_service
510
- $vim_log.info "#{log_prefix}...Complete"
511
- end
512
-
513
- def serverAlive?
514
- if @mode == :client
515
- begin
516
- return @broker.serverAlive?
517
- rescue DRb::DRbConnError
518
- return false
519
- end
520
- end
521
- true
522
- end
523
-
524
- def connectionInfo
525
- return @broker.connectionInfo if @mode == :client
526
-
527
- # server
528
- ra = []
529
- @connectionHash.keys.each do |key|
530
- @lockHash[key].synchronize(:SH) do
531
- next if (vim = @connectionHash[key]).nil?
532
- ra << [vim.server, vim.username]
533
- end
534
- end
535
- ra
536
- end
537
-
538
- def logStatus
539
- if @mode == :client
540
- @broker.logStatus
541
- return
542
- end
543
-
544
- return unless $vim_log.info?
545
-
546
- # server
547
- $vim_log.info "MiqVimBroker status start"
548
- $vim_log.info "\tMiqVimBroker: Threads = #{Thread.list.length}"
549
-
550
- $vim_log.info "\tMiqVimBroker client object counts by type:"
551
- objectCounts.each { |t, c| $vim_log.info "\t\t#{t}: #{c}" }
552
- $vim_log.info "\tEnd MiqVimBroker client object counts by type"
553
-
554
- brokerCacheSz = 0
555
-
556
- $vim_log.info "\tMiqVimBroker open connections: #{@connectionHash.keys.length}"
557
- @connectionHash.keys.each do |k|
558
- @lockHash[k].synchronize(:SH) do
559
- next if (vim = @connectionHash[k]).nil?
560
- $vim_log.info "\t\tMiqVimBroker connection #{k} cache counts:"
561
- # vim.logCacheCounts("\t\t\t")
562
- brokerCacheSz += vim.cacheStats("\t\t\t#{k} - ")
563
- $vim_log.info "\t\tEnd MiqVimBroker connection #{k} cache counts"
564
- end
565
- end
566
- $vim_log.info "\tEnd MiqVimBroker open connections"
567
- $vim_log.info "MiqVimBroker status end - Total broker cache size = #{brokerCacheSz}"
568
- end
569
-
570
- def forceGC
571
- if @mode == :client
572
- @broker.forceGC
573
- return
574
- end
575
-
576
- log_prefix = "MiqVimBroker.forceGC"
577
- $vim_log.info "#{log_prefix}: GC.start...Starting"
578
- GC.start
579
- $vim_log.info "#{log_prefix}: GC.start...Complete"
580
- end
581
- end # class MiqVimBroker