Module: AzureDiskCommon

Included in:
AzureBlobDisk, AzureManagedDisk
Defined in:
lib/disk/modules/AzureDiskCommon.rb

Constant Summary collapse

MAX_READ_LEN =

The maximum read length that supports MD5 return.

1024 * 1024 * 4
SECTOR_LENGTH =
512

Instance Method Summary collapse

Instance Method Details

#blob_propertiesObject



71
72
73
74
75
76
# File 'lib/disk/modules/AzureDiskCommon.rb', line 71

def blob_properties
  @blob_properties ||= begin
    options = @snapshot ? {:date => @snapshot} : {}
    @storage_acct.blob_properties(@container, @blob, key, options)
  end
end

#blob_read(start_byte, length) ⇒ Object



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/disk/modules/AzureDiskCommon.rb', line 78

def blob_read(start_byte, length)
  $log.debug("#{@my_class}#blob_read(#{start_byte}, #{length})")
  options = {
    :start_byte => start_byte,
    :length     => length
  }
  if @storage_acct
    options[:date] = @snapshot if @snapshot
    ret = @storage_acct.get_blob_raw(@container, @blob, key, options)
  else
    ret = managed_disk.read(options)
  end

  @reads += 1
  @bytes += ret.body.length

  ret.body
end

#d_close_commonObject



45
46
47
48
49
50
51
52
53
54
# File 'lib/disk/modules/AzureDiskCommon.rb', line 45

def d_close_common
  @managed_disk&.close
  return nil unless $log.debug?
  t1 = Time.now.to_i
  $log.debug("#{@my_class}: close(#{@disk_path})")
  $log.debug("#{@my_class}: (#{@disk_path}) time:  #{t1 - @t0}")
  $log.debug("#{@my_class}: (#{@disk_path}) reads: #{@reads}, split_reads: #{@split_reads}")
  $log.debug("#{@my_class}: (#{@disk_path}) bytes: #{@bytes}")
  nil
end

#d_init_blob_disk(d_info) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/disk/modules/AzureDiskCommon.rb', line 23

def d_init_blob_disk(d_info)
  @blob_uri         = d_info.blob_uri
  @storage_acct_svc = d_info.storage_acct_svc
  @my_class         = "AzureBlobDisk"
  uri_info          = @storage_acct_svc.parse_uri(@blob_uri)
  @container        = uri_info[:container]
  @blob             = uri_info[:blob]
  @acct_name        = uri_info[:account_name]
  @snapshot         = uri_info[:snapshot]
  @storage_acct     = @storage_acct_svc.accounts_by_name[@acct_name]
  @disk_path        = @blob_uri
  raise "AzureBlob: Storage account #{@acct_name} not found." unless @storage_acct
end

#d_init_common(d_info) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/disk/modules/AzureDiskCommon.rb', line 9

def d_init_common(d_info)
  @blockSize = SECTOR_LENGTH
  if d_info.blob_uri
    d_init_blob_disk(d_info)
  else
    d_init_managed_disk(d_info)
  end
  $log.debug("#{@class}: open(#{@disk_path})")
  @t0 = Time.now.to_i
  @reads = 0
  @bytes = 0
  @split_reads = 0
end

#d_init_managed_disk(d_info) ⇒ Object



37
38
39
40
41
42
43
# File 'lib/disk/modules/AzureDiskCommon.rb', line 37

def d_init_managed_disk(d_info)
  @disk_name        = d_info.disk_name
  @storage_disk_svc = d_info.storage_disk_svc
  @resource_group   = d_info.resource_group
  @my_class         = "AzureManagedDisk"
  @disk_path        = @disk_name
end

#d_read_common(pos, len) ⇒ Object



56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/disk/modules/AzureDiskCommon.rb', line 56

def d_read_common(pos, len)
  return blob_read(pos, len) unless len > MAX_READ_LEN

  @split_reads += 1
  ret = ""
  blocks, rem = len.divmod(MAX_READ_LEN)

  blocks.times do
    ret << blob_read(pos, MAX_READ_LEN)
  end
  ret << blob_read(pos, rem) if rem > 0

  ret
end

#keyObject



97
98
99
# File 'lib/disk/modules/AzureDiskCommon.rb', line 97

def key
  @key ||= @storage_acct_svc.(@storage_acct.name, @storage_acct.resource_group).fetch('key1')
end

#managed_diskObject



101
102
103
# File 'lib/disk/modules/AzureDiskCommon.rb', line 101

def managed_disk
  @managed_disk ||= @storage_disk_svc.open(@disk_name, @resource_group)
end