Retain bounded native probe failure diagnostics before cleanup
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s

Assistant: codex
Assistant-Model: gpt-6-astra
Assistant-Session: 01a07ff8-19d0-7820-b4d0-1353833cb7fc
This commit is contained in:
codex 2026-09-11 12:37:29 +02:00
parent 426a0d5829
commit aaa4b8e686
3 changed files with 47 additions and 5 deletions

View file

@ -137,6 +137,26 @@ def operator_identity(rows):
return candidates[0]
def failure_diagnostic(raw):
"""Persist only known assertion codes and HTTP status numbers, never raw logs."""
if len(raw)>8192:return {'error':'probe_diagnostic_unavailable'}
try:body=json.loads(raw)
except (ValueError,UnicodeError):return {'error':'probe_diagnostic_unavailable'}
codes={'contained_probe_failed','lost-receipt_failed','restart-retry_failed',
'source_bundle_mismatch','fresh_probe_state_required','unexpected_approval',
'outbox_not_preserved','unexpected_drain_result','unexpected_outbox_state',
'native_accept_duplicate_not_observed','response_too_large',
'source_refusal_inconclusive','tenant_refusal_inconclusive',
'read_refusal_inconclusive','invalid_bearer_not_refused','own_reconciliation_failed',
'probe_count_not_one','sibling_reconciliation_not_refused'}
result={k:body[k] for k in ['error','child_error'] if body.get(k) in codes}
if body.get('phase') in {'bootstrap','lost-receipt','restart-retry'}:result['phase']=body['phase']
statuses=body.get('observed_http_statuses',[])
if isinstance(statuses,list) and len(statuses)<=10 and all(type(x) is int and 100<=x<=599 for x in statuses):
result['observed_http_statuses']=statuses
return result or {'error':'probe_diagnostic_unavailable'}
def jobs(packet, kube, receipt, save):
"""Consume only the producer's already-delivered credential inside its Job."""
receipt['receiver_before']=receiver_check(kube,RECEIVER)
@ -160,6 +180,13 @@ def jobs(packet, kube, receipt, save):
job=data(command(kube+['-n',sender,'get','job',name,'-o','json']))
if job.get('status',{}).get('succeeded')==1:break
if job.get('status',{}).get('failed'):
failed_pods=data(command(kube+['-n',sender,'get','pods','-l','job-name='+name,'-o','json']))['items']
diagnostics=[]
for failed in failed_pods:
if any(o['uid']==job['metadata']['uid'] and o.get('controller') is True for o in failed['metadata'].get('ownerReferences',[])):
logs=command(kube+['-n',sender,'logs',failed['metadata']['name'],'-c','probe'],allow_failure=True)
diagnostics.append(failure_diagnostic(logs.stdout))
receipt['failed_producer']={'sender':sender,'diagnostics':diagnostics};save()
raise LaneError('native_probe_job_failed_'+sender)
time.sleep(2)
else:raise LaneError('native_probe_job_timeout_'+sender)