mirror of
https://github.com/danswer-ai/danswer.git
synced 2025-10-09 20:55:06 +02:00
Remove Nested Session (#78)
This commit is contained in:
@@ -37,7 +37,7 @@ def sync_user_group_task(user_group_id: int) -> None:
|
|||||||
error_msg = str(e)
|
error_msg = str(e)
|
||||||
logger.exception(f"Failed to sync user group - {error_msg}")
|
logger.exception(f"Failed to sync user group - {error_msg}")
|
||||||
|
|
||||||
# need a new session so this can be committed (previous transaction may have
|
# Need a new session so this can be committed (previous transaction may have
|
||||||
# been rolled back due to the exception)
|
# been rolled back due to the exception)
|
||||||
with Session(engine) as db_session:
|
with Session(engine) as db_session:
|
||||||
mark_task_finished(task_name, db_session, success=error_msg is None)
|
mark_task_finished(task_name, db_session, success=error_msg is None)
|
||||||
|
@@ -18,7 +18,7 @@ from ee.danswer.server.api_key.models import APIKeyArgs
|
|||||||
|
|
||||||
|
|
||||||
def is_api_key_email_address(email: str) -> bool:
|
def is_api_key_email_address(email: str) -> bool:
|
||||||
return email.endswith(f"@{DANSWER_API_KEY_DUMMY_EMAIL_DOMAIN}")
|
return email.endswith(f"{DANSWER_API_KEY_DUMMY_EMAIL_DOMAIN}")
|
||||||
|
|
||||||
|
|
||||||
def fetch_api_keys(db_session: Session) -> list[ApiKeyDescriptor]:
|
def fetch_api_keys(db_session: Session) -> list[ApiKeyDescriptor]:
|
||||||
|
@@ -4,7 +4,6 @@ from danswer.access.access import get_access_for_documents
|
|||||||
from danswer.db.document import prepare_to_modify_documents
|
from danswer.db.document import prepare_to_modify_documents
|
||||||
from danswer.db.embedding_model import get_current_db_embedding_model
|
from danswer.db.embedding_model import get_current_db_embedding_model
|
||||||
from danswer.db.embedding_model import get_secondary_db_embedding_model
|
from danswer.db.embedding_model import get_secondary_db_embedding_model
|
||||||
from danswer.db.engine import get_sqlalchemy_engine
|
|
||||||
from danswer.document_index.factory import get_default_document_index
|
from danswer.document_index.factory import get_default_document_index
|
||||||
from danswer.document_index.interfaces import DocumentIndex
|
from danswer.document_index.interfaces import DocumentIndex
|
||||||
from danswer.document_index.interfaces import UpdateRequest
|
from danswer.document_index.interfaces import UpdateRequest
|
||||||
@@ -21,29 +20,31 @@ _SYNC_BATCH_SIZE = 1000
|
|||||||
|
|
||||||
|
|
||||||
def _sync_user_group_batch(
|
def _sync_user_group_batch(
|
||||||
document_ids: list[str], document_index: DocumentIndex
|
document_ids: list[str], document_index: DocumentIndex, db_session: Session
|
||||||
) -> None:
|
) -> None:
|
||||||
logger.debug(f"Syncing document sets for: {document_ids}")
|
logger.debug(f"Syncing document sets for: {document_ids}")
|
||||||
# begin a transaction, release lock at the end
|
|
||||||
with Session(get_sqlalchemy_engine()) as db_session:
|
|
||||||
# acquires a lock on the documents so that no other process can modify them
|
|
||||||
prepare_to_modify_documents(db_session=db_session, document_ids=document_ids)
|
|
||||||
|
|
||||||
# get current state of document sets for these documents
|
# Acquires a lock on the documents so that no other process can modify them
|
||||||
document_id_to_access = get_access_for_documents(
|
prepare_to_modify_documents(db_session=db_session, document_ids=document_ids)
|
||||||
document_ids=document_ids, db_session=db_session
|
|
||||||
)
|
|
||||||
|
|
||||||
# update Vespa
|
# get current state of document sets for these documents
|
||||||
document_index.update(
|
document_id_to_access = get_access_for_documents(
|
||||||
update_requests=[
|
document_ids=document_ids, db_session=db_session
|
||||||
UpdateRequest(
|
)
|
||||||
document_ids=[document_id],
|
|
||||||
access=document_id_to_access[document_id],
|
# update Vespa
|
||||||
)
|
document_index.update(
|
||||||
for document_id in document_ids
|
update_requests=[
|
||||||
]
|
UpdateRequest(
|
||||||
)
|
document_ids=[document_id],
|
||||||
|
access=document_id_to_access[document_id],
|
||||||
|
)
|
||||||
|
for document_id in document_ids
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
# Finish the transaction and release the locks
|
||||||
|
db_session.commit()
|
||||||
|
|
||||||
|
|
||||||
def sync_user_groups(user_group_id: int, db_session: Session) -> None:
|
def sync_user_groups(user_group_id: int, db_session: Session) -> None:
|
||||||
@@ -70,6 +71,7 @@ def sync_user_groups(user_group_id: int, db_session: Session) -> None:
|
|||||||
_sync_user_group_batch(
|
_sync_user_group_batch(
|
||||||
document_ids=[document.id for document in document_batch],
|
document_ids=[document.id for document in document_batch],
|
||||||
document_index=document_index,
|
document_index=document_index,
|
||||||
|
db_session=db_session,
|
||||||
)
|
)
|
||||||
|
|
||||||
if user_group.is_up_for_deletion:
|
if user_group.is_up_for_deletion:
|
||||||
|
Reference in New Issue
Block a user