Azure / Azure/Azurite

Container_ListBlobHierarchySegment: the Blob and VirtualDir are not returned in alphabetic order

Open
#321 2 comments 0 reactions 1 assignee Claimed by @Poku8 View on GitHub
blob-storage NewArch stale
Dominant language
TypeScript
Stars
2.3k
Forks
393
Avg merge
1d 20h
Merged PRs (30d)
36

Description

### Which service(blob, file, queue, table) does this issue concern?
blob
### Which version of the Azurite was used?
3.3.0-preview
### Where do you get Azurite? (npm, DockerHub, NuGet, Visual Studio Code Extension)
VS code
### What's the Node.js version?
v10.15.3
### What problem was encountered?
Container_ListBlobHierarchySegment: the Blob and VirtualDir are not returned in alphabetic order
### Steps to reproduce the issue?
A container has a VirtualDir , which contains 3 items (1 blob, and 2 Virtual Dir):
http://127.0.0.1:10000/devstoreaccount1/testc636fb0a1e667421ab0a45f9b6cd0f20c/TopDir1:Blob1
http://127.0.0.1:10000/devstoreaccount1/testc636fb0a1e667421ab0a45f9b6cd0f20c/TopDir1:MidDir1
http://127.0.0.1:10000/devstoreaccount1/testc636fb0a1e667421ab0a45f9b6cd0f20c/TopDir1:MidDir2

List Blob withuseFlatBlobListing = false
The returned Blob list is not in alphabetic order :
returned: MidDir1, MidDir2, Blob1
Excpected: Blob1, MidDir1, MidDir2,
### Have you found a mitigation/solution?
No

Test Case:
```
Test Name: CloudBlobDirectoryFlatListing
Test FullName: Microsoft.Azure.Storage.Blob.CloudBlobDirectoryTest.CloudBlobDirectoryFlatListing
Test Source: C:\code\azure-storage-net\Test\ClassLibraryCommon\Blob\CloudBlobDirectoryTest.cs : line 144
Test Outcome: Failed
Test Duration: 0:00:01.5461854

Result StackTrace: at Microsoft.Azure.Storage.Blob.CloudBlobDirectoryTest.CloudBlobDirectoryFlatListing() in C:\code\azure-storage-net\Test\ClassLibraryCommon\Blob\CloudBlobDirectoryTest.cs:line 166
Result Message: Assert.IsTrue failed.
```
Debug Log:
```
2019-12-17T09:12:18.816Z 0490209d-380c-436e-bc20-bc8e7085a438 info: BlobStorageContextMiddleware: RequestMethod=GET RequestURL=http://127.0.0.1/devstoreaccount1/testc636fb0a1e667421ab0a45f9b6cd0f20c?restype=container&comp=list&prefix=TopDir1%3A&delimiter=%3A RequestHeaders:{"x-ms-client-request-id":"04b97068-dc0a-4112-9c8c-d47d1f2547aa","user-agent":"Azure-Storage/11.1.1 (.NET Core; Win32NT 6.2.9200.0)","x-ms-version":"2019-02-02","x-ms-date":"Tue, 17 Dec 2019 09:12:18 GMT","authorization":"SharedKey devstoreaccount1:+uhI4ljBbcOzJc3EzVsM3VuYXYCzHkuMxtCZSw2Dy+c=","host":"127.0.0.1:10000"} ClientIP=127.0.0.1 Protocol=http HTTPVersion=1.1
2019-12-17T09:12:18.816Z 0490209d-380c-436e-bc20-bc8e7085a438 info: BlobStorageContextMiddleware: Account=devstoreaccount1 Container=testc636fb0a1e667421ab0a45f9b6cd0f20c Blob=
2019-12-17T09:12:18.817Z 0490209d-380c-436e-bc20-bc8e7085a438 verbose: DispatchMiddleware: Dispatching request...
2019-12-17T09:12:18.817Z 0490209d-380c-436e-bc20-bc8e7085a438 info: DispatchMiddleware: Operation=Container_ListBlobHierarchySegment
2019-12-17T09:12:18.818Z 0490209d-380c-436e-bc20-bc8e7085a438 verbose: AuthenticationMiddlewareFactory:createAuthenticationMiddleware() Validating authentications.
2019-12-17T09:12:18.818Z 0490209d-380c-436e-bc20-bc8e7085a438 info: PublicAccessAuthenticator:validate() Start validation against public access.
2019-12-17T09:12:18.818Z 0490209d-380c-436e-bc20-bc8e7085a438 debug: PublicAccessAuthenticator:validate() Getting account properties...
2019-12-17T09:12:18.819Z 0490209d-380c-436e-bc20-bc8e7085a438 debug: PublicAccessAuthenticator:validate() Retrieved account name from context: devstoreaccount1, container: testc636fb0a1e667421ab0a45f9b6cd0f20c, blob:
2019-12-17T09:12:18.824Z 0490209d-380c-436e-bc20-bc8e7085a438 debug: PublicAccessAuthenticator:validate() Skip public access authentication. Cannot get public access type for container testc636fb0a1e667421ab0a45f9b6cd0f20c
2019-12-17T09:12:18.824Z 0490209d-380c-436e-bc20-bc8e7085a438 info: BlobSharedKeyAuthenticator:validate() Start validation against account shared key authentication.
2019-12-17T09:12:18.824Z 0490209d-380c-436e-bc20-bc8e7085a438 info: BlobSharedKeyAuthenticator:validate() [STRING TO SIGN]:"GET\n\n\n\n\n\n\n\n\n\n\n\nx-ms-client-request-id:04b97068-dc0a-4112-9c8c-d47d1f2547aa\nx-ms-date:Tue, 17 Dec 2019 09:12:18 GMT\nx-ms-version:2019-02-02\n/devstoreaccount1/devstoreaccount1/testc636fb0a1e667421ab0a45f9b6cd0f20c\ncomp:list\ndelimiter::\nprefix:TopDir1:\nrestype:container"
2019-12-17T09:12:18.825Z 0490209d-380c-436e-bc20-bc8e7085a438 info: BlobSharedKeyAuthenticator:validate() Calculated authentication header based on key1: SharedKey devstoreaccount1:+uhI4ljBbcOzJc3EzVsM3VuYXYCzHkuMxtCZSw2Dy+c=
2019-12-17T09:12:18.825Z 0490209d-380c-436e-bc20-bc8e7085a438 info: BlobSharedKeyAuthenticator:validate() Signature 1 matched.
2019-12-17T09:12:18.825Z 0490209d-380c-436e-bc20-bc8e7085a438 verbose: DeserializerMiddleware: Start deserializing...
2019-12-17T09:12:18.825Z 0490209d-380c-436e-bc20-bc8e7085a438 info: HandlerMiddleware: DeserializedParameters={"options":{"prefix":"TopDir1:","include":[],"requestId":"04b97068-dc0a-4112-9c8c-d47d1f2547aa"},"delimiter":":","restype":"container","comp":"list","version":"2019-02-02"}
2019-12-17T09:12:18.830Z 0490209d-380c-436e-bc20-bc8e7085a438 verbose: SerializerMiddleware: Start serializing...
2019-12-17T09:12:18.832Z 0490209d-380c-436e-bc20-bc8e7085a438 debug: Serializer: Raw response body string is TopDir1:5000:TopDir1:MidDir1:TopDir1:MidDir2:TopDir1:Blob1Tue, 17 Dec 2019 09:12:18 GMTTue, 17 Dec 2019 09:12:18 GMT"d-WxJZ9A0ktj8Drs6lWeQSePvnISA"0application/octet-streamPageBlobunlockedavailabletrue
2019-12-17T09:12:18.832Z 0490209d-380c-436e-bc20-bc8e7085a438 info: Serializer: Start returning stream body.
2019-12-17T09:12:18.833Z 0490209d-380c-436e-bc20-bc8e7085a438 info: EndMiddleware: End response. TotalTimeInMS=17 StatusCode=200 StatusMessage=OK Headers={"server":"Azurite-Blob/3.3.0-preview","content-type":"application/xml","x-ms-client-request-id":"04b97068-dc0a-4112-9c8c-d47d1f2547aa","x-ms-request-id":"0490209d-380c-436e-bc20-bc8e7085a438","x-ms-version":"2019-02-02","date":"Tue, 17 Dec 2019 09:12:18 GMT"}
2019-12-17T09:12:48.027Z info: AccountDataStore:init() Refresh accounts from environment variable AZURITE_ACCOUNTS with value undefined
2019-12-17T09:12:48.028Z info: AccountDataStore:init() Fallback to default emulator account devstoreaccount1.
2019-12-17T09:13:48.028Z info: AccountDataStore:init() Refresh accounts from environment variable AZURITE_ACCOUNTS with value undefined
2019-12-17T09:13:48.029Z info: AccountDataStore:init() Fallback to default emulator account devstoreaccount1.
2019-12-17T09:14:48.029Z info: AccountDataStore:init() Refresh accounts from environment variable AZURITE_ACCOUNTS with value undefined
2019-12-17T09:14:48.030Z info: AccountDataStore:init() Fallback to default emulator account devstoreaccount1.
2019-12-17T09:15:48.028Z info: AccountDataStore:init() Refresh accounts from environment variable AZURITE_ACCOUNTS with value undefined
2019-12-17T09:15:48.030Z info: AccountDataStore:init() Fallback to default emulator account devstoreaccount1.
2019-12-17T09:16:48.029Z info: AccountDataStore:init() Refresh accounts from environment variable AZURITE_ACCOUNTS with value undefined
2019-12-17T09:16:48.029Z info: AccountDataStore:init() Fallback to default emulator account devstoreaccount1.
2019-12-17T09:16:48.305Z info: BlobGCManager:markSweepLoop() Start next mark and sweep.
2019-12-17T09:16:48.305Z info: BlobGCManager:markSweep() Get all extents.
2019-12-17T09:16:48.306Z info: BlobGCManager:markSweep() Got 15 extents.
2019-12-17T09:16:48.306Z info: BlobGCManager:markSweep() Get referred extents.
2019-12-17T09:16:48.307Z info: BlobGCManager:markSweep() Got referred extents, unreferenced extents count is 0.
2019-12-17T09:16:48.308Z info: BlobGCManager:markSweepLoop() Mark and sweep finished, taken 3ms.
2019-12-17T09:16:48.308Z info: BlobGCManager:markSweepLoop() Sleep for 600000ms.
```

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.