class VdlConnection

Constants

MAX_DISK_WARN

Attributes

serverName[R]
vddk[R]
vdl_connection[R]

Public Class Methods

new(connect_parms, vddk) click to toggle source
# File lib/VMwareWebService/VixDiskLib/vdl_wrapper.rb, line 91
def initialize(connect_parms, vddk)
  @serverName     = connect_parms[:server_name]
  logger.info "VdlConnection.initialize: #{@serverName}"
  @vdl_connection  = VixDiskLibApi.connect(connect_parms)
  @disks           = []
  @disk_lock       = Sync.new
  @vddk            = vddk
end

Public Instance Methods

__close_disk__(diskObj) click to toggle source
# File lib/VMwareWebService/VixDiskLib/vdl_wrapper.rb, line 144
def __close_disk__(diskObj)
  @disk_lock.sync_lock(:EX) if (unlock = !@disk_lock.sync_exclusive?)

  @vddk.running = true
  VixDiskLibApi.close(diskObj.handle)
  if !@vdl_connection
    logger.warn "VDLConnection.disconnect: server: #{@serverName} not connected"
  else
    @disks.delete(diskObj)
    nd = VdlWrapper.dec_server_disk_count
    logger.warn "VdlConnection.__close_disk__: #{@serverName} open disks = #{nd}"
  end
ensure
  @disk_lock.sync_unlock if unlock
end
disconnect() click to toggle source
# File lib/VMwareWebService/VixDiskLib/vdl_wrapper.rb, line 100
def disconnect
  logger.info "VdlConnection.disconnect: #{@serverName}"
  @disk_lock.synchronize(:EX) do
    if !@vdl_connection
      logger.warn "VDLConnection.disconnect: server: #{@serverName} not connected"
    else
      __close_disks__
      VdlWrapper.__disconnect__(self)
      @vdl_connection = nil
      @vddk.running = true
      @vddk.shutdown = true
    end
  end
end
dumpDisks() click to toggle source
# File lib/VMwareWebService/VixDiskLib/vdl_wrapper.rb, line 115
def dumpDisks
  raise VixDiskLibError, "VdlConnection.getDisk: server #{@serverName} not connected" unless @vdl_connection
  @vddk.running = true
  @disk_lock.sync_lock(:SH) if (unlock = !@disk_lock.sync_locked?)
  @disks.each do |d|
    logger.warn "    VdlDisk: #{d.path}, opened: #{d.timeStamp}"
  end
ensure
  @disk_lock.sync_unlock if unlock
end
getDisk(path, flags) click to toggle source
# File lib/VMwareWebService/VixDiskLib/vdl_wrapper.rb, line 126
def getDisk(path, flags)
  @disk_lock.synchronize(:EX) do
    raise VixDiskLibError, "VdlConnection.getDisk: server #{@serverName} not connected" unless @vdl_connection
    @vddk.running = true
    disk = VdlDisk.new(self, path, flags)
    @disks << disk
    nd = VdlWrapper.inc_server_disk_count
    logger.info "VdlConnection.getDisk: #{@serverName} open disks = #{nd}"
    if nd >= MAX_DISK_WARN
      logger.warn "VdlConnection::getDisk: connection to server: #{@serverName}"
      logger.warn "VdlConnection::getDisk: number of open disks = #{nd}"
      logger.warn "VdlConnection::getDisk: subsequent open calls may fail"
      VdlWrapper.dumpDisks(@serverName)
    end
    return disk
  end
end

Private Instance Methods

__close_disks__() click to toggle source
# File lib/VMwareWebService/VixDiskLib/vdl_wrapper.rb, line 160
def __close_disks__
  raise VixDiskLibError,
        "VdlConnection::__close_disks__: exclusive disk lock not held" unless @disk_lock.sync_exclusive?
  if !@vdl_connection
    logger.warn "VDLConnection.disconnect: server: #{@serverName} not connected"
  else
    @disks.each(&:close)
  end
end