vmware_web_service 2.0.3 → 3.1.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.
- checksums.yaml +4 -4
- data/lib/VMwareWebService/MiqHostDatastoreSystem.rb +5 -1
- data/lib/VMwareWebService/MiqVim.rb +80 -56
- data/lib/VMwareWebService/MiqVimClientBase.rb +11 -10
- data/lib/VMwareWebService/MiqVimCluster.rb +6 -2
- data/lib/VMwareWebService/MiqVimDataStore.rb +9 -6
- data/lib/VMwareWebService/MiqVimDump.rb +1 -1
- data/lib/VMwareWebService/MiqVimEventHistoryCollector.rb +5 -1
- data/lib/VMwareWebService/MiqVimEventMonitor.rb +22 -20
- data/lib/VMwareWebService/MiqVimFolder.rb +15 -11
- data/lib/VMwareWebService/MiqVimHost.rb +15 -13
- data/lib/VMwareWebService/MiqVimInventory.rb +78 -79
- data/lib/VMwareWebService/MiqVimPerfHistory.rb +13 -10
- data/lib/VMwareWebService/MiqVimUpdate.rb +50 -50
- data/lib/VMwareWebService/MiqVimVdlMod.rb +7 -7
- data/lib/VMwareWebService/MiqVimVm.rb +102 -101
- data/lib/VMwareWebService/VimService.rb +5 -2
- data/lib/VMwareWebService/VixDiskLib/VixDiskLib.rb +15 -7
- data/lib/VMwareWebService/VixDiskLib/VixDiskLibServer.rb +15 -15
- data/lib/VMwareWebService/VixDiskLib/vdl_wrapper.rb +26 -27
- data/lib/VMwareWebService/exception.rb +0 -2
- data/lib/VMwareWebService/logging.rb +16 -0
- data/lib/VMwareWebService/version.rb +1 -1
- data/lib/vmware_web_service.rb +2 -0
- metadata +15 -48
- data/lib/VMwareWebService/DMiqVim.rb +0 -95
- data/lib/VMwareWebService/DMiqVimSync.rb +0 -45
- data/lib/VMwareWebService/MiqVimBroker.rb +0 -581
- data/lib/VMwareWebService/MiqVimBrokerMods.rb +0 -222
- data/lib/VMwareWebService/MiqVimCoreUpdater.rb +0 -269
- data/lib/VMwareWebService/miq_fault_tolerant_vim.rb +0 -246
@@ -11,19 +11,17 @@ require 'VMwareWebService/VixDiskLib/vdl_wrapper'
|
|
11
11
|
class VixDiskLibError < RuntimeError
|
12
12
|
end
|
13
13
|
|
14
|
-
LOG_FILE = ENV["LOG_FILE"]
|
15
|
-
|
16
|
-
$vim_log = Logger.new LOG_FILE
|
17
|
-
|
18
14
|
class VDDKFactory
|
19
15
|
include DRb::DRbUndumped
|
20
16
|
attr_accessor :shutdown
|
21
17
|
attr_accessor :running
|
18
|
+
attr_reader :logger
|
22
19
|
|
23
20
|
def initialize
|
24
21
|
@shutdown = nil
|
25
22
|
@started = nil
|
26
23
|
@running = nil
|
24
|
+
@logger = Logger.new($stdout)
|
27
25
|
end
|
28
26
|
|
29
27
|
def init
|
@@ -45,14 +43,14 @@ class VDDKFactory
|
|
45
43
|
thr = DRb.thread
|
46
44
|
DRb.stop_service
|
47
45
|
thr.join unless thr.nil?
|
48
|
-
|
46
|
+
logger.info "Finished shutting down DRb"
|
49
47
|
end
|
50
48
|
|
51
49
|
def shut_down_service(msg)
|
52
|
-
|
50
|
+
logger.info msg.to_s
|
53
51
|
VdlWrapper.__exit__ if @started
|
54
52
|
@running = true
|
55
|
-
|
53
|
+
logger.info "VdlWrapper.__exit__ finished"
|
56
54
|
shut_down_drb
|
57
55
|
end
|
58
56
|
|
@@ -95,11 +93,13 @@ begin
|
|
95
93
|
STDOUT.sync = true
|
96
94
|
STDERR.sync = true
|
97
95
|
|
96
|
+
logger = Logger.new($stdout)
|
97
|
+
|
98
98
|
DRb.start_service(nil, vddk)
|
99
99
|
DRb.primary_server.verbose = true
|
100
100
|
uri_used = DRb.uri
|
101
101
|
Thread.abort_on_exception = true
|
102
|
-
|
102
|
+
logger.info "Started DRb service on URI #{uri_used}"
|
103
103
|
#
|
104
104
|
# Now write the URI used back to the parent (client) process to let it know which port was selected.
|
105
105
|
#
|
@@ -115,21 +115,21 @@ begin
|
|
115
115
|
trap('TERM') { vddk.shut_down_service("Termination Signal received"); exit }
|
116
116
|
|
117
117
|
Thread.new do
|
118
|
-
|
118
|
+
logger.info "Monitoring Thread"
|
119
119
|
#
|
120
120
|
# This will block until the SmartProxyWorker (our parent) exits
|
121
121
|
#
|
122
122
|
proc_reader.read
|
123
|
-
|
123
|
+
logger.info "Shutting down VixDiskLibServer - Worker has exited"
|
124
124
|
exit
|
125
125
|
end
|
126
126
|
#
|
127
127
|
# If we haven't been marked as started yet, wait for it.
|
128
128
|
# We may return immediately because startup (and more) has already happened.
|
129
129
|
#
|
130
|
-
|
130
|
+
logger.info "calling watchdog for startup"
|
131
131
|
vddk.wait_for_status("started", 1800)
|
132
|
-
|
132
|
+
logger.info "startup has happened, shutdown flag is #{vddk.shutdown}"
|
133
133
|
#
|
134
134
|
# Wait for the DRb server thread to finish before exiting.
|
135
135
|
#
|
@@ -142,8 +142,8 @@ begin
|
|
142
142
|
end
|
143
143
|
|
144
144
|
vddk.shut_down_service("Shutting Down VixDiskLibServer")
|
145
|
-
|
145
|
+
logger.info "Service has stopped"
|
146
146
|
rescue => err
|
147
|
-
|
148
|
-
|
147
|
+
logger.error "VixDiskLibServer ERROR: [#{err}]"
|
148
|
+
logger.debug "VixDiskLibServer ERROR: [#{err.backtrace.join("\n")}]"
|
149
149
|
end
|
@@ -2,16 +2,14 @@ require 'drb/drb'
|
|
2
2
|
require 'sync'
|
3
3
|
require 'ffi-vix_disk_lib/api_wrapper'
|
4
4
|
require 'VMwareWebService/VimTypes'
|
5
|
+
require 'VMwareWebService/logging'
|
5
6
|
require 'time'
|
6
7
|
|
7
|
-
LOG_FILE = ENV["LOG_FILE"]
|
8
|
-
|
9
|
-
$vim_log = Logger.new LOG_FILE
|
10
|
-
|
11
8
|
VixDiskLibApi = FFI::VixDiskLib::ApiWrapper
|
12
9
|
class VdlWrapper
|
13
10
|
extend FFI::VixDiskLib::ApiWrapper
|
14
11
|
include DRb::DRbUndumped
|
12
|
+
include VMwareWebService::Logging
|
15
13
|
|
16
14
|
@initialized = false
|
17
15
|
@server_disk_count = 0
|
@@ -22,9 +20,9 @@ class VdlWrapper
|
|
22
20
|
@vddk = server
|
23
21
|
end
|
24
22
|
|
25
|
-
@info_log = ->(s) {
|
26
|
-
@warn_log = ->(s) {
|
27
|
-
@error_log = ->(s) {
|
23
|
+
@info_log = ->(s) { logger.info "VMware(VixDiskLib): #{s}" }
|
24
|
+
@warn_log = ->(s) { logger.warn "VMware(VixDiskLib): #{s}" }
|
25
|
+
@error_log = ->(s) { logger.error "VMware(VixDiskLib): #{s}" }
|
28
26
|
|
29
27
|
def self.init
|
30
28
|
return if @initialized
|
@@ -34,10 +32,10 @@ class VdlWrapper
|
|
34
32
|
end
|
35
33
|
|
36
34
|
def self.dumpDisks(server_name)
|
37
|
-
|
35
|
+
logger.warn "*** Open VdlDisks for server #{server_name}"
|
38
36
|
@connection.dumpDisks unless @connection.nil? || @connection.serverName != server_name
|
39
37
|
@vddk.running = true
|
40
|
-
|
38
|
+
logger.warn "*** Open VdlDisks end"
|
41
39
|
end
|
42
40
|
|
43
41
|
def self.inc_server_disk_count
|
@@ -53,7 +51,7 @@ class VdlWrapper
|
|
53
51
|
end
|
54
52
|
|
55
53
|
def self.connect(connect_parms)
|
56
|
-
|
54
|
+
logger.info "VdlWrapper.connect: #{connect_parms[:server_name]}"
|
57
55
|
raise VixDiskLibError, "VixDiskLib is not initialized" unless @initialized
|
58
56
|
raise VixDiskLibError, "Already connected to #{@connection.serverName}" if @connection
|
59
57
|
@connection = VdlConnection.new(connect_parms, @vddk)
|
@@ -61,7 +59,7 @@ class VdlWrapper
|
|
61
59
|
end
|
62
60
|
|
63
61
|
def self.__disconnect__(conn_obj)
|
64
|
-
|
62
|
+
logger.info "VdlWrapper.__disconnect__: #{conn_obj.serverName}"
|
65
63
|
raise VixDiskLibError, "VixDiskLib is not initialized" unless @initialized
|
66
64
|
FFI::VixDiskLib::API.disconnect(conn_obj.vdl_connection)
|
67
65
|
@connection = nil
|
@@ -76,7 +74,7 @@ class VdlWrapper
|
|
76
74
|
# the DRb service (this process) to segfault during the exit sequence.
|
77
75
|
#
|
78
76
|
# super
|
79
|
-
|
77
|
+
logger.info "VixDiskLib has exited cleanly"
|
80
78
|
@vddk.running = true
|
81
79
|
@vddk.shutdown = true
|
82
80
|
@initialized = nil
|
@@ -92,7 +90,7 @@ class VdlConnection
|
|
92
90
|
|
93
91
|
def initialize(connect_parms, vddk)
|
94
92
|
@serverName = connect_parms[:server_name]
|
95
|
-
|
93
|
+
logger.info "VdlConnection.initialize: #{@serverName}"
|
96
94
|
@vdl_connection = VixDiskLibApi.connect(connect_parms)
|
97
95
|
@disks = []
|
98
96
|
@disk_lock = Sync.new
|
@@ -100,10 +98,10 @@ class VdlConnection
|
|
100
98
|
end
|
101
99
|
|
102
100
|
def disconnect
|
103
|
-
|
101
|
+
logger.info "VdlConnection.disconnect: #{@serverName}"
|
104
102
|
@disk_lock.synchronize(:EX) do
|
105
103
|
if !@vdl_connection
|
106
|
-
|
104
|
+
logger.warn "VDLConnection.disconnect: server: #{@serverName} not connected"
|
107
105
|
else
|
108
106
|
__close_disks__
|
109
107
|
VdlWrapper.__disconnect__(self)
|
@@ -119,7 +117,7 @@ class VdlConnection
|
|
119
117
|
@vddk.running = true
|
120
118
|
@disk_lock.sync_lock(:SH) if (unlock = !@disk_lock.sync_locked?)
|
121
119
|
@disks.each do |d|
|
122
|
-
|
120
|
+
logger.warn " VdlDisk: #{d.path}, opened: #{d.timeStamp}"
|
123
121
|
end
|
124
122
|
ensure
|
125
123
|
@disk_lock.sync_unlock if unlock
|
@@ -132,11 +130,11 @@ class VdlConnection
|
|
132
130
|
disk = VdlDisk.new(self, path, flags)
|
133
131
|
@disks << disk
|
134
132
|
nd = VdlWrapper.inc_server_disk_count
|
135
|
-
|
136
|
-
if nd >= MAX_DISK_WARN
|
137
|
-
|
138
|
-
|
139
|
-
|
133
|
+
logger.info "VdlConnection.getDisk: #{@serverName} open disks = #{nd}"
|
134
|
+
if nd >= MAX_DISK_WARN
|
135
|
+
logger.warn "VdlConnection::getDisk: connection to server: #{@serverName}"
|
136
|
+
logger.warn "VdlConnection::getDisk: number of open disks = #{nd}"
|
137
|
+
logger.warn "VdlConnection::getDisk: subsequent open calls may fail"
|
140
138
|
VdlWrapper.dumpDisks(@serverName)
|
141
139
|
end
|
142
140
|
return disk
|
@@ -149,11 +147,11 @@ class VdlConnection
|
|
149
147
|
@vddk.running = true
|
150
148
|
VixDiskLibApi.close(diskObj.handle)
|
151
149
|
if !@vdl_connection
|
152
|
-
|
150
|
+
logger.warn "VDLConnection.disconnect: server: #{@serverName} not connected"
|
153
151
|
else
|
154
152
|
@disks.delete(diskObj)
|
155
153
|
nd = VdlWrapper.dec_server_disk_count
|
156
|
-
|
154
|
+
logger.warn "VdlConnection.__close_disk__: #{@serverName} open disks = #{nd}"
|
157
155
|
end
|
158
156
|
ensure
|
159
157
|
@disk_lock.sync_unlock if unlock
|
@@ -163,7 +161,7 @@ class VdlConnection
|
|
163
161
|
raise VixDiskLibError,
|
164
162
|
"VdlConnection::__close_disks__: exclusive disk lock not held" unless @disk_lock.sync_exclusive?
|
165
163
|
if !@vdl_connection
|
166
|
-
|
164
|
+
logger.warn "VDLConnection.disconnect: server: #{@serverName} not connected"
|
167
165
|
else
|
168
166
|
@disks.each(&:close)
|
169
167
|
end
|
@@ -173,6 +171,7 @@ end # class VdlConnection
|
|
173
171
|
|
174
172
|
class VdlDisk
|
175
173
|
include DRb::DRbUndumped
|
174
|
+
include VMwareWebService::Logging
|
176
175
|
|
177
176
|
attr_reader :path, :flags, :handle, :sectorSize, :timeStamp, :info
|
178
177
|
|
@@ -180,7 +179,7 @@ class VdlDisk
|
|
180
179
|
|
181
180
|
def initialize(conn_obj, path, flags)
|
182
181
|
@time_stamp = Time.now
|
183
|
-
|
182
|
+
logger.debug { "VdlDisk.new <#{object_id}>: opening #{path}" }
|
184
183
|
@connection = conn_obj
|
185
184
|
@handle = VixDiskLibApi.open(@connection.vdl_connection, path, flags)
|
186
185
|
@path = path
|
@@ -196,11 +195,11 @@ class VdlDisk
|
|
196
195
|
end
|
197
196
|
|
198
197
|
def close
|
199
|
-
|
198
|
+
logger.debug { "VdlDisk.close <#{ssId}>: closing #{@path}" }
|
200
199
|
@vddk.running = true
|
201
200
|
@handle_lock.synchronize(:EX) do
|
202
201
|
if !@handle
|
203
|
-
|
202
|
+
logger.debug { "VdlDisk.close: #{@path} not open" }
|
204
203
|
else
|
205
204
|
@connection.__close_disk__(self)
|
206
205
|
@handle = nil
|
@@ -2,8 +2,6 @@ module MiqException
|
|
2
2
|
class Error < RuntimeError; end
|
3
3
|
|
4
4
|
class MiqVimError < Error; end
|
5
|
-
class MiqVimBrokerStaleHandle < MiqVimError; end
|
6
|
-
class MiqVimBrokerUnavailable < MiqVimError; end
|
7
5
|
# MiqVimResourceNotFound is derived from RuntimeError to ensure it gets marshalled over DRB properly.
|
8
6
|
# TODO: Rename MiqException::Error class to avoid issues returning derived error classes over DRB.
|
9
7
|
# Then change MiqVimResourceNotFound to derive from MiqVimError
|
data/lib/vmware_web_service.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vmware_web_service
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ManageIQ Developers
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-02-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -19,7 +19,7 @@ dependencies:
|
|
19
19
|
version: 5.2.4.3
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: '
|
22
|
+
version: '7.0'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -29,7 +29,7 @@ dependencies:
|
|
29
29
|
version: 5.2.4.3
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: '
|
32
|
+
version: '7.0'
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: ffi-vix_disk_lib
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -107,21 +107,7 @@ dependencies:
|
|
107
107
|
- !ruby/object:Gem::Version
|
108
108
|
version: '0'
|
109
109
|
- !ruby/object:Gem::Dependency
|
110
|
-
name:
|
111
|
-
requirement: !ruby/object:Gem::Requirement
|
112
|
-
requirements:
|
113
|
-
- - "~>"
|
114
|
-
- !ruby/object:Gem::Version
|
115
|
-
version: 1.0.0
|
116
|
-
type: :development
|
117
|
-
prerelease: false
|
118
|
-
version_requirements: !ruby/object:Gem::Requirement
|
119
|
-
requirements:
|
120
|
-
- - "~>"
|
121
|
-
- !ruby/object:Gem::Version
|
122
|
-
version: 1.0.0
|
123
|
-
- !ruby/object:Gem::Dependency
|
124
|
-
name: manageiq-password
|
110
|
+
name: manageiq-style
|
125
111
|
requirement: !ruby/object:Gem::Requirement
|
126
112
|
requirements:
|
127
113
|
- - ">="
|
@@ -162,42 +148,26 @@ dependencies:
|
|
162
148
|
- - "~>"
|
163
149
|
- !ruby/object:Gem::Version
|
164
150
|
version: '3.0'
|
165
|
-
- !ruby/object:Gem::Dependency
|
166
|
-
name: rubocop
|
167
|
-
requirement: !ruby/object:Gem::Requirement
|
168
|
-
requirements:
|
169
|
-
- - "~>"
|
170
|
-
- !ruby/object:Gem::Version
|
171
|
-
version: '0.52'
|
172
|
-
type: :development
|
173
|
-
prerelease: false
|
174
|
-
version_requirements: !ruby/object:Gem::Requirement
|
175
|
-
requirements:
|
176
|
-
- - "~>"
|
177
|
-
- !ruby/object:Gem::Version
|
178
|
-
version: '0.52'
|
179
151
|
- !ruby/object:Gem::Dependency
|
180
152
|
name: simplecov
|
181
153
|
requirement: !ruby/object:Gem::Requirement
|
182
154
|
requirements:
|
183
155
|
- - ">="
|
184
156
|
- !ruby/object:Gem::Version
|
185
|
-
version:
|
157
|
+
version: 0.21.2
|
186
158
|
type: :development
|
187
159
|
prerelease: false
|
188
160
|
version_requirements: !ruby/object:Gem::Requirement
|
189
161
|
requirements:
|
190
162
|
- - ">="
|
191
163
|
- !ruby/object:Gem::Version
|
192
|
-
version:
|
164
|
+
version: 0.21.2
|
193
165
|
description: A ruby interface to Vmware Web Services SDK
|
194
|
-
email:
|
166
|
+
email:
|
195
167
|
executables: []
|
196
168
|
extensions: []
|
197
169
|
extra_rdoc_files: []
|
198
170
|
files:
|
199
|
-
- lib/VMwareWebService/DMiqVim.rb
|
200
|
-
- lib/VMwareWebService/DMiqVimSync.rb
|
201
171
|
- lib/VMwareWebService/MiqCustomFieldsManager.rb
|
202
172
|
- lib/VMwareWebService/MiqHostAdvancedOptionManager.rb
|
203
173
|
- lib/VMwareWebService/MiqHostDatastoreSystem.rb
|
@@ -209,11 +179,8 @@ files:
|
|
209
179
|
- lib/VMwareWebService/MiqHostVirtualNicManager.rb
|
210
180
|
- lib/VMwareWebService/MiqVim.rb
|
211
181
|
- lib/VMwareWebService/MiqVimAlarmManager.rb
|
212
|
-
- lib/VMwareWebService/MiqVimBroker.rb
|
213
|
-
- lib/VMwareWebService/MiqVimBrokerMods.rb
|
214
182
|
- lib/VMwareWebService/MiqVimClientBase.rb
|
215
183
|
- lib/VMwareWebService/MiqVimCluster.rb
|
216
|
-
- lib/VMwareWebService/MiqVimCoreUpdater.rb
|
217
184
|
- lib/VMwareWebService/MiqVimCustomizationSpecManager.rb
|
218
185
|
- lib/VMwareWebService/MiqVimDataStore.rb
|
219
186
|
- lib/VMwareWebService/MiqVimDump.rb
|
@@ -238,7 +205,7 @@ files:
|
|
238
205
|
- lib/VMwareWebService/broker_timeout.rb
|
239
206
|
- lib/VMwareWebService/esx_thumb_print.rb
|
240
207
|
- lib/VMwareWebService/exception.rb
|
241
|
-
- lib/VMwareWebService/
|
208
|
+
- lib/VMwareWebService/logging.rb
|
242
209
|
- lib/VMwareWebService/thumb_print.rb
|
243
210
|
- lib/VMwareWebService/vcenter_thumb_print.rb
|
244
211
|
- lib/VMwareWebService/version.rb
|
@@ -4445,23 +4412,23 @@ homepage: https://github.com/ManageIQ/vmware_web_service
|
|
4445
4412
|
licenses:
|
4446
4413
|
- Apache-2.0
|
4447
4414
|
metadata: {}
|
4448
|
-
post_install_message:
|
4415
|
+
post_install_message:
|
4449
4416
|
rdoc_options: []
|
4450
4417
|
require_paths:
|
4451
4418
|
- lib
|
4452
4419
|
required_ruby_version: !ruby/object:Gem::Requirement
|
4453
4420
|
requirements:
|
4454
|
-
- - "
|
4421
|
+
- - ">="
|
4455
4422
|
- !ruby/object:Gem::Version
|
4456
|
-
version:
|
4423
|
+
version: 2.5.0
|
4457
4424
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
4458
4425
|
requirements:
|
4459
4426
|
- - ">="
|
4460
4427
|
- !ruby/object:Gem::Version
|
4461
4428
|
version: '0'
|
4462
4429
|
requirements: []
|
4463
|
-
rubygems_version: 3.
|
4464
|
-
signing_key:
|
4430
|
+
rubygems_version: 3.3.5
|
4431
|
+
signing_key:
|
4465
4432
|
specification_version: 4
|
4466
4433
|
summary: A ruby interface to Vmware Web Services SDK
|
4467
4434
|
test_files: []
|
@@ -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
|