Skip to content

Commit

Permalink
Merge pull request #10171 from roliveri/azure_cache
Browse files Browse the repository at this point in the history
Azure cache
  • Loading branch information
Fryguy committed Aug 9, 2016
2 parents a057cba + 31d54e1 commit 25f9dd0
Show file tree
Hide file tree
Showing 24 changed files with 736,807 additions and 461,577 deletions.
3 changes: 2 additions & 1 deletion gems/pending/MiqVm/miq_azure_vm.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
require 'MiqVm/MiqVm'
require 'disk/modules/AzureBlobDisk'
require 'disk/modules/miq_disk_cache'

class MiqAzureVm < MiqVm
def initialize(azure_handle, args)
Expand Down Expand Up @@ -57,7 +58,7 @@ def openDisks(diskFiles)
dInfo.rawDisk = true

begin
d = AzureBlobDisk.new(sa_svc, @uri, dInfo)
d = MiqDiskCache.new(AzureBlobDisk.new(sa_svc, @uri, dInfo), 100, 128)
rescue => err
$log.error "Couldn't open disk file: #{df}"
$log.error err.to_s
Expand Down
26 changes: 18 additions & 8 deletions gems/pending/disk/modules/AzureBlobDisk.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,23 +28,34 @@ def d_init

@storage_acct = @storage_acct_svc.accounts_by_name[@acct_name]
raise "AzureBlob: Storage account #{@acct_name} not found." unless @storage_acct

$log.debug "AzureBlobDisk: open(#{@blob_uri})"
@t0 = Time.now.to_i
@reads = 0
@bytes = 0
@split_reads = 0
end

def d_close
return nil unless $log.debug?
t1 = Time.now.to_i
$log.debug "AzureBlobDisk: close(#{@blob_uri})"
$log.debug "AzureBlobDisk: (#{@blob_uri}) time: #{t1 - @t0}"
$log.debug "AzureBlobDisk: (#{@blob_uri}) reads: #{@reads}, split_reads: #{@split_reads}"
$log.debug "AzureBlobDisk: (#{@blob_uri}) bytes: #{@bytes}"
nil
end

def d_read(pos, len)
# puts "AzureBlobDisk#d_read(#{pos}, #{len})"
$log.debug "AzureBlobDisk#d_read(#{pos}, #{len})"
return blob_read(pos, len) unless len > MAX_READ_LEN

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

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

Expand All @@ -62,18 +73,17 @@ def d_write(_pos, _buf, _len)
private

def blob_read(start_byte, length)
$log.debug "AzureBlobDisk#blob_read(#{start_byte}, #{length})"
options = {
:start_byte => start_byte,
:length => length,
:md5 => true
:length => length
}
options[:date] = @snapshot if @snapshot

ret = @storage_acct.get_blob_raw(@container, @blob, key, options)

content_md5 = ret.headers[:content_md5].unpack("m0").first.unpack("H*").first
returned_md5 = Digest::MD5.hexdigest(ret.body)
raise "Checksum error: #{range_str}, blob: #{@container}/#{@blob}" unless content_md5 == returned_md5
@reads += 1
@bytes += ret.body.length

ret.body
end
Expand Down

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

0 comments on commit 25f9dd0

Please sign in to comment.