Azure / Azurite

A lightweight server clone of Azure Storage that simulates most of the commands supported by it with minimal dependencies

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Azurite holds a lock on the two directories `__blobstorage__` and `__queuestorage__`

danielniccoli opened this issue · comments

Which service(blob, file, queue, table) does this issue concern?

blob, queue

Which version of the Azurite was used?

v3.29.0

Where do you get Azurite? (npm, DockerHub, NuGet, Visual Studio Code Extension)

Visual Studio Code Extension

What problem was encountered?

After starting and stopping Azurite in VSCode using the >Azurite: Start and >Azurite: Close commands, The extension still holds a lock on the two directories __blobstorage__ and __queuestorage__. Consequently, I am unable to delete these directories, for example to start anew, until I close VS Code. This makes that process unnecessary frustrating.

Steps to reproduce the issue?

  1. >Azurite: Start
  2. >Azurite: Close
  3. Try deleting __blobstorage__ and __queuestorage__ in the project root. Will fail.
  4. Close VS Code.
  5. Try deleting __blobstorage__ and __queuestorage__ in the project root. Will succeed.

Have you found a mitigation/solution?

No.

@danielniccoli

Thanks for raising this issue!

In VS Code, Azurite is running in VS code process, so close Azurite will close the http service but can't stop whole process.

When Azurite read/save content in local disk, it will create Stream like

const stream = createReadStream(path, {
.
When create Stream Azurite will not set autoClose , and the autoClose default value is true (See link ). So Azurite depends on NodeJS to close the stream after finish using it. But currently it looks the stream is not closed and cause the related folder can't be deleted.

One workaround is: If you would like to have the content always be cleaned up after close Azurite, you can try to save the content in memory by enable following setting.
image

Thanks for mentioning the in-memory persisting option. This will work in most situations where I do not test crashes and replays.

Would it not be possible to manually close the stream when the close command is issued?

There are still not easy way to close the stream manually without changing the code, we need check all place to read the stream, and add code to close it after the last time using it. However, this might have regression risk, and we have other feature parity in hand, so this might won't be our recent priority.

It may just be enough to close the stream when issuing the Azurite Close command.

@EmmaZhu

Can your in progress PR #2331 fix this issue?
As we discussed, it looks also on closing file handles.

@blueww ,

Yes, still working on it, will need to resolve some test failures.