diff --git a/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/implementation/util/ModelHelper.java b/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/implementation/util/ModelHelper.java index 5de41dd10a21..85fd41fa8a08 100644 --- a/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/implementation/util/ModelHelper.java +++ b/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/implementation/util/ModelHelper.java @@ -202,6 +202,9 @@ public static BlobItem populateBlobItem(BlobItemInternal blobItemInternal) { } blobItem.setTags(tags); + blobItem.setObjectReplicationSourcePolicies( + transformObjectReplicationMetadata(blobItemInternal.getObjectReplicationMetadata())); + return blobItem; } @@ -247,25 +250,35 @@ public static BlobItemProperties populateBlobItemProperties(BlobItemPropertiesIn blobItemProperties.setAccessTierChangeTime(blobItemPropertiesInternal.getAccessTierChangeTime()); blobItemProperties.setTagCount(blobItemPropertiesInternal.getTagCount()); - // TODO: (rickle-msft) Uncomment when these properties are returned on lists. - /*this.objectReplicationSourcePolicies = new HashMap<>(); - this.objectReplicationDestinationPolicyId = objectReplicationStatus.getOrDefault("policy-id", null); - if (objectReplicationDestinationPolicyId == null) { - for (String str : objectReplicationStatus.keySet()) { - String[] split = str.split("_"); - String policyId = split[0]; - String ruleId = split[1]; - if (objectReplicationSourcePolicies.containsKey(policyId)) { - objectReplicationSourcePolicies.get(policyId) - .putRuleAndStatus(ruleId, objectReplicationStatus.get(str)); - } else { - ObjectReplicationPolicy policy = new ObjectReplicationPolicy(policyId); - policy.putRuleAndStatus(ruleId, objectReplicationStatus.get(str)); - objectReplicationSourcePolicies.put(policyId, policy); - } + return blobItemProperties; + } + + private static List transformObjectReplicationMetadata( + Map objectReplicationMetadata) { + + Map> internalSourcePolicies = new HashMap<>(); + objectReplicationMetadata = objectReplicationMetadata == null ? new HashMap<>() : objectReplicationMetadata; + for (Map.Entry entry : objectReplicationMetadata.entrySet()) { + String orString = entry.getKey(); + String str = orString.startsWith("or-") ? orString.substring(3) : orString; + String[] split = str.split("_"); + String policyId = split[0]; + String ruleId = split[1]; + ObjectReplicationRule rule = new ObjectReplicationRule(ruleId, + ObjectReplicationStatus.fromString(entry.getValue())); + if (!internalSourcePolicies.containsKey(policyId)) { + internalSourcePolicies.put(policyId, new ArrayList<>()); } - }*/ + internalSourcePolicies.get(policyId).add(rule); + } - return blobItemProperties; + if (internalSourcePolicies.isEmpty()) { + return null; + } + List objectReplicationSourcePolicies = new ArrayList<>(); + for (Map.Entry> entry : internalSourcePolicies.entrySet()) { + objectReplicationSourcePolicies.add(new ObjectReplicationPolicy(entry.getKey(), entry.getValue())); + } + return objectReplicationSourcePolicies; } } diff --git a/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/models/BlobItem.java b/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/models/BlobItem.java index 24c0072d6782..54857ae4648e 100644 --- a/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/models/BlobItem.java +++ b/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/models/BlobItem.java @@ -8,6 +8,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; +import java.util.List; import java.util.Map; /** @@ -57,17 +58,11 @@ public final class BlobItem { private Boolean isCurrentVersion; - /* - * The objectReplicationPolicyId property. - */ - @JsonProperty(value = "ObjectReplicationPolicyId") - private String objectReplicationPolicyId; - /* * The objectReplicationRuleStatus property. */ @JsonProperty(value = "BlobObjectReplicationRuleStatus") - private Map objectReplicationRuleStatus; + private List objectReplicationSourcePolicies; /* * The isPrefix property. @@ -236,48 +231,26 @@ public BlobItem setCurrentVersion(Boolean isCurrentVersion) { } /** - * Get the objectReplicationPolicyId property: The - * objectReplicationPolicyId property. - * - * @return the objectReplicationPolicyId value. - */ - public String getObjectReplicationPolicyId() { - return this.objectReplicationPolicyId; - } - - /** - * Set the objectReplicationPolicyId property: The - * objectReplicationPolicyId property. - * - * @param objectReplicationPolicyId the objectReplicationPolicyId value to - * set. - * @return the BlobItem object itself. - */ - public BlobItem setObjectReplicationPolicyId(String objectReplicationPolicyId) { - this.objectReplicationPolicyId = objectReplicationPolicyId; - return this; - } - - /** - * Get the objectReplicationRuleStatus property: The - * objectReplicationRuleStatus property. + * Get the objectReplicationSourcePolicies property: The + * objectReplicationSourcePolicies property. * - * @return the objectReplicationRuleStatus value. + * @return the objectReplicationSourcePolicies value. */ - public Map getObjectReplicationRuleStatus() { - return this.objectReplicationRuleStatus; + public List getObjectReplicationSourcePolicies() { + return this.objectReplicationSourcePolicies; } /** - * Set the objectReplicationRuleStatus property: The - * objectReplicationRuleStatus property. + * Set the objectReplicationSourcePolicies property: The + * objectReplicationSourcePolicies property. * - * @param objectReplicationRuleStatus the objectReplicationRuleStatus value + * @param objectReplicationSourcePolicies the objectReplicationSourcePolicies value * to set. * @return the BlobItem object itself. */ - public BlobItem setObjectReplicationRuleStatus(Map objectReplicationRuleStatus) { - this.objectReplicationRuleStatus = objectReplicationRuleStatus; + public BlobItem setObjectReplicationSourcePolicies( + List objectReplicationSourcePolicies) { + this.objectReplicationSourcePolicies = objectReplicationSourcePolicies; return this; } diff --git a/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/models/BlobItemProperties.java b/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/models/BlobItemProperties.java index fedca0cb3a09..877ca109e249 100644 --- a/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/models/BlobItemProperties.java +++ b/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/models/BlobItemProperties.java @@ -212,13 +212,6 @@ public final class BlobItemProperties { @JsonProperty(value = "AccessTierChangeTime") private OffsetDateTime accessTierChangeTime; - // TODO: (rickle-msft) uncomment when these are returned on lists. - /* - private Map objectReplicationSourcePolicies; - - private String objectReplicationDestinationPolicyId; - */ - /* * The tagCount property. */ diff --git a/sdk/storage/azure-storage-blob/src/test/java/com/azure/storage/blob/ContainerAPITest.groovy b/sdk/storage/azure-storage-blob/src/test/java/com/azure/storage/blob/ContainerAPITest.groovy index 3bd7fd98bb06..d87cc4e5d0cb 100644 --- a/sdk/storage/azure-storage-blob/src/test/java/com/azure/storage/blob/ContainerAPITest.groovy +++ b/sdk/storage/azure-storage-blob/src/test/java/com/azure/storage/blob/ContainerAPITest.groovy @@ -20,12 +20,15 @@ import com.azure.storage.blob.models.CustomerProvidedKey import com.azure.storage.blob.models.LeaseStateType import com.azure.storage.blob.models.LeaseStatusType import com.azure.storage.blob.models.ListBlobsOptions +import com.azure.storage.blob.models.ObjectReplicationPolicy +import com.azure.storage.blob.models.ObjectReplicationStatus import com.azure.storage.blob.options.PageBlobCreateOptions import com.azure.storage.blob.models.PublicAccessType import com.azure.storage.blob.specialized.AppendBlobClient import com.azure.storage.blob.specialized.BlobClientBase import com.azure.storage.common.Utility import reactor.test.StepVerifier +import spock.lang.Requires import spock.lang.Unroll import java.time.Duration @@ -934,6 +937,50 @@ class ContainerAPITest extends APISpec { pagedResponse2.getContinuationToken() == null } + /* + This test requires two accounts that are configured in a very specific way. It is not feasible to setup that + relationship programmatically, so we have recorded a successful interaction and only test recordings. + */ + @Requires( {playbackMode()}) + def "List blobs flat ORS"() { + setup: + def sourceContainer = primaryBlobServiceClient.getBlobContainerClient("test1") + def destContainer = alternateBlobServiceClient.getBlobContainerClient("test2") + + when: + def sourceBlobs = sourceContainer.listBlobs().stream().collect(Collectors.toList()) + def destBlobs = destContainer.listBlobs().stream().collect(Collectors.toList()) + + then: + int i = 0 + for (def blob : sourceBlobs) { + if (i == 1) { + assert blob.getObjectReplicationSourcePolicies() == null /* Why? */ + } else { + assert validateOR(blob.getObjectReplicationSourcePolicies(), "fd2da1b9-56f5-45ff-9eb6-310e6dfc2c80", "105f9aad-f39b-4064-8e47-ccd7937295ca") + } + i++ + } + + /* Service specifies no ors metadata on the dest blobs. */ + for (def blob : destBlobs) { + assert blob.getObjectReplicationSourcePolicies() == null + } + } + + def validateOR(List policies, String policyId, String ruleId) { + return policies.stream() + .filter({ policy -> policyId.equals(policy.getPolicyId()) }) + .findFirst() + .get() + .getRules() + .stream() + .filter({ rule -> ruleId.equals(rule.getRuleId()) }) + .findFirst() + .get() + .getStatus() == ObjectReplicationStatus.COMPLETE + } + def "List blobs flat error"() { setup: cc = primaryBlobServiceClient.getBlobContainerClient(generateContainerName()) diff --git a/sdk/storage/azure-storage-blob/src/test/resources/session-records/ContainerAPITestlistblobsflators.json b/sdk/storage/azure-storage-blob/src/test/resources/session-records/ContainerAPITestlistblobsflators.json new file mode 100644 index 000000000000..77f02c020842 --- /dev/null +++ b/sdk/storage/azure-storage-blob/src/test/resources/session-records/ContainerAPITestlistblobsflators.json @@ -0,0 +1,128 @@ +{ + "networkCallRecords" : [ { + "Method" : "PUT", + "Uri" : "https://REDACTED.blob.core.windows.net/jtclistblobsflators0containerapitestlistblobsflators5f356926a?restype=container", + "Headers" : { + "x-ms-version" : "2019-12-12", + "User-Agent" : "azsdk-java-azure-storage-blob/12.7.0-beta.1 (11.0.7; Windows 10 10.0)", + "x-ms-client-request-id" : "3290e461-7115-4e80-b517-221f6b23b297" + }, + "Response" : { + "x-ms-version" : "2019-12-12", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "ETag" : "0x8D807FCED8FAEDC", + "Last-Modified" : "Wed, 03 Jun 2020 20:30:17 GMT", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "70926a02-e01e-006c-16e5-39a637000000", + "Date" : "Wed, 03 Jun 2020 20:30:16 GMT", + "x-ms-client-request-id" : "3290e461-7115-4e80-b517-221f6b23b297" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.blob.core.windows.net/test1?restype=container&comp=list", + "Headers" : { + "x-ms-version" : "2019-12-12", + "User-Agent" : "azsdk-java-azure-storage-blob/12.7.0-beta.1 (11.0.7; Windows 10 10.0)", + "x-ms-client-request-id" : "557f745a-3d87-453e-b365-305f87feb579" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "x-ms-version" : "2019-12-12", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "retry-after" : "0", + "StatusCode" : "200", + "x-ms-request-id" : "ccd0c323-501e-0079-38e5-39b184000000", + "Body" : "bla.txt2020-05-18T09:53:04.5502688ZtrueMon, 18 May 2020 09:53:04 GMTMon, 18 May 2020 09:53:04 GMT0x8D7FB114288CFC90application/octet-stream1B2M2Y8AsgTpgAmY7PhCfg==BlockBlobHottrueunlockedavailabletruecompleteempty.txt2020-03-19T18:21:09.4878662ZtrueThu, 19 Mar 2020 18:21:09 GMTThu, 19 Mar 2020 18:21:09 GMT0x8D7CC324C3049C60text/plain1B2M2Y8AsgTpgAmY7PhCfg==BlockBlobHottrueunlockedavailabletrueempty2.txt2020-03-19T18:36:03.0870309ZtrueThu, 19 Mar 2020 18:36:03 GMTThu, 19 Mar 2020 18:36:03 GMT0x8D7CC3460D0B3250text/plain1B2M2Y8AsgTpgAmY7PhCfg==BlockBlobHottrueunlockedavailabletruecompletejavablobgetpropertiesors2blobapitestgetpropertiesors57d93407b2020-04-21T21:14:42.3905881ZtrueTue, 21 Apr 2020 21:14:42 GMTTue, 21 Apr 2020 21:14:42 GMT0x8D7E6390264E6597application/octet-streamwh+Wm18D0z1D4E+PE252gg==BlockBlobHottrueunlockedavailabletruecompletejavablobgetpropertiesors2blobapitestgetpropertiesorsa300090272020-04-21T21:12:08.2403198ZtrueTue, 21 Apr 2020 21:12:08 GMTTue, 21 Apr 2020 21:12:08 GMT0x8D7E638A68348677application/octet-streamwh+Wm18D0z1D4E+PE252gg==BlockBlobHottrueunlockedavailabletruecompletenetgetpropertiesors2blobapitestgetpropertiesors2020-04-23T22:04:56.9882747ZtrueThu, 23 Apr 2020 22:04:56 GMTThu, 23 Apr 2020 22:04:56 GMT0x8D7E7D25C0F807B1024application/octet-streameyObQAWrMwC74Eh3CuRM2g==BlockBlobHottrueunlockedavailabletruecompletepythonorstest2020-05-19T08:19:55.0147367ZtrueTue, 19 May 2020 08:19:55 GMTTue, 19 May 2020 08:19:55 GMT0x8D7FBCD695347271024application/octet-streameyObQAWrMwC74Eh3CuRM2g==BlockBlobHottrueunlockedavailabletruecompletetest-blob-05f305ef-7c62-4100-9be8-dfdc35d9acb42020-04-08T16:37:22.3864005ZtrueWed, 08 Apr 2020 16:37:22 GMTWed, 08 Apr 2020 16:37:22 GMT0x8D7DBDB1CCF02C51024application/octet-streamTVB1AC66UQCYabsrh5MhTw==BlockBlobHottrueunlockedavailabletruecompletetest-blob-19f4217a-3814-436b-a70d-3be4b0c604e22020-04-15T09:03:31.2849799ZtrueWed, 15 Apr 2020 09:03:31 GMTWed, 15 Apr 2020 09:03:31 GMT0x8D7E11BDEB2C86B1024application/octet-streamsVLUBL9mQUUJgLz3ayOPnw==BlockBlobHottrueunlockedavailabletruecompletetest-blob-2e0fea14-bcfe-49d1-a9d0-fefeee868ba82020-04-21T16:46:42.8364584ZtrueTue, 21 Apr 2020 16:46:42 GMTTue, 21 Apr 2020 16:46:42 GMT0x8D7E613923BA7281024application/octet-streamBQnM0Erc5PApw5lFS13g4A==BlockBlobHottrueunlockedavailabletruecompletetest-blob-4151db5a-2efb-4721-a652-b5fec185effd2020-04-21T18:07:56.6479262ZtrueTue, 21 Apr 2020 18:07:56 GMTTue, 21 Apr 2020 18:07:56 GMT0x8D7E61EEB40439E1024application/octet-streamr4Yw3MbQxkZ1CKa/aNq3zQ==BlockBlobHottrueunlockedavailabletruecompletetest-blob-42ac4530-d57f-4274-bec5-24008e067aa02020-04-17T10:46:50.9617246ZtrueFri, 17 Apr 2020 10:46:50 GMTFri, 17 Apr 2020 10:46:50 GMT0x8D7E2BCA2D2085E1024application/octet-streamNM1NnZ45A+0PgMnJhRd50w==BlockBlobHottrueunlockedavailabletruecompletetest-blob-439e07c8-3a3d-4884-bf70-e579e5465b9e2020-04-10T07:22:59.7039968ZtrueFri, 10 Apr 2020 07:22:59 GMTFri, 10 Apr 2020 07:22:59 GMT0x8D7DD1FFF87F7601024application/octet-streamr02uYRKktDbx7O7jr2JPEg==BlockBlobHottrueunlockedavailabletruecompletetest-blob-63a40b42-a397-49c1-9dd5-5313d1b40b0f2020-04-21T08:06:03.1429891ZtrueTue, 21 Apr 2020 08:06:03 GMTTue, 21 Apr 2020 08:06:03 GMT0x8D7E5CAD5ECB9031024application/octet-streamVHLGWd6QIy8A8j1NJLEbuQ==BlockBlobHottrueunlockedavailabletruecompletetest-blob-680635f3-442e-489f-9a85-2ac8bcc7b6642020-04-21T07:47:05.4214801ZtrueTue, 21 Apr 2020 07:47:05 GMTTue, 21 Apr 2020 07:47:05 GMT0x8D7E5C82FCA32911024application/octet-streamuy19XrzHIPUNECh4XUK9fA==BlockBlobHottrueunlockedavailabletruecompletetest-blob-7eb1888f-3392-4ac5-8ecf-32c3dcaef4242020-04-21T08:22:32.1786871ZtrueTue, 21 Apr 2020 08:22:32 GMTTue, 21 Apr 2020 08:22:32 GMT0x8D7E5CD236F70DC1024application/octet-streamz981+quoexH/KoB87CpRrQ==BlockBlobHottrueunlockedavailabletruecompletetest-blob-87054792-7952-454d-a3a4-d24d7a58072b2020-04-10T07:20:29.9760980ZtrueFri, 10 Apr 2020 07:20:29 GMTFri, 10 Apr 2020 07:20:29 GMT0x8D7DD1FA64926391024application/octet-streamn+6QqYEY1j6JhXTlQsO5+A==BlockBlobHottrueunlockedavailabletruecompletetest-blob-8d8191bb-2590-4f0c-970c-f4b5d93549372020-04-15T22:18:12.9226671ZtrueWed, 15 Apr 2020 22:18:12 GMTWed, 15 Apr 2020 22:18:12 GMT0x8D7E18AE32B73AF1024application/octet-streamBlbYwBg67aey1pHWTobLaw==BlockBlobHottrueunlockedavailabletruecompletetest-blob-94b860e9-1362-4477-87a9-b39bd5e031cd2020-04-21T08:15:11.4478471ZtrueTue, 21 Apr 2020 08:15:11 GMTTue, 21 Apr 2020 08:15:11 GMT0x8D7E5CC1CBD40751024application/octet-streamuZ68a1o3ZeCZEYGay4DNJw==BlockBlobHottrueunlockedavailabletruecompletetest-blob-9c51ac1f-7aae-41da-860f-68d24c824aec2020-04-21T17:14:10.8319566ZtrueTue, 21 Apr 2020 17:14:10 GMTTue, 21 Apr 2020 17:14:10 GMT0x8D7E6176883CF4E1024application/octet-stream5QQwR+oxRUo47fAKLNwJww==BlockBlobHottrueunlockedavailabletruecompletetest-blob-c50911a3-0d56-63b7-b271-fc06433b5a612020-04-23T21:27:51.6362967ZtrueThu, 23 Apr 2020 21:27:51 GMTThu, 23 Apr 2020 21:27:51 GMT0x8D7E7CD2DA595B71024application/octet-streamXjWQ6axCDNvVTMJmkQR5mA==BlockBlobHottrueunlockedavailabletruecompletetest-blob-d7451209-53d0-4714-8f45-5b730ff969cf2020-04-21T17:24:27.4949876ZtrueTue, 21 Apr 2020 17:24:27 GMTTue, 21 Apr 2020 17:24:27 GMT0x8D7E618D812F7D81024application/octet-streamexjSPFwG8ok4r9hKhMrSDg==BlockBlobHottrueunlockedavailabletruecompletetest-blob-d882af08-437d-41b2-b706-473aa2ca27872020-04-17T08:33:03.1782868ZtrueFri, 17 Apr 2020 08:33:03 GMTFri, 17 Apr 2020 08:33:03 GMT0x8D7E2A9F1E356C11024application/octet-streamhpZ34Awx6h0noqHRbaCziA==BlockBlobHottrueunlockedavailabletruecompletetest-blob-eb5df4b6-f52c-4c23-8e18-ffaacbc311a72020-04-21T18:15:43.5177127ZtrueTue, 21 Apr 2020 18:15:43 GMTTue, 21 Apr 2020 18:15:43 GMT0x8D7E6200186F0A71024application/octet-streamacz4lRSrvmKwlanXE6jyxA==BlockBlobHottrueunlockedavailabletruecompletetest-blob-f18c2461-e619-4fd9-ae17-c773a23dc2042020-04-21T20:55:33.4973249ZtrueTue, 21 Apr 2020 20:55:33 GMTTue, 21 Apr 2020 20:55:33 GMT0x8D7E63655998C251024application/octet-stream8kNAIpqymDVPTJuX7MXX4g==BlockBlobHottrueunlockedavailabletruecomplete", + "Date" : "Wed, 03 Jun 2020 20:30:17 GMT", + "x-ms-client-request-id" : "557f745a-3d87-453e-b365-305f87feb579", + "Content-Type" : "application/xml" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.blob.core.windows.net/test2?restype=container&comp=list", + "Headers" : { + "x-ms-version" : "2019-12-12", + "User-Agent" : "azsdk-java-azure-storage-blob/12.7.0-beta.1 (11.0.7; Windows 10 10.0)", + "x-ms-client-request-id" : "bb787576-6f60-4480-bace-f71f595c20f0" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "x-ms-version" : "2019-12-12", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "retry-after" : "0", + "StatusCode" : "200", + "x-ms-request-id" : "51be92f5-101e-004a-01e5-39794d000000", + "Body" : "bla.txtMon, 18 May 2020 09:55:04 GMTMon, 18 May 2020 09:55:04 GMT0x8D7FB118A463E240application/octet-streamAAAAAAAAAAA=1B2M2Y8AsgTpgAmY7PhCfg==BlockBlobHottrueunlockedavailabletrueempty2.txtThu, 19 Mar 2020 18:37:06 GMTThu, 19 Mar 2020 18:37:06 GMT0x8D7CC3486E43BC60text/plainAAAAAAAAAAA=1B2M2Y8AsgTpgAmY7PhCfg==BlockBlobHottrueunlockedavailabletruejavablobgetpropertiesors2blobapitestgetpropertiesors57d93407b2020-04-21T21:15:42.8141548ZtrueTue, 21 Apr 2020 21:15:42 GMTTue, 21 Apr 2020 21:15:42 GMT0x8D7E6392667E1617application/octet-stream6RYQPwaVsyQ=wh+Wm18D0z1D4E+PE252gg==BlockBlobHottrueunlockedavailabletruejavablobgetpropertiesors2blobapitestgetpropertiesorsa30009027Tue, 21 Apr 2020 21:13:08 GMTTue, 21 Apr 2020 21:13:08 GMT0x8D7E638CA717B137application/octet-stream6RYQPwaVsyQ=wh+Wm18D0z1D4E+PE252gg==BlockBlobHottrueunlockedavailabletruenetgetpropertiesors2blobapitestgetpropertiesorsThu, 23 Apr 2020 22:06:35 GMTThu, 23 Apr 2020 22:06:35 GMT0x8D7E7D296E942361024application/octet-streammvPi4gbJB9o=eyObQAWrMwC74Eh3CuRM2g==BlockBlobHottrueunlockedavailabletruepythonorstest2020-05-19T08:22:07.2080089ZtrueTue, 19 May 2020 08:22:07 GMTTue, 19 May 2020 08:22:07 GMT0x8D7FBCDB81E37C01024application/octet-streamBlockBlobHottrueunlockedavailabletruetest-blob-05f305ef-7c62-4100-9be8-dfdc35d9acb4Wed, 08 Apr 2020 16:38:23 GMTWed, 08 Apr 2020 16:38:23 GMT0x8D7DBDB414196751024application/octet-streamvzsWK4EwEM8=TVB1AC66UQCYabsrh5MhTw==BlockBlobHottrueunlockedavailabletruetest-blob-19f4217a-3814-436b-a70d-3be4b0c604e22020-04-15T09:05:43.9282492ZtrueWed, 15 Apr 2020 09:05:43 GMTWed, 15 Apr 2020 09:05:43 GMT0x8D7E11C2DC2456B1024application/octet-stream94WCAc7HFGQ=sVLUBL9mQUUJgLz3ayOPnw==BlockBlobHottrueunlockedavailabletruetest-blob-2e0fea14-bcfe-49d1-a9d0-fefeee868ba8Tue, 21 Apr 2020 16:48:43 GMTTue, 21 Apr 2020 16:48:43 GMT0x8D7E613DA21804F1024application/octet-stream2AEPgK6WcRU=BQnM0Erc5PApw5lFS13g4A==BlockBlobHottrueunlockedavailabletruetest-blob-4151db5a-2efb-4721-a652-b5fec185effd2020-04-21T18:09:56.8642226ZtrueTue, 21 Apr 2020 18:09:56 GMTTue, 21 Apr 2020 18:09:56 GMT0x8D7E61F32E750AE1024application/octet-streamFKAwHELGpEk=r4Yw3MbQxkZ1CKa/aNq3zQ==BlockBlobHottrueunlockedavailabletruetest-blob-42ac4530-d57f-4274-bec5-24008e067aa02020-04-17T10:47:52.6161586ZtrueFri, 17 Apr 2020 10:47:52 GMTFri, 17 Apr 2020 10:47:52 GMT0x8D7E2BCC790854D1024application/octet-streamny13PyKggJA=NM1NnZ45A+0PgMnJhRd50w==BlockBlobHottrueunlockedavailabletruetest-blob-439e07c8-3a3d-4884-bf70-e579e5465b9e2020-04-10T07:24:00.8336842ZtrueFri, 10 Apr 2020 07:24:00 GMTFri, 10 Apr 2020 07:24:00 GMT0x8D7DD2023F7613E1024application/octet-streamueplB3xcclM=r02uYRKktDbx7O7jr2JPEg==BlockBlobHottrueunlockedavailabletruetest-blob-63a40b42-a397-49c1-9dd5-5313d1b40b0f2020-04-21T08:06:46.5658017ZtrueTue, 21 Apr 2020 08:06:46 GMTTue, 21 Apr 2020 08:06:46 GMT0x8D7E5CAEFCDBDCB1024application/octet-streampv1DSIX8Aug=VHLGWd6QIy8A8j1NJLEbuQ==BlockBlobHottrueunlockedavailabletruetest-blob-680635f3-442e-489f-9a85-2ac8bcc7b6642020-04-21T07:48:05.8375466ZtrueTue, 21 Apr 2020 07:48:05 GMTTue, 21 Apr 2020 07:48:05 GMT0x8D7E5C853CC8C9D1024application/octet-streamrB/sHxxAu74=uy19XrzHIPUNECh4XUK9fA==BlockBlobHottrueunlockedavailabletruetest-blob-7eb1888f-3392-4ac5-8ecf-32c3dcaef424Tue, 21 Apr 2020 08:23:33 GMTTue, 21 Apr 2020 08:23:33 GMT0x8D7E5CD480678311024application/octet-streamNVq4+4q4WAg=z981+quoexH/KoB87CpRrQ==BlockBlobHottrueunlockedavailabletruetest-blob-87054792-7952-454d-a3a4-d24d7a58072bFri, 10 Apr 2020 07:21:30 GMTFri, 10 Apr 2020 07:21:30 GMT0x8D7DD1FCA9E644B1024application/octet-stream78b8bLSaYTk=n+6QqYEY1j6JhXTlQsO5+A==BlockBlobHottrueunlockedavailabletruetest-blob-8d8191bb-2590-4f0c-970c-f4b5d9354937Wed, 15 Apr 2020 22:20:15 GMTWed, 15 Apr 2020 22:20:15 GMT0x8D7E18B2C53F4011024application/octet-streamN1JkDoXufCw=BlbYwBg67aey1pHWTobLaw==BlockBlobHottrueunlockedavailabletruetest-blob-94b860e9-1362-4477-87a9-b39bd5e031cdTue, 21 Apr 2020 08:16:11 GMTTue, 21 Apr 2020 08:16:11 GMT0x8D7E5CC40B5EF1E1024application/octet-streammSC4kYrqGq0=uZ68a1o3ZeCZEYGay4DNJw==BlockBlobHottrueunlockedavailabletruetest-blob-9c51ac1f-7aae-41da-860f-68d24c824aecTue, 21 Apr 2020 17:15:11 GMTTue, 21 Apr 2020 17:15:11 GMT0x8D7E6178C9C508D1024application/octet-streamUOHbAMSrNKQ=5QQwR+oxRUo47fAKLNwJww==BlockBlobHottrueunlockedavailabletruetest-blob-c50911a3-0d56-63b7-b271-fc06433b5a612020-04-23T21:28:52.8914699ZtrueThu, 23 Apr 2020 21:28:52 GMTThu, 23 Apr 2020 21:28:52 GMT0x8D7E7CD5225B0151024application/octet-stream7yvhFMRIIAk=XjWQ6axCDNvVTMJmkQR5mA==BlockBlobHottrueunlockedavailabletruetest-blob-d7451209-53d0-4714-8f45-5b730ff969cf2020-04-21T17:25:28.3005754ZtrueTue, 21 Apr 2020 17:25:28 GMTTue, 21 Apr 2020 17:25:28 GMT0x8D7E618FC506BCC1024application/octet-streamgO24LhpeW7s=exjSPFwG8ok4r9hKhMrSDg==BlockBlobHottrueunlockedavailabletruetest-blob-d882af08-437d-41b2-b706-473aa2ca27872020-04-17T08:35:03.7666402ZtrueFri, 17 Apr 2020 08:35:03 GMTFri, 17 Apr 2020 08:35:03 GMT0x8D7E2AA39C304501024application/octet-streamuxjWsOvJkEo=hpZ34Awx6h0noqHRbaCziA==BlockBlobHottrueunlockedavailabletruetest-blob-eb5df4b6-f52c-4c23-8e18-ffaacbc311a7Tue, 21 Apr 2020 18:16:44 GMTTue, 21 Apr 2020 18:16:44 GMT0x8D7E620261B77FD1024application/octet-streamPf+f927c8hk=acz4lRSrvmKwlanXE6jyxA==BlockBlobHottrueunlockedavailabletruetest-blob-f18c2461-e619-4fd9-ae17-c773a23dc2042020-04-21T20:57:34.8379538ZtrueTue, 21 Apr 2020 20:57:34 GMTTue, 21 Apr 2020 20:57:34 GMT0x8D7E6369DEC0BA61024application/octet-stream6K5HggNY5Fg=8kNAIpqymDVPTJuX7MXX4g==BlockBlobHottrueunlockedavailabletrue", + "Date" : "Wed, 03 Jun 2020 20:30:18 GMT", + "x-ms-client-request-id" : "bb787576-6f60-4480-bace-f71f595c20f0", + "Content-Type" : "application/xml" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.blob.core.windows.net?prefix=jtclistblobsflators&comp=list", + "Headers" : { + "x-ms-version" : "2019-12-12", + "User-Agent" : "azsdk-java-azure-storage-blob/12.7.0-beta.1 (11.0.7; Windows 10 10.0)", + "x-ms-client-request-id" : "a5365d78-e01d-43b2-932d-3982c686c2c2" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "x-ms-version" : "2019-12-12", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "retry-after" : "0", + "StatusCode" : "200", + "x-ms-request-id" : "5afc6e4e-d01e-003a-7ee5-3957d8000000", + "Body" : "jtclistblobsflators/ortestsaccountcbn1/$blobchangefeed", + "Date" : "Wed, 03 Jun 2020 20:30:18 GMT", + "x-ms-client-request-id" : "a5365d78-e01d-43b2-932d-3982c686c2c2", + "Content-Type" : "application/xml" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "https://REDACTED.blob.core.windows.net?prefix=jtclistblobsflators&marker=/ortestsaccountcbn1/%24blobchangefeed&comp=list", + "Headers" : { + "x-ms-version" : "2019-12-12", + "User-Agent" : "azsdk-java-azure-storage-blob/12.7.0-beta.1 (11.0.7; Windows 10 10.0)", + "x-ms-client-request-id" : "a85a6de4-9ab5-44fd-97c8-cbe3d7430b6b" + }, + "Response" : { + "Transfer-Encoding" : "chunked", + "x-ms-version" : "2019-12-12", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "retry-after" : "0", + "StatusCode" : "200", + "x-ms-request-id" : "5bbf970a-701e-0033-6fe5-39120b000000", + "Body" : "jtclistblobsflators/ortestsaccountcbn1/$blobchangefeedjtclistblobsflators0containerapitestlistblobsflators5f356926aWed, 03 Jun 2020 20:30:17 GMT\"0x8D807FCED8FAEDC\"unlockedavailable$account-encryption-keyfalsefalsefalse", + "Date" : "Wed, 03 Jun 2020 20:30:18 GMT", + "x-ms-client-request-id" : "a85a6de4-9ab5-44fd-97c8-cbe3d7430b6b", + "Content-Type" : "application/xml" + }, + "Exception" : null + }, { + "Method" : "DELETE", + "Uri" : "https://REDACTED.blob.core.windows.net/jtclistblobsflators0containerapitestlistblobsflators5f356926a?restype=container", + "Headers" : { + "x-ms-version" : "2019-12-12", + "User-Agent" : "azsdk-java-azure-storage-blob/12.7.0-beta.1 (11.0.7; Windows 10 10.0)", + "x-ms-client-request-id" : "eecf3660-5d38-4014-9ac8-3599e4dc6701" + }, + "Response" : { + "x-ms-version" : "2019-12-12", + "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "retry-after" : "0", + "Content-Length" : "0", + "StatusCode" : "202", + "x-ms-request-id" : "cd35b552-d01e-0067-65e5-395d5c000000", + "Date" : "Wed, 03 Jun 2020 20:30:19 GMT", + "x-ms-client-request-id" : "eecf3660-5d38-4014-9ac8-3599e4dc6701" + }, + "Exception" : null + } ], + "variables" : [ "jtclistblobsflators0containerapitestlistblobsflators5f356926a" ] +} \ No newline at end of file