Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

improve messaging and UI around cleanup of leftover index attempts #3247

Merged
merged 2 commits into from
Nov 25, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions backend/danswer/background/celery/apps/primary.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
from danswer.db.engine import get_session_with_default_tenant
from danswer.db.engine import SqlEngine
from danswer.db.index_attempt import get_index_attempt
from danswer.db.index_attempt import mark_attempt_failed
from danswer.db.index_attempt import mark_attempt_canceled
from danswer.redis.redis_connector_credential_pair import RedisConnectorCredentialPair
from danswer.redis.redis_connector_delete import RedisConnectorDelete
from danswer.redis.redis_connector_doc_perm_sync import RedisConnectorPermissionSync
Expand Down Expand Up @@ -165,13 +165,13 @@ def on_worker_init(sender: Any, **kwargs: Any) -> None:
continue

failure_reason = (
f"Orphaned index attempt found on startup: "
f"Canceling leftover index attempt found on startup: "
f"index_attempt={attempt.id} "
f"cc_pair={attempt.connector_credential_pair_id} "
f"search_settings={attempt.search_settings_id}"
)
logger.warning(failure_reason)
mark_attempt_failed(attempt.id, db_session, failure_reason)
mark_attempt_canceled(attempt.id, db_session, failure_reason)


@worker_ready.connect
Expand Down
2 changes: 1 addition & 1 deletion backend/danswer/background/celery/tasks/indexing/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ def __init__(
self.started: datetime = datetime.now(timezone.utc)
self.redis_lock.reacquire()

self.last_tag: str = ""
self.last_tag: str = "IndexingCallback.__init__"
self.last_lock_reacquire: datetime = datetime.now(timezone.utc)

def should_stop(self) -> bool:
Expand Down
2 changes: 2 additions & 0 deletions backend/danswer/db/enums.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,15 @@ class IndexingStatus(str, PyEnum):
NOT_STARTED = "not_started"
IN_PROGRESS = "in_progress"
SUCCESS = "success"
CANCELED = "canceled"
FAILED = "failed"
COMPLETED_WITH_ERRORS = "completed_with_errors"

def is_terminal(self) -> bool:
terminal_states = {
IndexingStatus.SUCCESS,
IndexingStatus.COMPLETED_WITH_ERRORS,
IndexingStatus.CANCELED,
IndexingStatus.FAILED,
}
return self in terminal_states
Expand Down
22 changes: 22 additions & 0 deletions backend/danswer/db/index_attempt.py
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,28 @@ def mark_attempt_partially_succeeded(
raise


def mark_attempt_canceled(
index_attempt_id: int,
db_session: Session,
reason: str = "Unknown",
) -> None:
try:
attempt = db_session.execute(
select(IndexAttempt)
.where(IndexAttempt.id == index_attempt_id)
.with_for_update()
).scalar_one()

if not attempt.time_started:
attempt.time_started = datetime.now(timezone.utc)
attempt.status = IndexingStatus.CANCELED
attempt.error_msg = reason
db_session.commit()
except Exception:
db_session.rollback()
raise


def mark_attempt_failed(
index_attempt_id: int,
db_session: Session,
Expand Down
9 changes: 5 additions & 4 deletions web/src/app/admin/configuration/search/UpgradingPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -68,10 +68,11 @@ export default function UpgradingPage({
const statusOrder: Record<ValidStatuses, number> = useMemo(
() => ({
failed: 0,
completed_with_errors: 1,
not_started: 2,
in_progress: 3,
success: 4,
canceled: 1,
completed_with_errors: 2,
not_started: 3,
in_progress: 4,
success: 5,
}),
[]
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -322,7 +322,8 @@ export function IndexingAttemptsTable({ ccPair }: { ccPair: CCPairFullInfo }) {
</Text>
)}

{indexAttempt.status === "failed" &&
{(indexAttempt.status === "failed" ||
indexAttempt.status === "canceled") &&
indexAttempt.error_msg && (
<Text className="flex flex-wrap whitespace-normal">
{indexAttempt.error_msg}
Expand Down
8 changes: 7 additions & 1 deletion web/src/components/Status.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ export function IndexAttemptStatus({
popupContent={
<div className="w-64 p-2 break-words overflow-hidden whitespace-normal">
The indexing attempt completed, but some errors were encountered
during the rrun.
during the run.
<br />
<br />
Click View Errors for more details.
Expand All @@ -78,6 +78,12 @@ export function IndexAttemptStatus({
Scheduled
</Badge>
);
} else if (status === "canceled") {
badge = (
<Badge variant="canceled" icon={FiClock}>
Canceled
</Badge>
);
} else {
badge = (
<Badge variant="outline" icon={FiMinus}>
Expand Down
2 changes: 2 additions & 0 deletions web/src/components/ui/badge.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ const badgeVariants = cva(
{
variants: {
variant: {
canceled:
"border-gray-200 bg-gray-50 text-gray-600 hover:bg-gray-75 dark:bg-gray-900 dark:text-neutral-50 dark:hover:bg-gray-850",
orange:
"border-orange-200 bg-orange-50 text-orange-600 hover:bg-orange-75 dark:bg-orange-900 dark:text-neutral-50 dark:hover:bg-orange-850",
paused:
Expand Down
1 change: 1 addition & 0 deletions web/src/lib/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ export type ValidInputTypes = "load_state" | "poll" | "event";
export type ValidStatuses =
| "success"
| "completed_with_errors"
| "canceled"
| "failed"
| "in_progress"
| "not_started";
Expand Down
Loading