qdrant-client icon indicating copy to clipboard operation
qdrant-client copied to clipboard

Don't write .lock file when loading from an existing collection

Open jonas-nothnagel opened this issue 1 year ago • 2 comments

I have stored a qdrant collection locally on my computer to access it for testing purposes. I am building a chatbot app in gradio and it requires to load the app.py many times to develop it in iterations.

However, every time I load the collection a .lock file is automatically created which I have to manually delete each time when loading app again for my application. Otherwise I run into following error:

RuntimeError: Storage folder qdrant/ is already accessed by another instance of Qdrant client. If you require concurrent access, use Qdrant server instead.

The code to load the collection is as follows:

vectors = QdrantVectorStore.from_existing_collection(
    path="qdrant/", 
    collection_name="uganda-documents",
    
    embedding = HuggingFaceEmbeddings(
        model_kwargs = {'device': device},
        encode_kwargs = {'normalize_embeddings': bool(int(config.get('retriever','NORMALIZE')))},
        model_name=config.get('retriever','MODEL')
    )
)

I would like to either automatically delete the .lock file or to not create it at all in the first place. Is this possible within Qdrant or do I have to build a manual work around?

I know I could simply add something like a os.remove("qdrant/.lock") but it seems not very intuitive.

jonas-nothnagel avatar Sep 02 '24 11:09 jonas-nothnagel

Hi @jonas-nothnagel, sorry for the late response

I am not an expert of gradio, but if it works in a similar way to streamlit, then you would either have a shared object, which is created only once or you can use .close()

If the former approach is possible, I think it would be preferable

joein avatar Sep 17 '24 09:09 joein

lock_file = os.path.join(self.db_dir, ".lock")
if os.path.exists(lock_file):
     os.remove(lock_file)

 os.makedirs(self.db_dir, exist_ok=True)

nikitaCodeSave avatar Nov 27 '24 10:11 nikitaCodeSave