Azurite icon indicating copy to clipboard operation
Azurite copied to clipboard

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

Open danielniccoli opened this issue 1 year ago • 6 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 avatar Feb 05 '24 14:02 danielniccoli

@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 https://github.com/Azure/Azurite/blob/d544d16f910e490fdd9db5565459df701895308f/src/common/persistence/FSExtentStore.ts#L343. 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

blueww avatar Feb 06 '24 08:02 blueww

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?

danielniccoli avatar Feb 07 '24 02:02 danielniccoli

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.

blueww avatar Feb 28 '24 06:02 blueww

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

danielniccoli avatar Feb 29 '24 07:02 danielniccoli

@EmmaZhu

Can your in progress PR https://github.com/Azure/Azurite/pull/2331 fix this issue? As we discussed, it looks also on closing file handles.

blueww avatar Feb 29 '24 08:02 blueww

@blueww ,

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

EmmaZhu avatar Feb 29 '24 09:02 EmmaZhu