fix(knowledge): preserve primary rows on taxonomy timeout
This commit is contained in:
@@ -1059,23 +1059,85 @@ class KnowledgeService:
|
||||
timeout=_PRIMARY_KM_DIRECT_QUERY_TIMEOUT_SECONDS,
|
||||
)
|
||||
items = [_direct_knowledge_entry_from_row(dict(row)) for row in rows]
|
||||
categories = await self._read_categories_direct_with_conn(
|
||||
conn,
|
||||
project_id=project_id,
|
||||
degraded_side_reads: list[str] = []
|
||||
try:
|
||||
categories = await self._read_categories_direct_with_conn(
|
||||
conn,
|
||||
project_id=project_id,
|
||||
)
|
||||
except Exception as exc: # noqa: BLE001 - preserve primary rows
|
||||
logger.warning(
|
||||
"knowledge_direct_categories_readback_degraded",
|
||||
project_id=project_id,
|
||||
error_type=type(exc).__name__,
|
||||
)
|
||||
categories = []
|
||||
degraded_side_reads.append("categories")
|
||||
categories_ready = bool(
|
||||
categories and any(row.count > 0 for row in categories)
|
||||
)
|
||||
asset_taxonomy = await self._read_asset_taxonomy_direct_with_conn(
|
||||
conn,
|
||||
project_id=project_id,
|
||||
if not categories_ready and "categories" not in degraded_side_reads:
|
||||
degraded_side_reads.append("categories")
|
||||
try:
|
||||
asset_taxonomy = (
|
||||
await self._read_asset_taxonomy_direct_with_conn(
|
||||
conn,
|
||||
project_id=project_id,
|
||||
)
|
||||
)
|
||||
except Exception as exc: # noqa: BLE001 - preserve primary rows
|
||||
logger.warning(
|
||||
"knowledge_direct_asset_taxonomy_readback_degraded",
|
||||
project_id=project_id,
|
||||
error_type=type(exc).__name__,
|
||||
)
|
||||
asset_taxonomy = []
|
||||
degraded_side_reads.append("asset_taxonomy")
|
||||
asset_taxonomy_ready = bool(
|
||||
asset_taxonomy
|
||||
and any(row.count > 0 for row in asset_taxonomy)
|
||||
)
|
||||
if (
|
||||
not asset_taxonomy_ready
|
||||
and "asset_taxonomy" not in degraded_side_reads
|
||||
):
|
||||
degraded_side_reads.append("asset_taxonomy")
|
||||
source_entries = _source_backed_entries()
|
||||
partial_taxonomy = bool(degraded_side_reads)
|
||||
return KnowledgeListResponse(
|
||||
items=items,
|
||||
total=total,
|
||||
categories=categories or _source_category_counts(items),
|
||||
asset_taxonomy=asset_taxonomy or _source_asset_taxonomy_counts(items),
|
||||
readback_status="ready_direct_connection_after_session_timeout",
|
||||
categories=(
|
||||
categories
|
||||
if categories_ready
|
||||
else _source_category_counts(source_entries)
|
||||
),
|
||||
asset_taxonomy=(
|
||||
asset_taxonomy
|
||||
if asset_taxonomy_ready
|
||||
else _source_asset_taxonomy_counts(source_entries)
|
||||
),
|
||||
readback_status=(
|
||||
"ready_direct_connection_partial_taxonomy_degraded"
|
||||
if partial_taxonomy
|
||||
else "ready_direct_connection_after_session_timeout"
|
||||
),
|
||||
primary_readback_ready=True,
|
||||
operator_stage="knowledge_readback_direct_connection_recovered",
|
||||
next_step="repair_session_pool_readback_without_hiding_primary_km",
|
||||
degraded_reason_code=(
|
||||
"primary_km_taxonomy_readback_degraded"
|
||||
if partial_taxonomy
|
||||
else None
|
||||
),
|
||||
operator_stage=(
|
||||
"knowledge_direct_primary_rows_ready_taxonomy_degraded"
|
||||
if partial_taxonomy
|
||||
else "knowledge_readback_direct_connection_recovered"
|
||||
),
|
||||
next_step=(
|
||||
"repair_primary_km_taxonomy_without_hiding_primary_rows"
|
||||
if partial_taxonomy
|
||||
else "repair_session_pool_readback_without_hiding_primary_km"
|
||||
),
|
||||
writes_on_read=False,
|
||||
manual_review_required=False,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user