[Blob][RehydratePriority]Enable Rehydrate Priority for Copy/SetTier

This commit is contained in:
xiafu 2019-06-19 22:49:44 -07:00 коммит произвёл Xiaoxi Fu
Родитель 10c687ba36
Коммит 64c61f3dd9
8 изменённых файлов: 1001 добавлений и 17 удалений

Просмотреть файл

@ -3202,7 +3202,8 @@ class BaseBlobService(StorageClient):
source_lease_id=None, timeout=None,
incremental_copy=False,
requires_sync=None,
standard_blob_tier=None):
standard_blob_tier=None,
rehydrate_priority=None):
'''
See copy_blob for more details. This helper method
allows for standard copies as well as incremental copies which are only supported for page blobs and sync
@ -3258,7 +3259,8 @@ class BaseBlobService(StorageClient):
'x-ms-lease-id': _to_str(destination_lease_id),
'x-ms-source-lease-id': _to_str(source_lease_id),
'x-ms-access-tier': _to_str(premium_page_blob_tier) or _to_str(standard_blob_tier),
'x-ms-requires-sync': _to_str(requires_sync)
'x-ms-requires-sync': _to_str(requires_sync),
'x-ms-rehydrate-priority': _to_str(rehydrate_priority)
}
_add_metadata_headers(metadata, request)

Просмотреть файл

@ -232,7 +232,7 @@ class BlockBlobService(BaseBlobService):
if the resource has been modified since the specified time.
:param datetime if_unmodified_since:
A DateTime value. Azure expects the date value passed in to be UTC.
If timezone is included, any non-UTC datetimes will be convFerted to UTC.
If timezone is included, any non-UTC datetimes will be converted to UTC.
If a date is passed in without timezone info, it is assumed to be UTC.
Specify this header to perform the operation only if
the resource has not been modified since the specified date/time.
@ -885,7 +885,7 @@ class BlockBlobService(BaseBlobService):
standard_blob_tier=standard_blob_tier)
def set_standard_blob_tier(
self, container_name, blob_name, standard_blob_tier, timeout=None):
self, container_name, blob_name, standard_blob_tier, timeout=None, rehydrate_priority=None):
'''
Sets the block blob tiers on the blob. This API is only supported for block blobs on standard storage accounts.
@ -900,9 +900,11 @@ class BlockBlobService(BaseBlobService):
The timeout parameter is expressed in seconds. This method may make
multiple calls to the Azure service and the timeout will apply to
each call individually.
:param :class:`~azure.storage.blob.models.RehydratePriority` rehydrate_priority:
Indicates the priority with which to rehydrate an archived blob
'''
request = self._get_basic_set_blob_tier_http_request(container_name, blob_name, standard_blob_tier,
timeout=timeout)
timeout=timeout, rehydrate_priority=rehydrate_priority)
self._perform_request(request)
@ -960,9 +962,11 @@ class BlockBlobService(BaseBlobService):
:return: HTTPRequest parsed from batch set tier sub-request
:rtype: :class:`~azure.storage.common._http.HTTPRequest`
"""
request = self._get_basic_set_blob_tier_http_request(batch_set_blob_tier_sub_request.container_name,
batch_set_blob_tier_sub_request.blob_name,
batch_set_blob_tier_sub_request.standard_blob_tier)
request = self._get_basic_set_blob_tier_http_request(
batch_set_blob_tier_sub_request.container_name,
batch_set_blob_tier_sub_request.blob_name,
batch_set_blob_tier_sub_request.standard_blob_tier,
rehydrate_priority=batch_set_blob_tier_sub_request.rehydrate_priority)
request.headers.update({
'Content-ID': _int_to_str(content_id),
'Content-Length': _int_to_str(0),
@ -979,7 +983,8 @@ class BlockBlobService(BaseBlobService):
return request
def _get_basic_set_blob_tier_http_request(self, container_name, blob_name, standard_blob_tier, timeout=None):
def _get_basic_set_blob_tier_http_request(self, container_name, blob_name, standard_blob_tier, timeout=None,
rehydrate_priority=None):
"""
Construct a basic HTTPRequest instance for set standard blob tier
@ -1001,7 +1006,8 @@ class BlockBlobService(BaseBlobService):
'timeout': _int_to_str(timeout),
}
request.headers = {
'x-ms-access-tier': _to_str(standard_blob_tier)
'x-ms-access-tier': _to_str(standard_blob_tier),
'x-ms-rehydrate-priority': _to_str(rehydrate_priority)
}
return request
@ -1011,7 +1017,8 @@ class BlockBlobService(BaseBlobService):
source_if_none_match=None, destination_if_modified_since=None,
destination_if_unmodified_since=None, destination_if_match=None,
destination_if_none_match=None, destination_lease_id=None,
source_lease_id=None, timeout=None, requires_sync=None, standard_blob_tier=None):
source_lease_id=None, timeout=None, requires_sync=None, standard_blob_tier=None,
rehydrate_priority=None):
'''
Copies a blob. This operation returns a copy operation
@ -1118,6 +1125,8 @@ class BlockBlobService(BaseBlobService):
:param StandardBlobTier standard_blob_tier:
A standard blob tier value to set the blob to. For this version of the library,
this is only applicable to block blobs on standard storage accounts.
:param :class:`~azure.storage.blob.models.RehydratePriority` rehydrate_priority:
Indicates the priority with which to rehydrate an archived blob
:return: Copy operation properties such as status, source, and ID.
:rtype: :class:`~azure.storage.blob.models.CopyProperties`
'''
@ -1137,7 +1146,8 @@ class BlockBlobService(BaseBlobService):
source_lease_id=source_lease_id, timeout=timeout,
incremental_copy=False,
requires_sync=requires_sync,
standard_blob_tier=standard_blob_tier)
standard_blob_tier=standard_blob_tier,
rehydrate_priority=rehydrate_priority)
# -----Helper methods------------------------------------
def _put_blob(self, container_name, blob_name, blob, content_settings=None,

Просмотреть файл

@ -776,6 +776,18 @@ class StandardBlobTier(object):
''' Hot '''
class RehydratePriority(object):
"""
Indicates the priority with which to rehydrate an archived blob
"""
Standard = 'Standard'
''' The rehydrate priority is standard. '''
High = 'High'
''' The rehydrate priority is high. '''
class AccountInformation(object):
"""
Holds information related to the storage account.
@ -848,7 +860,7 @@ class BatchDeleteSubRequest(object):
If a date is passed in without timezone info, it is assumed to be UTC.
Specify this header to perform the operation only
if the resource has been modified since the specified time.
:ivardatetime if_unmodified_since:
:ivar datetime if_unmodified_since:
A DateTime value. Azure expects the date value passed in to be UTC.
If timezone is included, any non-UTC datetimes will be converted to UTC.
If a date is passed in without timezone info, it is assumed to be UTC.
@ -913,8 +925,9 @@ class BatchSetBlobTierSubRequest(object):
A standard blob tier value to set the blob to. For this version of the library,
this is only applicable to block blobs on standard storage accounts.
"""
def __init__(self, container_name, blob_name, standard_blob_tier):
def __init__(self, container_name, blob_name, standard_blob_tier, rehydrate_priority=None):
self.container_name = container_name
self.blob_name = blob_name
self.standard_blob_tier = standard_blob_tier
self.rehydrate_priority = rehydrate_priority

Просмотреть файл

@ -11,7 +11,7 @@ import unittest
from azure.storage.blob import (
BlockBlobService,
)
from azure.storage.blob.models import StandardBlobTier, BatchSetBlobTierSubRequest
from azure.storage.blob.models import StandardBlobTier, BatchSetBlobTierSubRequest, RehydratePriority
from tests.testcase import (
StorageTestCase,
record,
@ -121,6 +121,24 @@ class BlobStorageAccountTest(StorageTestCase):
with self.assertRaises(ValueError):
self.bs.batch_set_standard_blob_tier(batch_set_standard_blob_tier_requests)
@record
def test_set_standard_blob_tier_with_rehydrate_priority(self):
# Arrange
self.bs.create_container(self.container_name)
blob_name = self._create_blob()
blob_tier = StandardBlobTier.Archive
rehydrate_tier = StandardBlobTier.Cool
rehydrate_priority = RehydratePriority.Standard
# Act
self.bs.set_standard_blob_tier(self.container_name, blob_name, blob_tier,
rehydrate_priority=rehydrate_priority)
self.bs.set_standard_blob_tier(self.container_name, blob_name, rehydrate_tier)
blob_ref = self.bs.get_blob_properties(self.container_name, blob_name)
# Assert
self.assertEquals('rehydrate-pending-to-cool', blob_ref.properties.rehydration_status)
@record
def test_batch_set_standard_blob_tier_for_one_blob(self):
# Arrange
@ -151,6 +169,7 @@ class BlobStorageAccountTest(StorageTestCase):
# Arrange
self.bs.create_container(self.container_name)
tiers = [StandardBlobTier.Archive, StandardBlobTier.Cool, StandardBlobTier.Hot]
rehydrate_priority = [RehydratePriority.High, RehydratePriority.Standard, RehydratePriority.High]
blob_names = list()
batch_set_blob_tier_request = []
@ -159,7 +178,7 @@ class BlobStorageAccountTest(StorageTestCase):
data = b'hello world'
self.bs.create_blob_from_bytes(self.container_name, blob_name, data)
sub_request = BatchSetBlobTierSubRequest(self.container_name, blob_name, tiers[i])
sub_request = BatchSetBlobTierSubRequest(self.container_name, blob_name, tiers[i], rehydrate_priority[i])
batch_set_blob_tier_request.append(sub_request)
blob_names.append(blob_name)

Просмотреть файл

@ -15,7 +15,7 @@ from azure.common import (
AzureException,
)
from azure.storage.blob.models import BatchDeleteSubRequest
from azure.storage.blob.models import BatchDeleteSubRequest, RehydratePriority
from azure.storage.blob.models import StandardBlobTier
from azure.storage.common import (
AccessPolicy,
@ -1028,6 +1028,31 @@ class StorageCommonBlobTest(StorageTestCase):
self.assertIsNotNone(copy.id)
self.assertEqual(copy_blob_properties.blob_tier, blob_tier)
@record
def test_copy_blob_with_rehydrate_priority(self):
# Arrange
blob_name = self._create_block_blob()
# Act
source_blob = '/{0}/{1}/{2}'.format(self.settings.STORAGE_ACCOUNT_NAME,
self.container_name,
blob_name)
blob_tier = StandardBlobTier.Archive
rehydrate_priority = RehydratePriority.High
copy = self.bs.copy_blob(self.container_name, 'blob1copy', source_blob,
standard_blob_tier=blob_tier,
rehydrate_priority=rehydrate_priority)
copy_blob_properties = self.bs.get_blob_properties(self.container_name, 'blob1copy').properties
self.bs.set_standard_blob_tier(self.container_name, 'blob1copy', StandardBlobTier.Hot)
second_resp = self.bs.get_blob_properties(self.container_name, 'blob1copy').properties
# Assert
self.assertIsNotNone(copy)
self.assertEqual(copy.status, 'success')
self.assertIsNotNone(copy.id)
self.assertEqual(copy_blob_properties.blob_tier, blob_tier)
self.assertEqual(second_resp.rehydration_status, 'rehydrate-pending-to-hot')
@record
def test_copy_blob_async_private_blob(self):
# Arrange

Просмотреть файл

@ -403,4 +403,410 @@ interactions:
status:
code: 200
message: OK
- request:
body: null
headers:
Connection:
- keep-alive
Content-Length:
- '0'
User-Agent:
- Azure-Storage/2.0.0-2.0.1 (Python CPython 3.7.3; Windows 10)
x-ms-client-request-id:
- 09704f40-99f8-11e9-8b0b-001a7dda7113
x-ms-date:
- Fri, 28 Jun 2019 22:57:00 GMT
x-ms-version:
- '2018-11-09'
method: PUT
uri: https://blobstoragename.blob.core.windows.net/utcontainer8ddd16e1?restype=container
response:
body:
string: "\uFEFF<?xml version=\"1.0\" encoding=\"utf-8\"?><Error><Code>ContainerAlreadyExists</Code><Message>The
specified container already exists.\nRequestId:3c836e4d-601e-0010-6404-2e5753000000\nTime:2019-06-28T22:57:00.3811749Z</Message></Error>"
headers:
Content-Length:
- '230'
Content-Type:
- application/xml
Date:
- Fri, 28 Jun 2019 22:56:59 GMT
Server:
- Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
x-ms-error-code:
- ContainerAlreadyExists
x-ms-request-id:
- 3c836e4d-601e-0010-6404-2e5753000000
x-ms-version:
- '2018-11-09'
status:
code: 409
message: The specified container already exists.
- request:
body: hello world
headers:
Connection:
- keep-alive
Content-Length:
- '11'
User-Agent:
- Azure-Storage/2.0.0-2.0.1 (Python CPython 3.7.3; Windows 10)
x-ms-blob-type:
- BlockBlob
x-ms-client-request-id:
- 09a7a1ca-99f8-11e9-ba0d-001a7dda7113
x-ms-date:
- Fri, 28 Jun 2019 22:57:00 GMT
x-ms-version:
- '2018-11-09'
method: PUT
uri: https://blobstoragename.blob.core.windows.net/utcontainer8ddd16e1/0
response:
body:
string: ''
headers:
Content-Length:
- '0'
Content-MD5:
- XrY7u+Ae7tCTyyK7j1rNww==
Date:
- Fri, 28 Jun 2019 22:56:59 GMT
ETag:
- '"0x8D6FC1BEDDFC8B4"'
Last-Modified:
- Fri, 28 Jun 2019 22:57:00 GMT
Server:
- Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
x-ms-request-id:
- 3c836e52-601e-0010-6704-2e5753000000
x-ms-request-server-encrypted:
- 'true'
x-ms-version:
- '2018-11-09'
status:
code: 201
message: Created
- request:
body: hello world
headers:
Connection:
- keep-alive
Content-Length:
- '11'
User-Agent:
- Azure-Storage/2.0.0-2.0.1 (Python CPython 3.7.3; Windows 10)
x-ms-blob-type:
- BlockBlob
x-ms-client-request-id:
- 09ba3208-99f8-11e9-8fa2-001a7dda7113
x-ms-date:
- Fri, 28 Jun 2019 22:57:00 GMT
x-ms-version:
- '2018-11-09'
method: PUT
uri: https://blobstoragename.blob.core.windows.net/utcontainer8ddd16e1/1
response:
body:
string: ''
headers:
Content-Length:
- '0'
Content-MD5:
- XrY7u+Ae7tCTyyK7j1rNww==
Date:
- Fri, 28 Jun 2019 22:57:00 GMT
ETag:
- '"0x8D6FC1BEDF2B8CC"'
Last-Modified:
- Fri, 28 Jun 2019 22:57:00 GMT
Server:
- Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
x-ms-request-id:
- 3c836e56-601e-0010-6b04-2e5753000000
x-ms-request-server-encrypted:
- 'true'
x-ms-version:
- '2018-11-09'
status:
code: 201
message: Created
- request:
body: hello world
headers:
Connection:
- keep-alive
Content-Length:
- '11'
User-Agent:
- Azure-Storage/2.0.0-2.0.1 (Python CPython 3.7.3; Windows 10)
x-ms-blob-type:
- BlockBlob
x-ms-client-request-id:
- 09c8ec76-99f8-11e9-bf25-001a7dda7113
x-ms-date:
- Fri, 28 Jun 2019 22:57:00 GMT
x-ms-version:
- '2018-11-09'
method: PUT
uri: https://blobstoragename.blob.core.windows.net/utcontainer8ddd16e1/2
response:
body:
string: ''
headers:
Content-Length:
- '0'
Content-MD5:
- XrY7u+Ae7tCTyyK7j1rNww==
Date:
- Fri, 28 Jun 2019 22:57:00 GMT
ETag:
- '"0x8D6FC1BEE0385AD"'
Last-Modified:
- Fri, 28 Jun 2019 22:57:00 GMT
Server:
- Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
x-ms-request-id:
- 3c836e5a-601e-0010-6f04-2e5753000000
x-ms-request-server-encrypted:
- 'true'
x-ms-version:
- '2018-11-09'
status:
code: 201
message: Created
- request:
body: "--batch_09da2e1e-99f8-11e9-a5f7-001a7dda7113\r\nContent-Type: application/http\r\nContent-ID:
0\r\nContent-Transfer-Encoding: binary\r\n\r\nPUT /utcontainer8ddd16e1/0?comp=tier
HTTP/1.1\r\nx-ms-access-tier: Archive\r\nx-ms-rehydrate-priority: High\r\nContent-Length:
0\r\nUser-Agent: Azure-Storage/2.0.0-2.0.1 (Python CPython 3.7.3; Windows 10)\r\nx-ms-date:
Fri, 28 Jun 2019 22:57:00 GMT\r\nAuthorization: SharedKey blobstoragename:cFv2LVkfwSPeoGx6hfR6rzb/jeqnRdinrAm4i2k1UEs=\r\n\r\n\r\n--batch_09da2e1e-99f8-11e9-a5f7-001a7dda7113\r\nContent-Type:
application/http\r\nContent-ID: 1\r\nContent-Transfer-Encoding: binary\r\n\r\nPUT
/utcontainer8ddd16e1/1?comp=tier HTTP/1.1\r\nx-ms-access-tier: Cool\r\nx-ms-rehydrate-priority:
Standard\r\nContent-Length: 0\r\nUser-Agent: Azure-Storage/2.0.0-2.0.1 (Python
CPython 3.7.3; Windows 10)\r\nx-ms-date: Fri, 28 Jun 2019 22:57:00 GMT\r\nAuthorization:
SharedKey blobstoragename:RMmZY6amyYd1rJOH2ofpHOms0ZbHI7M1F5O0PnH6LRw=\r\n\r\n\r\n--batch_09da2e1e-99f8-11e9-a5f7-001a7dda7113\r\nContent-Type:
application/http\r\nContent-ID: 2\r\nContent-Transfer-Encoding: binary\r\n\r\nPUT
/utcontainer8ddd16e1/2?comp=tier HTTP/1.1\r\nx-ms-access-tier: Hot\r\nx-ms-rehydrate-priority:
High\r\nContent-Length: 0\r\nUser-Agent: Azure-Storage/2.0.0-2.0.1 (Python CPython
3.7.3; Windows 10)\r\nx-ms-date: Fri, 28 Jun 2019 22:57:00 GMT\r\nAuthorization:
SharedKey blobstoragename:YwGJLZfA2g4JwhPXXKjy0eNtctwi7anztWgWgEjQf5k=\r\n\r\n\r\n--batch_09da2e1e-99f8-11e9-a5f7-001a7dda7113--\r\n"
headers:
Connection:
- keep-alive
Content-Length:
- '1434'
Content-Type:
- multipart/mixed; boundary=batch_09da2e1e-99f8-11e9-a5f7-001a7dda7113
User-Agent:
- Azure-Storage/2.0.0-2.0.1 (Python CPython 3.7.3; Windows 10)
x-ms-client-request-id:
- 09da550a-99f8-11e9-9671-001a7dda7113
x-ms-date:
- Fri, 28 Jun 2019 22:57:00 GMT
x-ms-version:
- '2018-11-09'
method: POST
uri: https://blobstoragename.blob.core.windows.net/?comp=batch
response:
body:
string: "--batchresponse_e2fa2772-5a1b-47c2-a6a8-d4158ffd6d2e\r\nContent-Type:
application/http\r\nContent-ID: 0\r\n\r\nHTTP/1.1 200 OK\r\nx-ms-request-id:
3c836e5e-601e-0010-7304-2e57531e80a5\r\nx-ms-version: 2018-11-09\r\nServer:
Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_e2fa2772-5a1b-47c2-a6a8-d4158ffd6d2e\r\nContent-Type:
application/http\r\nContent-ID: 1\r\n\r\nHTTP/1.1 200 OK\r\nx-ms-request-id:
3c836e5e-601e-0010-7304-2e57531e80a7\r\nx-ms-version: 2018-11-09\r\nServer:
Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_e2fa2772-5a1b-47c2-a6a8-d4158ffd6d2e\r\nContent-Type:
application/http\r\nContent-ID: 2\r\n\r\nHTTP/1.1 200 OK\r\nx-ms-request-id:
3c836e5e-601e-0010-7304-2e57531e80a8\r\nx-ms-version: 2018-11-09\r\nServer:
Windows-Azure-Blob/1.0\r\n\r\n--batchresponse_e2fa2772-5a1b-47c2-a6a8-d4158ffd6d2e--"
headers:
Content-Type:
- multipart/mixed; boundary=batchresponse_e2fa2772-5a1b-47c2-a6a8-d4158ffd6d2e
Date:
- Fri, 28 Jun 2019 22:57:00 GMT
Server:
- Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
Transfer-Encoding:
- chunked
x-ms-request-id:
- 3c836e5e-601e-0010-7304-2e5753000000
x-ms-version:
- '2018-11-09'
status:
code: 202
message: Accepted
- request:
body: null
headers:
Connection:
- keep-alive
User-Agent:
- Azure-Storage/2.0.0-2.0.1 (Python CPython 3.7.3; Windows 10)
x-ms-client-request-id:
- 09ec76b0-99f8-11e9-b258-001a7dda7113
x-ms-date:
- Fri, 28 Jun 2019 22:57:00 GMT
x-ms-version:
- '2018-11-09'
method: HEAD
uri: https://blobstoragename.blob.core.windows.net/utcontainer8ddd16e1/0
response:
body:
string: ''
headers:
Accept-Ranges:
- bytes
Content-Length:
- '11'
Content-MD5:
- XrY7u+Ae7tCTyyK7j1rNww==
Content-Type:
- application/octet-stream
Date:
- Fri, 28 Jun 2019 22:57:00 GMT
ETag:
- '"0x8D6FC1BEDDFC8B4"'
Last-Modified:
- Fri, 28 Jun 2019 22:57:00 GMT
Server:
- Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
x-ms-access-tier:
- Archive
x-ms-access-tier-change-time:
- Fri, 28 Jun 2019 22:57:00 GMT
x-ms-blob-type:
- BlockBlob
x-ms-creation-time:
- Fri, 28 Jun 2019 22:57:00 GMT
x-ms-lease-state:
- available
x-ms-lease-status:
- unlocked
x-ms-request-id:
- 3c836e61-601e-0010-7604-2e5753000000
x-ms-server-encrypted:
- 'true'
x-ms-tag-count:
- '0'
x-ms-version:
- '2018-11-09'
status:
code: 200
message: OK
- request:
body: null
headers:
Connection:
- keep-alive
User-Agent:
- Azure-Storage/2.0.0-2.0.1 (Python CPython 3.7.3; Windows 10)
x-ms-client-request-id:
- 09fc0278-99f8-11e9-9fcf-001a7dda7113
x-ms-date:
- Fri, 28 Jun 2019 22:57:00 GMT
x-ms-version:
- '2018-11-09'
method: HEAD
uri: https://blobstoragename.blob.core.windows.net/utcontainer8ddd16e1/1
response:
body:
string: ''
headers:
Accept-Ranges:
- bytes
Content-Length:
- '11'
Content-MD5:
- XrY7u+Ae7tCTyyK7j1rNww==
Content-Type:
- application/octet-stream
Date:
- Fri, 28 Jun 2019 22:57:00 GMT
ETag:
- '"0x8D6FC1BEDF2B8CC"'
Last-Modified:
- Fri, 28 Jun 2019 22:57:00 GMT
Server:
- Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
x-ms-access-tier:
- Cool
x-ms-access-tier-change-time:
- Fri, 28 Jun 2019 22:57:00 GMT
x-ms-blob-type:
- BlockBlob
x-ms-creation-time:
- Fri, 28 Jun 2019 22:57:00 GMT
x-ms-lease-state:
- available
x-ms-lease-status:
- unlocked
x-ms-request-id:
- 3c836e64-601e-0010-7904-2e5753000000
x-ms-server-encrypted:
- 'true'
x-ms-tag-count:
- '0'
x-ms-version:
- '2018-11-09'
status:
code: 200
message: OK
- request:
body: null
headers:
Connection:
- keep-alive
User-Agent:
- Azure-Storage/2.0.0-2.0.1 (Python CPython 3.7.3; Windows 10)
x-ms-client-request-id:
- 0a0d4922-99f8-11e9-921d-001a7dda7113
x-ms-date:
- Fri, 28 Jun 2019 22:57:01 GMT
x-ms-version:
- '2018-11-09'
method: HEAD
uri: https://blobstoragename.blob.core.windows.net/utcontainer8ddd16e1/2
response:
body:
string: ''
headers:
Accept-Ranges:
- bytes
Content-Length:
- '11'
Content-MD5:
- XrY7u+Ae7tCTyyK7j1rNww==
Content-Type:
- application/octet-stream
Date:
- Fri, 28 Jun 2019 22:57:00 GMT
ETag:
- '"0x8D6FC1BEE0385AD"'
Last-Modified:
- Fri, 28 Jun 2019 22:57:00 GMT
Server:
- Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
x-ms-access-tier:
- Hot
x-ms-access-tier-change-time:
- Fri, 28 Jun 2019 22:57:00 GMT
x-ms-blob-type:
- BlockBlob
x-ms-creation-time:
- Fri, 28 Jun 2019 22:57:00 GMT
x-ms-lease-state:
- available
x-ms-lease-status:
- unlocked
x-ms-request-id:
- 3c836e6a-601e-0010-7e04-2e5753000000
x-ms-server-encrypted:
- 'true'
x-ms-tag-count:
- '0'
x-ms-version:
- '2018-11-09'
status:
code: 200
message: OK
version: 1

Просмотреть файл

@ -0,0 +1,219 @@
interactions:
- request:
body: null
headers:
Connection:
- keep-alive
Content-Length:
- '0'
User-Agent:
- Azure-Storage/2.0.0-2.0.1 (Python CPython 3.7.3; Windows 10)
x-ms-client-request-id:
- 8d6a66d4-96d0-11e9-a3eb-001a7dda7113
x-ms-date:
- Mon, 24 Jun 2019 22:36:48 GMT
x-ms-version:
- '2018-11-09'
method: PUT
uri: https://blobstoragename.blob.core.windows.net/utcontainerd3161fdc?restype=container
response:
body:
string: "\uFEFF<?xml version=\"1.0\" encoding=\"utf-8\"?><Error><Code>ContainerAlreadyExists</Code><Message>The
specified container already exists.\nRequestId:93b1267e-701e-0023-6cdd-2a08f8000000\nTime:2019-06-24T22:36:48.4671732Z</Message></Error>"
headers:
Content-Length:
- '230'
Content-Type:
- application/xml
Date:
- Mon, 24 Jun 2019 22:36:48 GMT
Server:
- Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
x-ms-error-code:
- ContainerAlreadyExists
x-ms-request-id:
- 93b1267e-701e-0023-6cdd-2a08f8000000
x-ms-version:
- '2018-11-09'
status:
code: 409
message: The specified container already exists.
- request:
body: null
headers:
Connection:
- keep-alive
Content-Length:
- '0'
User-Agent:
- Azure-Storage/2.0.0-2.0.1 (Python CPython 3.7.3; Windows 10)
x-ms-blob-type:
- BlockBlob
x-ms-client-request-id:
- 8da3662c-96d0-11e9-9a77-001a7dda7113
x-ms-date:
- Mon, 24 Jun 2019 22:36:48 GMT
x-ms-version:
- '2018-11-09'
method: PUT
uri: https://blobstoragename.blob.core.windows.net/utcontainerd3161fdc/blobd3161fdc
response:
body:
string: ''
headers:
Content-Length:
- '0'
Content-MD5:
- 1B2M2Y8AsgTpgAmY7PhCfg==
Date:
- Mon, 24 Jun 2019 22:36:48 GMT
ETag:
- '"0x8D6F8F471DD3972"'
Last-Modified:
- Mon, 24 Jun 2019 22:36:48 GMT
Server:
- Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
x-ms-request-id:
- 93b12683-701e-0023-6fdd-2a08f8000000
x-ms-request-server-encrypted:
- 'true'
x-ms-version:
- '2018-11-09'
status:
code: 201
message: Created
- request:
body: null
headers:
Connection:
- keep-alive
Content-Length:
- '0'
User-Agent:
- Azure-Storage/2.0.0-2.0.1 (Python CPython 3.7.3; Windows 10)
x-ms-access-tier:
- Archive
x-ms-client-request-id:
- 8db1ad22-96d0-11e9-9c4c-001a7dda7113
x-ms-date:
- Mon, 24 Jun 2019 22:36:48 GMT
x-ms-rehydrate-priority:
- Standard
x-ms-version:
- '2018-11-09'
method: PUT
uri: https://blobstoragename.blob.core.windows.net/utcontainerd3161fdc/blobd3161fdc?comp=tier
response:
body:
string: ''
headers:
Content-Length:
- '0'
Date:
- Mon, 24 Jun 2019 22:36:48 GMT
Server:
- Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
x-ms-request-id:
- 93b12686-701e-0023-71dd-2a08f8000000
x-ms-version:
- '2018-11-09'
status:
code: 200
message: OK
- request:
body: null
headers:
Connection:
- keep-alive
Content-Length:
- '0'
User-Agent:
- Azure-Storage/2.0.0-2.0.1 (Python CPython 3.7.3; Windows 10)
x-ms-access-tier:
- Cool
x-ms-client-request-id:
- 8dc0e440-96d0-11e9-8ae6-001a7dda7113
x-ms-date:
- Mon, 24 Jun 2019 22:36:48 GMT
x-ms-version:
- '2018-11-09'
method: PUT
uri: https://blobstoragename.blob.core.windows.net/utcontainerd3161fdc/blobd3161fdc?comp=tier
response:
body:
string: ''
headers:
Content-Length:
- '0'
Date:
- Mon, 24 Jun 2019 22:36:48 GMT
Server:
- Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
x-ms-request-id:
- 93b12689-701e-0023-74dd-2a08f8000000
x-ms-version:
- '2018-11-09'
status:
code: 202
message: Accepted
- request:
body: null
headers:
Connection:
- keep-alive
User-Agent:
- Azure-Storage/2.0.0-2.0.1 (Python CPython 3.7.3; Windows 10)
x-ms-client-request-id:
- 8dd114e8-96d0-11e9-a91f-001a7dda7113
x-ms-date:
- Mon, 24 Jun 2019 22:36:48 GMT
x-ms-version:
- '2018-11-09'
method: HEAD
uri: https://blobstoragename.blob.core.windows.net/utcontainerd3161fdc/blobd3161fdc
response:
body:
string: ''
headers:
Accept-Ranges:
- bytes
Content-Length:
- '0'
Content-MD5:
- 1B2M2Y8AsgTpgAmY7PhCfg==
Content-Type:
- application/octet-stream
Date:
- Mon, 24 Jun 2019 22:36:48 GMT
ETag:
- '"0x8D6F8F471DD3972"'
Last-Modified:
- Mon, 24 Jun 2019 22:36:48 GMT
Server:
- Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
x-ms-access-tier:
- Archive
x-ms-access-tier-change-time:
- Mon, 24 Jun 2019 22:36:48 GMT
x-ms-archive-status:
- rehydrate-pending-to-cool
x-ms-blob-type:
- BlockBlob
x-ms-creation-time:
- Mon, 24 Jun 2019 22:36:48 GMT
x-ms-lease-state:
- available
x-ms-lease-status:
- unlocked
x-ms-request-id:
- 93b1268d-701e-0023-77dd-2a08f8000000
x-ms-server-encrypted:
- 'true'
x-ms-tag-count:
- '0'
x-ms-version:
- '2018-11-09'
status:
code: 200
message: OK
version: 1

Просмотреть файл

@ -0,0 +1,290 @@
interactions:
- request:
body: !!binary |
7jD4T7GTBqoLSlMaiq4VKCo1GvmlCqU0dz2vaz6V7Adigje+fHJJNjtIHqvWAKdlALg1hIWf+npm
Sn5oP0SkhjvvOlCDKUtkNpmDB13bLddUAx355ve2wVBmhVEs7WSXgaFsS8CTc2NKJDNEfrUSzPh/
5omxUnkPVZlVREMccwVwA6n3R8L4I9WieIzFoSyvb2ECHvtsaz3WLKhuF8g3uAhthy8cFCqrU0vi
CIpvbQeb2XbWwLj6EOu5M1xh9NgQ/G0tpMG0wHtV3PLU6TOqAbYRmzTtHHHBXBfN/BTVe6ekmVbH
NNho2MkDNNT3JkpNZDX6VXkeg8xx9LuzevzVenb50R/dtMKzH0S/CZWLrIBniCE28Zqo37AK0+AJ
rTTAJHAyv4KhcNypyoFDLEpY5erfoTs0tV5rYIbweEdNgC37D2Xv3pPG+q9fhRNa0wJraMxxCFZ/
o6UeZfx9gPofmMI0qdXjzNGk8YsXN8mhazQOaRDp6OliP6jh8Q5NhC/fnRo2nk2YbtypYzA4u+p+
nx52cDIaBdh3ybuRJ36hjKPJcngCfwniekSQZG2ZBVvb40KAhhvCbrItk1fXt8Kyhyb7E9d9Dz9X
MJdC3a5Jxrq/yEvVF2BVhwq5dD9R62KrsL/EMgMMsImvd8nnIx0fuUhpzBKjZymFp5j20pe+zWtE
gR43jAHc6or5Ebw9yR/c386VCpzkMtg6UgLognWxLmbj3A3XhkmQcFQk5OnmAsH25SLpcCCWMcRO
0/sSuXKDNM2J5gQdCvxymhkR/RE7x6ax86nuQGN7RyDSfQHP6rGSkLvekJUc1zkgik6BQYsYjv1C
14CHJdUrefxwN7e4DyiTZBsKWkGfgVhQ2da/Fu9aXUPzBUXDfqY+wee+RsN8GtCb5PO/R6fXyeSW
2q83eDA9di330kKKaiNLEIuXl5/j7z/mrXKeLJWjJj7511be/s12nrKRI3ExTB1iAFwjAkL3SqAj
WsZX0D6z2MrlJ42f8VwD/nOFVJKy1ELvaZ4PZdWP0jvFc0nJcWrqPRQ6um6zrJy3CVMlME8GAbb1
Zd4hM1w9yWOrYucbgaoKjJn0rpS6NM6WeEdBzx+0keQMvjwwrnEJ6Hskk7PH6PEgadzIulV3pqF2
d48Gw6uVxD2xtPBfqcH+nuT1Tyk5ZM/jLej5Lq42bSgt5757dZ3tSV3dWu+UAboy/BaMhrAynoP8
Jij0lDH3FKPeiBty51hvOIA28c4vKRO3R/br6Ve0CYCZw4gWdzfGmtgSQidhG6RvgHTeN26Lf5zc
ZZbpuj19FE9GfzNEscORnY6Wnei2Fei6Nea84hOwTINb70OSHOiK+WUdnwpJecU8I+JS9x3k9w==
headers:
Connection:
- keep-alive
Content-Length:
- '1024'
User-Agent:
- Azure-Storage/2.0.0-2.0.1 (Python CPython 3.7.3; Windows 10)
x-ms-blob-type:
- BlockBlob
x-ms-client-request-id:
- a77b19e6-96c9-11e9-8a72-001a7dda7113
x-ms-date:
- Mon, 24 Jun 2019 21:47:25 GMT
x-ms-version:
- '2018-11-09'
method: PUT
uri: https://storagename.blob.core.windows.net/utcontainer79ab16d0/blob79ab16d0
response:
body:
string: ''
headers:
Content-Length:
- '0'
Content-MD5:
- plkxPH9S8qpIjJWislFakQ==
Date:
- Mon, 24 Jun 2019 21:47:24 GMT
ETag:
- '"0x8D6F8ED8BBB5A4A"'
Last-Modified:
- Mon, 24 Jun 2019 21:47:25 GMT
Server:
- Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
x-ms-request-id:
- a6edc8fe-301e-0085-49d6-2a7e29000000
x-ms-request-server-encrypted:
- 'true'
x-ms-version:
- '2018-11-09'
status:
code: 201
message: Created
- request:
body: null
headers:
Connection:
- keep-alive
Content-Length:
- '0'
User-Agent:
- Azure-Storage/2.0.0-2.0.1 (Python CPython 3.7.3; Windows 10)
x-ms-access-tier:
- Archive
x-ms-client-request-id:
- a78a3e46-96c9-11e9-9bf2-001a7dda7113
x-ms-copy-source:
- https://emilydevtest.blob.core.windows.net/utcontainer79ab16d0/blob79ab16d0
x-ms-date:
- Mon, 24 Jun 2019 21:47:25 GMT
x-ms-rehydrate-priority:
- High
x-ms-version:
- '2018-11-09'
method: PUT
uri: https://storagename.blob.core.windows.net/utcontainer79ab16d0/blob1copy
response:
body:
string: ''
headers:
Content-Length:
- '0'
Date:
- Mon, 24 Jun 2019 21:47:27 GMT
ETag:
- '"0x8D6F8ED8BC08B5A"'
Last-Modified:
- Mon, 24 Jun 2019 21:47:25 GMT
Server:
- Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
x-ms-copy-id:
- a2cf222e-e7b6-4b04-acdb-42785ce144d9
x-ms-copy-status:
- success
x-ms-request-id:
- a6edc911-301e-0085-59d6-2a7e29000000
x-ms-version:
- '2018-11-09'
status:
code: 202
message: Accepted
- request:
body: null
headers:
Connection:
- keep-alive
User-Agent:
- Azure-Storage/2.0.0-2.0.1 (Python CPython 3.7.3; Windows 10)
x-ms-client-request-id:
- a8ff80fa-96c9-11e9-bbf0-001a7dda7113
x-ms-date:
- Mon, 24 Jun 2019 21:47:27 GMT
x-ms-version:
- '2018-11-09'
method: HEAD
uri: https://storagename.blob.core.windows.net/utcontainer79ab16d0/blob1copy
response:
body:
string: ''
headers:
Accept-Ranges:
- bytes
Content-Length:
- '1024'
Content-MD5:
- plkxPH9S8qpIjJWislFakQ==
Content-Type:
- application/octet-stream
Date:
- Mon, 24 Jun 2019 21:47:27 GMT
ETag:
- '"0x8D6F8ED8BC08B5A"'
Last-Modified:
- Mon, 24 Jun 2019 21:47:25 GMT
Server:
- Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
Vary:
- Origin
x-ms-access-tier:
- Archive
x-ms-access-tier-change-time:
- Mon, 24 Jun 2019 21:47:25 GMT
x-ms-blob-type:
- BlockBlob
x-ms-copy-completion-time:
- Mon, 24 Jun 2019 21:47:25 GMT
x-ms-copy-id:
- a2cf222e-e7b6-4b04-acdb-42785ce144d9
x-ms-copy-progress:
- 1024/1024
x-ms-copy-source:
- https://storagename.blob.core.windows.net/utcontainer79ab16d0/blob79ab16d0
x-ms-copy-status:
- success
x-ms-creation-time:
- Mon, 24 Jun 2019 21:47:25 GMT
x-ms-lease-state:
- available
x-ms-lease-status:
- unlocked
x-ms-request-id:
- a6edcc9a-301e-0085-7fd6-2a7e29000000
x-ms-server-encrypted:
- 'true'
x-ms-tag-count:
- '0'
x-ms-version:
- '2018-11-09'
status:
code: 200
message: OK
- request:
body: null
headers:
Connection:
- keep-alive
Content-Length:
- '0'
User-Agent:
- Azure-Storage/2.0.0-2.0.1 (Python CPython 3.7.3; Windows 10)
x-ms-access-tier:
- Hot
x-ms-client-request-id:
- a904194c-96c9-11e9-adcf-001a7dda7113
x-ms-date:
- Mon, 24 Jun 2019 21:47:27 GMT
x-ms-version:
- '2018-11-09'
method: PUT
uri: https://storagename.blob.core.windows.net/utcontainer79ab16d0/blob1copy?comp=tier
response:
body:
string: ''
headers:
Content-Length:
- '0'
Date:
- Mon, 24 Jun 2019 21:47:27 GMT
Server:
- Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
x-ms-request-id:
- a6edcca5-301e-0085-07d6-2a7e29000000
x-ms-version:
- '2018-11-09'
status:
code: 202
message: Accepted
- request:
body: null
headers:
Connection:
- keep-alive
User-Agent:
- Azure-Storage/2.0.0-2.0.1 (Python CPython 3.7.3; Windows 10)
x-ms-client-request-id:
- a9277e34-96c9-11e9-8047-001a7dda7113
x-ms-date:
- Mon, 24 Jun 2019 21:47:28 GMT
x-ms-version:
- '2018-11-09'
method: HEAD
uri: https://storagename.blob.core.windows.net/utcontainer79ab16d0/blob1copy
response:
body:
string: ''
headers:
Accept-Ranges:
- bytes
Content-Length:
- '1024'
Content-MD5:
- plkxPH9S8qpIjJWislFakQ==
Content-Type:
- application/octet-stream
Date:
- Mon, 24 Jun 2019 21:47:27 GMT
ETag:
- '"0x8D6F8ED8BC08B5A"'
Last-Modified:
- Mon, 24 Jun 2019 21:47:25 GMT
Server:
- Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
Vary:
- Origin
x-ms-access-tier:
- Archive
x-ms-access-tier-change-time:
- Mon, 24 Jun 2019 21:47:27 GMT
x-ms-archive-status:
- rehydrate-pending-to-hot
x-ms-blob-type:
- BlockBlob
x-ms-copy-completion-time:
- Mon, 24 Jun 2019 21:47:25 GMT
x-ms-copy-id:
- a2cf222e-e7b6-4b04-acdb-42785ce144d9
x-ms-copy-progress:
- 1024/1024
x-ms-copy-source:
- https://storagename.blob.core.windows.net/utcontainer79ab16d0/blob79ab16d0
x-ms-copy-status:
- success
x-ms-creation-time:
- Mon, 24 Jun 2019 21:47:25 GMT
x-ms-lease-state:
- available
x-ms-lease-status:
- unlocked
x-ms-request-id:
- a6edcd09-301e-0085-60d6-2a7e29000000
x-ms-server-encrypted:
- 'true'
x-ms-tag-count:
- '0'
x-ms-version:
- '2018-11-09'
status:
code: 200
message: OK
version: 1