1
0

runtime: publish SUPPORT-260927-HOMELAB-BACKUP-CT110-CONTROLLED-HELPER-REPLAY-1226R1

This commit is contained in:
homelab-runtime-publisher
2026-09-27 19:14:51 +00:00
parent b474de0531
commit 4c060c53a7
4 changed files with 301 additions and 140 deletions
File diff suppressed because one or more lines are too long
@@ -0,0 +1,143 @@
CHAT_OUTPUT_BEGIN
COMMAND_ID=SUPPORT-260927-HOMELAB-BACKUP-CT110-CONTROLLED-HELPER-REPLAY-1226R1
STATUS=OK
RC=0
HOST=pve01
MODE=read-only
COMPONENT=homelab-backup-ct110-controlled-helper-replay
REFERENCE_REGISTER_CHECK=OK
REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66
ERROR_REGISTER_CHECK=OK
ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0
COMMAND_SHA256=32a5e6c027972640a0f44b6bdd014c002fc0caf8a527b7c84e7ecbf8799f0239
DUPLICATE_FAILED_COMMAND_BLOCKED=false
EXECUTION_STARTED=true
CHANGE_DECLARED=false
RESULT_CONTRACT_VALID=true
RESULT_CONTRACT_STATUS=NOT_APPLICABLE
RESULT_CONTRACT_ERROR=NONE
COMMAND_RC=0
CHANGES_MADE=false
ROLLBACK_STARTED=false
ROLLBACK_RESTORED=null
MUTATION_OUTCOME=NO_MUTATION
SANITIZED=yes
SECRETS_INCLUDED=no
PRIVATE_ADDRESSES_INCLUDED=no
RAW_EVIDENCE_SHA256=78769cfe154169eb8d04145ec7c1d4c210deff8c7af9abdada3e9206ec9c2ea5
SANITIZED_OUTPUT_SHA256=78769cfe154169eb8d04145ec7c1d4c210deff8c7af9abdada3e9206ec9c2ea5
OUTPUT_BEGIN
BACKUP_CT110_CONTROLLED_HELPER_REPLAY_BEGIN=true
COMMAND_ID=SUPPORT-260927-HOMELAB-BACKUP-CT110-CONTROLLED-HELPER-REPLAY-1226R1
MODE=read-only
COMPONENT=homelab-backup-ct110-controlled-helper-replay
MUTATION_BOUNDARY=TEMP_SCRATCH_UNDER_RUN_PLUS_READ_ONLY_PVESH_PCT_SYSTEMCTL_PS_AND_EXECUTE_ONLY_STATIC_PROVEN_PLANNING_HELPER;NO_CAPTURE_PVE_GUEST;NO_VZDUMP_EXECUTION;NO_BACKUP_UPLOAD;NO_RETENTION;NO_AUDIT_RUN;NO_SYSTEMD_ACTION;NO_LOCK_BREAK;NO_MAIL;NO_GIT_WRITE;NO_NETBIRD_SKLADCHIK_CHANGE
HOST=pve01
CLUSTER_QUORATE=Yes
RUNNER_SHA256=b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d
SOURCE_1225_STATUS=OK
SOURCE_1225_DECISION=PASS_HELPER_REPLAY_STATIC_SAFETY_PROVEN
SOURCE_1225_NEXT_GATE=CONTROLLED_CT110_HELPER_REPLAY_ONLY
=== SOURCE_IDENTITY ===
LXC_SHA256=3fa7d194010d76f7c8bc95035ae8876262e9337903e310f45f45df88c266dc8d
HELPER_SHA256=dbb3e6dbb71b10797df736431d9501a752a0f8c439163c9a0bddb7f76747f011
LXC_SHA_MATCH=true
HELPER_SHA_MATCH=true
=== CONTROLLED_REPLAY ===
DIAG_SCRATCH=/run/workers2-1226-gg5z91zs
LXC_ENV_AST={'PATH': '/usr/sbin:/usr/bin:/sbin:/bin', 'LC_ALL': 'C', 'LANG': 'C', 'HOME': '/root', 'PYTHONDONTWRITEBYTECODE': '1'}
LXC_PVESH_SHA_EXPECTED=9ed13d4c2d82e7864ff0192c428da7669af263f81dfcc84d5a981ca98fee8439
LXC_VZDUMP_SHA_EXPECTED=21339d009afd55cb7ec613b64c1f493b2a7dbd18b85b4d712909ef6d6710f4ea
LXC_HELPER_CONST=None
ENV_RESOLUTION=PASS
ENV_KEYS=HOME,LANG,LC_ALL,PATH,PYTHONDONTWRITEBYTECODE
ENV_SHA256=456f8e8fc9ebad1ab3986b95605b59ddc935705e06dc61932168f9570df76c90
LIVE_PVESH_SHA=9ed13d4c2d82e7864ff0192c428da7669af263f81dfcc84d5a981ca98fee8439
LIVE_VZDUMP_SHA=21339d009afd55cb7ec613b64c1f493b2a7dbd18b85b4d712909ef6d6710f4ea
PVESH_IDENTITY_MATCH=true
VZDUMP_IDENTITY_MATCH=true
TOOL_IDENTITY_GATE=PASS
CT110_UNPRIVILEGED=true
CT110_CONFIG_GATE=PASS
BACKUP_SERVICE_STATE_RAW=failed/failed
ACTIVE_VZDUMP_PROCESS_COUNT=0
CONCURRENCY_GATE=PASS
RUN1_INPUT_BYTES=186216
RUN1_INPUT_SHA256=430372537fe5a38c3de0ea08d2f30b165177d16fe6b3fe55a90bc823e8265fbf
RUN1_ROW_COUNT=15
RUN1_CONFIG_COUNT=8
RUN1_TASK_COUNT=749
RUN1_STAGING_FREE=285682868224
RUN1_RC=1
RUN1_STDOUT_BYTES=0
RUN1_STDOUT_SHA256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
RUN1_STDOUT_BEGIN
RUN1_STDOUT_END
RUN1_STDERR_BYTES=898
RUN1_STDERR_SHA256=ee3d762267c6d073c4a78f5f96ce6d98ce9b395fecb645ed23853cba7305f9a9
RUN1_STDERR_BEGIN
Traceback (most recent call last):
File "/opt/homelab-backup-v2/releases/backup-v2-overlay-504r1-ca6876fa9c3b/fresh_lxc_helper.py", line 45, in <module>
raise SystemExit(main())
~~~~^^
File "/opt/homelab-backup-v2/releases/backup-v2-overlay-504r1-ca6876fa9c3b/fresh_lxc_helper.py", line 34, in main
pve265.validate_job(job,now)
~~~~~~~~~~~~~~~~~~~^^^^^^^^^
File "/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/pve265.py", line 126, in validate_job
need(job.get('coverage_eligible') is True and job.get('blockers')==[],'JOB_BLOCKED')
~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/pve265.py", line 32, in need
if not ok:raise PVEError(reason)
^^^^^^^^^^^^^^^^^^^^^^
pve265.PVEError: JOB_BLOCKED
RUN1_STDERR_END
RUN1_FAILURE_MODE=NONZERO_RC
RUN2_INPUT_BYTES=186199
RUN2_INPUT_SHA256=09cd393d63f56e95700a678037ebd0099c118036dc7b6fb497482a562473b92f
RUN2_ROW_COUNT=15
RUN2_CONFIG_COUNT=8
RUN2_TASK_COUNT=749
RUN2_STAGING_FREE=285682868224
RUN2_RC=1
RUN2_STDOUT_BYTES=0
RUN2_STDOUT_SHA256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
RUN2_STDOUT_BEGIN
RUN2_STDOUT_END
RUN2_STDERR_BYTES=898
RUN2_STDERR_SHA256=ee3d762267c6d073c4a78f5f96ce6d98ce9b395fecb645ed23853cba7305f9a9
RUN2_STDERR_BEGIN
Traceback (most recent call last):
File "/opt/homelab-backup-v2/releases/backup-v2-overlay-504r1-ca6876fa9c3b/fresh_lxc_helper.py", line 45, in <module>
raise SystemExit(main())
~~~~^^
File "/opt/homelab-backup-v2/releases/backup-v2-overlay-504r1-ca6876fa9c3b/fresh_lxc_helper.py", line 34, in main
pve265.validate_job(job,now)
~~~~~~~~~~~~~~~~~~~^^^^^^^^^
File "/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/pve265.py", line 126, in validate_job
need(job.get('coverage_eligible') is True and job.get('blockers')==[],'JOB_BLOCKED')
~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/pve265.py", line 32, in need
if not ok:raise PVEError(reason)
^^^^^^^^^^^^^^^^^^^^^^
pve265.PVEError: JOB_BLOCKED
RUN2_STDERR_END
RUN2_FAILURE_MODE=NONZERO_RC
RUN_MODE_STABLE=true
RUN_RC_STABLE=true
RUN_STDERR_SHA_STABLE=true
RUN_JOB_SHA_STABLE=true
RUN_ARGV_SHA_STABLE=true
REPLAY_PRIMARY_FAILURE_MODE=NONZERO_RC
DIAG_SCRATCH_REMOVED=true
CONTROLLED_REPLAY_DIAG_RC=0
TASK_RESULT=PASS_CT110_CONTROLLED_HELPER_REPLAY_COLLECTED
DECISION=PASS_CT110_CONTROLLED_HELPER_REPLAY_COLLECTED
NEXT_GATE=READ_EXACT_1226_AND_FIX_ONLY_PROVEN_HELPER_FAILURE_MODE
HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"SUPPORT-260927-HOMELAB-BACKUP-CT110-CONTROLLED-HELPER-REPLAY-1226R1","status":"OK","changes_made":false,"rollback_started":false,"rollback_restored":null}
OUTPUT_END
CHAT_OUTPUT_END
+8 -8
View File
File diff suppressed because one or more lines are too long
+112 -132
View File
@@ -1,15 +1,15 @@
CHAT_OUTPUT_BEGIN
COMMAND_ID=SUPPORT-260927-HOMELAB-BACKUP-CT110-HELPER-TRANSITIVE-STATIC-RCA-1225R1
COMMAND_ID=SUPPORT-260927-HOMELAB-BACKUP-CT110-CONTROLLED-HELPER-REPLAY-1226R1
STATUS=OK
RC=0
HOST=pve01
MODE=read-only
COMPONENT=homelab-backup-ct110-helper-transitive-static-rca
COMPONENT=homelab-backup-ct110-controlled-helper-replay
REFERENCE_REGISTER_CHECK=OK
REFERENCE_SHA256=5a3d8e5154c41cb582a4e0aca68090be1f0138918bf82131a948df326f9d8d66
ERROR_REGISTER_CHECK=OK
ERROR_REGISTER_SHA256=3b09a553ec0f527ed3afeed4753f52a74ee3036045bbfb3c685e9f8af4ba7ba0
COMMAND_SHA256=6d64e36c947c6baf0c7e53d2c17497d65666c040e09535e4223e53e5c8dbfa19
COMMAND_SHA256=32a5e6c027972640a0f44b6bdd014c002fc0caf8a527b7c84e7ecbf8799f0239
DUPLICATE_FAILED_COMMAND_BLOCKED=false
EXECUTION_STARTED=true
CHANGE_DECLARED=false
@@ -24,140 +24,120 @@ MUTATION_OUTCOME=NO_MUTATION
SANITIZED=yes
SECRETS_INCLUDED=no
PRIVATE_ADDRESSES_INCLUDED=no
RAW_EVIDENCE_SHA256=6d6b105d469ee853c1554e02708bf1d9d5be7c963d4a5f9e7ac8024b6ed2c41b
SANITIZED_OUTPUT_SHA256=6d6b105d469ee853c1554e02708bf1d9d5be7c963d4a5f9e7ac8024b6ed2c41b
RAW_EVIDENCE_SHA256=78769cfe154169eb8d04145ec7c1d4c210deff8c7af9abdada3e9206ec9c2ea5
SANITIZED_OUTPUT_SHA256=78769cfe154169eb8d04145ec7c1d4c210deff8c7af9abdada3e9206ec9c2ea5
OUTPUT_BEGIN
BACKUP_CT110_HELPER_TRANSITIVE_STATIC_RCA_BEGIN=true
COMMAND_ID=SUPPORT-260927-HOMELAB-BACKUP-CT110-HELPER-TRANSITIVE-STATIC-RCA-1225R1
BACKUP_CT110_CONTROLLED_HELPER_REPLAY_BEGIN=true
COMMAND_ID=SUPPORT-260927-HOMELAB-BACKUP-CT110-CONTROLLED-HELPER-REPLAY-1226R1
MODE=read-only
COMPONENT=homelab-backup-ct110-helper-transitive-static-rca
MUTATION_BOUNDARY=PURE_STATIC_AST_ONLY_NO_PROJECT_IMPORT_NO_HELPER_EXECUTION_NO_VZDUMP_NO_SYSTEMD_ACTION_NO_BACKUP_NO_AUDIT_NO_FILE_MUTATION_NO_LOCK_BREAK_NO_GIT_WRITE_NO_NETBIRD_SKLADCHIK_CHANGE
COMPONENT=homelab-backup-ct110-controlled-helper-replay
MUTATION_BOUNDARY=TEMP_SCRATCH_UNDER_RUN_PLUS_READ_ONLY_PVESH_PCT_SYSTEMCTL_PS_AND_EXECUTE_ONLY_STATIC_PROVEN_PLANNING_HELPER;NO_CAPTURE_PVE_GUEST;NO_VZDUMP_EXECUTION;NO_BACKUP_UPLOAD;NO_RETENTION;NO_AUDIT_RUN;NO_SYSTEMD_ACTION;NO_LOCK_BREAK;NO_MAIL;NO_GIT_WRITE;NO_NETBIRD_SKLADCHIK_CHANGE
HOST=pve01
CLUSTER_QUORATE=Yes
RUNNER_SHA256=b248a4c32c9cc64e5747e7dce6c7fc0a23f5124a77c71ce72e27a81aceae9d2d
SOURCE_1224_STATUS=OK
SOURCE_1224_DECISION=PASS_CT110_HELPER_STATIC_RCA_COLLECTED
SOURCE_1224_NEXT_GATE=READ_EXACT_1224_AND_DECIDE_SAFE_HELPER_REPLAY_OR_SOURCE_FIX
=== TRANSITIVE_STATIC_AST ===
C411_PY_COUNT=17
C411_FILE=adapter|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/adapter.py|SHA256=18eb29cef165371b48bcb78e1a456e1939e6eff253787218133162cc89ab9fa3|BYTES=2989
C411_FILE=guest266|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/guest266.py|SHA256=86433bc424d5fa5017c20f7a237c82874b02357a3283660d8a6b0039ef2bc868|BYTES=7385
C411_FILE=large264|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/large264.py|SHA256=5cc4641fc35e4dd554495a36146da7dbbb7f142d1450e04cc5d3c89678b8497a|BYTES=16514
C411_FILE=nodeplan263|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/nodeplan263.py|SHA256=db5c16ee24d25aa1694530332d3190ab7cc5d4f8eb69067d025e27ad5c995060|BYTES=4603
C411_FILE=pve265|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/pve265.py|SHA256=cd2f634414a8e38a3789015aeca5a9b47821f77d7d1fa61dcdbdc866172963be|BYTES=12888
C411_FILE=pve270|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/pve270.py|SHA256=97015277a4f3f8129c0fd11eb70c06293026366f1f8232a97feeed513a2dbcef|BYTES=19595
C411_FILE=pve282|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/pve282.py|SHA256=73c6cb7773eb8e82d1e7ed5ab4733b4afb88f74ae69c09125d0378d6e480e012|BYTES=6195
C411_FILE=restore262|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/restore262.py|SHA256=56d1b961c8d5654d5e2ee2755268db46bd2202bca11e69788febf991cfaa79f1|BYTES=14701
C411_FILE=stream263|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/stream263.py|SHA256=a83d03a86b93a855716658652dd073fcb281cd387fc6200fe4bc2a922f39ea16|BYTES=8831
C411_FILE=test_guest266|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/test_guest266.py|SHA256=460b950924a475ce0a28dc759512e7dbe2323ae2cc42f7ef4c6181710a2a13da|BYTES=10752
C411_FILE=test_perl270|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/test_perl270.py|SHA256=50fc10865078a7b9b255dc627059824184441a47c4ede52e23f24c1186e3512f|BYTES=5441
C411_FILE=test_producer282|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/test_producer282.py|SHA256=a67d927cc428935791f9eecc3acf571d089f80761162f4589b7d684fba6b8af7|BYTES=12215
C411_FILE=test_pve265|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/test_pve265.py|SHA256=16a9407d01bf73db687ef38684c59205fc2e6a9223cd9cee6ec6e8dde9d38707|BYTES=11781
C411_FILE=test_pve270|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/test_pve270.py|SHA256=9fccd20b490613fdd5b14b4105cf0d9fd744f204e1ed1d6893e54c9f69bf6fb4|BYTES=12077
C411_FILE=test_pve282|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/test_pve282.py|SHA256=1056407aab76e17181b05e043cb42c086058545a8e0027689ab4e03eee6531c4|BYTES=5785
C411_FILE=transport261|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/transport261.py|SHA256=b9b92f957bf441cb5d1702f4881897328e6c0338f8c3f6d41d27d9a349b37688|BYTES=15364
C411_FILE=v2core|PATH=/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/v2core.py|SHA256=e285bf9a5678d07dcbb90261f9f93e7826ff524e04cfec780bf5a3c4b0dc29f2|BYTES=11755
=== ADAPTER_FULL_SOURCE_BEGIN ===
0001:#!/usr/bin/python3
0002:import hashlib,inspect,json,pathlib,sys
0003:BASE=pathlib.Path(__file__).resolve().parent
0004:EXPECTED={
0005:'v2core.py':'e285bf9a5678d07dcbb90261f9f93e7826ff524e04cfec780bf5a3c4b0dc29f2',
0006:'transport261.py':'b9b92f957bf441cb5d1702f4881897328e6c0338f8c3f6d41d27d9a349b37688',
0007:'restore262.py':'56d1b961c8d5654d5e2ee2755268db46bd2202bca11e69788febf991cfaa79f1',
0008:'stream263.py':'a83d03a86b93a855716658652dd073fcb281cd387fc6200fe4bc2a922f39ea16',
0009:'nodeplan263.py':'db5c16ee24d25aa1694530332d3190ab7cc5d4f8eb69067d025e27ad5c995060',
0010:'large264.py':'5cc4641fc35e4dd554495a36146da7dbbb7f142d1450e04cc5d3c89678b8497a',
0011:'pve265.py':'cd2f634414a8e38a3789015aeca5a9b47821f77d7d1fa61dcdbdc866172963be',
0012:'guest266.py':'86433bc424d5fa5017c20f7a237c82874b02357a3283660d8a6b0039ef2bc868',
0013:'pve270.py':'97015277a4f3f8129c0fd11eb70c06293026366f1f8232a97feeed513a2dbcef',
0014:'pve282.py':'73c6cb7773eb8e82d1e7ed5ab4733b4afb88f74ae69c09125d0378d6e480e012'}
0015:def sha(p):
0016: h=hashlib.sha256()
0017: with open(p,'rb') as f:
0018: for b in iter(lambda:f.read(1048576),b''):h.update(b)
0019: return h.hexdigest()
0020:def verify_sources():
0021: for name,want in EXPECTED.items():
0022: p=BASE/name
0023: if not p.is_file() or p.is_symlink() or sha(p)!=want:raise RuntimeError('SOURCE_IDENTITY_'+name)
0024:def load_graph():
0025: import guest266,pve265,pve270,pve282
0026: if hasattr(guest266,'dump_argv'):raise RuntimeError('GUEST266_UNEXPECTED_DUMP_ARGV')
0027: if not hasattr(pve265,'dump_argv'):raise RuntimeError('PVE265_DUMP_ARGV_MISSING')
0028: if getattr(pve270,'old',None) is not pve265:raise RuntimeError('PVE270_OLD_NOT_PVE265')
0029: if getattr(pve282,'old',None) is not pve265:raise RuntimeError('PVE282_OLD_NOT_PVE265')
0030: if getattr(pve282,'proven',None) is not pve270:raise RuntimeError('PVE282_PROVEN_NOT_PVE270')
0031: for n in ('MappedScratch','capture_archive','validate_mapping'):
0032: if not hasattr(pve270,n):raise RuntimeError('PVE270_'+n.upper()+'_MISSING')
0033: if getattr(pve282,n,None) is not getattr(pve270,n):raise RuntimeError('PVE282_ALIAS_'+n.upper()+'_MISMATCH')
0034: return guest266,pve265,pve270,pve282
0035:def describe():
0036: _,p265,p270,p282=load_graph()
0037: funcs={'pve265.dump_argv':p265.dump_argv,'pve265.validate_job':p265.validate_job,'pve265.make_plan':p265.make_plan,'pve270.validate_mapping':p270.validate_mapping,'pve270.capture_archive':p270.capture_archive,'pve270.produce':p270.produce,'pve282.select112':p282.select112,'pve282.produce':p282.produce}
0038: return {'schema':1,'bundle':'pve-lxc-adapter-411r1','source_sha256':EXPECTED,'signatures':{k:str(inspect.signature(v)) for k,v in funcs.items()},'owner':{'dump_argv':'pve265','MappedScratch':'pve270','capture_archive':'pve270','validate_mapping':'pve270','pve282.old':'pve265','pve282.proven':'pve270'}}
0039:def main():
0040: verify_sources(); mode=sys.argv[1] if len(sys.argv)>1 else 'selftest'; d=describe()
0041: if mode not in ('selftest','describe'):raise SystemExit(2)
0042: print(json.dumps(d,sort_keys=True,separators=(',',':')))
0043: if mode=='selftest':print('ADAPTER_SELFTEST=PASS')
0044:if __name__=='__main__':main()
=== ADAPTER_FULL_SOURCE_END ===
=== ADAPTER_FUNC_verify_sources_BEGIN ===
0001:def verify_sources():
0002: for name,want in EXPECTED.items():
0003: p=BASE/name
0004: if not p.is_file() or p.is_symlink() or sha(p)!=want:raise RuntimeError('SOURCE_IDENTITY_'+name)
=== ADAPTER_FUNC_verify_sources_END ===
=== ADAPTER_FUNC_load_graph_BEGIN ===
0001:def load_graph():
0002: import guest266,pve265,pve270,pve282
0003: if hasattr(guest266,'dump_argv'):raise RuntimeError('GUEST266_UNEXPECTED_DUMP_ARGV')
0004: if not hasattr(pve265,'dump_argv'):raise RuntimeError('PVE265_DUMP_ARGV_MISSING')
0005: if getattr(pve270,'old',None) is not pve265:raise RuntimeError('PVE270_OLD_NOT_PVE265')
0006: if getattr(pve282,'old',None) is not pve265:raise RuntimeError('PVE282_OLD_NOT_PVE265')
0007: if getattr(pve282,'proven',None) is not pve270:raise RuntimeError('PVE282_PROVEN_NOT_PVE270')
0008: for n in ('MappedScratch','capture_archive','validate_mapping'):
0009: if not hasattr(pve270,n):raise RuntimeError('PVE270_'+n.upper()+'_MISSING')
0010: if getattr(pve282,n,None) is not getattr(pve270,n):raise RuntimeError('PVE282_ALIAS_'+n.upper()+'_MISMATCH')
0011: return guest266,pve265,pve270,pve282
=== ADAPTER_FUNC_load_graph_END ===
ADAPTER_REACHABLE_FUNCTIONS=load_graph,sha,verify_sources
ADAPTER_REACHABLE_EDGES=[["verify_sources","sha"]]
ADAPTER_REACHABLE_CALLS=[{"args":["guest266","'dump_argv'"],"func":"hasattr","kw":[],"lineno":26,"owner":"load_graph"},{"args":["'GUEST266_UNEXPECTED_DUMP_ARGV'"],"func":"RuntimeError","kw":[],"lineno":26,"owner":"load_graph"},{"args":["pve265","'dump_argv'"],"func":"hasattr","kw":[],"lineno":27,"owner":"load_graph"},{"args":["'PVE265_DUMP_ARGV_MISSING'"],"func":"RuntimeError","kw":[],"lineno":27,"owner":"load_graph"},{"args":["pve270","'old'","None"],"func":"getattr","kw":[],"lineno":28,"owner":"load_graph"},{"args":["'PVE270_OLD_NOT_PVE265'"],"func":"RuntimeError","kw":[],"lineno":28,"owner":"load_graph"},{"args":["pve282","'old'","None"],"func":"getattr","kw":[],"lineno":29,"owner":"load_graph"},{"args":["'PVE282_OLD_NOT_PVE265'"],"func":"RuntimeError","kw":[],"lineno":29,"owner":"load_graph"},{"args":["pve282","'proven'","None"],"func":"getattr","kw":[],"lineno":30,"owner":"load_graph"},{"args":["'PVE282_PROVEN_NOT_PVE270'"],"func":"RuntimeError","kw":[],"lineno":30,"owner":"load_graph"},{"args":["pve270","n"],"func":"hasattr","kw":[],"lineno":32,"owner":"load_graph"},{"args":["'PVE270_' + n.upper() + '_MISSING'"],"func":"RuntimeError","kw":[],"lineno":32,"owner":"load_graph"},{"args":["pve282","n","None"],"func":"getattr","kw":[],"lineno":33,"owner":"load_graph"},{"args":["pve270","n"],"func":"getattr","kw":[],"lineno":33,"owner":"load_graph"},{"args":["'PVE282_ALIAS_' + n.upper() + '_MISMATCH'"],"func":"RuntimeError","kw":[],"lineno":33,"owner":"load_graph"},{"args":[],"func":"n.upper","kw":[],"lineno":32,"owner":"load_graph"},{"args":[],"func":"n.upper","kw":[],"lineno":33,"owner":"load_graph"},{"args":[],"func":"hashlib.sha256","kw":[],"lineno":16,"owner":"sha"},{"args":[],"func":"h.hexdigest","kw":[],"lineno":19,"owner":"sha"},{"args":["p","'rb'"],"func":"open","kw":[],"lineno":17,"owner":"sha"},{"args":["lambda: f.read(1048576)","b''"],"func":"iter","kw":[],"lineno":18,"owner":"sha"},{"args":["b"],"func":"h.update","kw":[],"lineno":18,"owner":"sha"},{"args":["1048576"],"func":"f.read","kw":[],"lineno":18,"owner":"sha"},{"args":[],"func":"EXPECTED.items","kw":[],"lineno":21,"owner":"verify_sources"},{"args":[],"func":"p.is_symlink","kw":[],"lineno":23,"owner":"verify_sources"},{"args":["'SOURCE_IDENTITY_' + name"],"func":"RuntimeError","kw":[],"lineno":23,"owner":"verify_sources"},{"args":[],"func":"p.is_file","kw":[],"lineno":23,"owner":"verify_sources"},{"args":["p"],"func":"sha","kw":[],"lineno":23,"owner":"verify_sources"}]
ADAPTER_REACHABLE_SIDE_EFFECT_CALLS=[]
ADAPTER_REACHABLE_SIDE_EFFECT_CALL_COUNT=0
LOCAL_IMPORT_GRAPH={"adapter":[]}
LOCAL_IMPORT_GRAPH_MODULES=adapter
MODULE_adapter_TOPLEVEL_CALLS=[{"args":[],"func":"resolve","kw":[],"lineno":3},{"args":["__file__"],"func":"pathlib.Path","kw":[],"lineno":3},{"args":[],"func":"main","kw":[],"lineno":44}]
MODULE_adapter_TOPLEVEL_SIDE_EFFECT_CALLS=[]
LOCAL_IMPORT_TOPLEVEL_SIDE_EFFECT_CALLS=[]
LOCAL_IMPORT_TOPLEVEL_SIDE_EFFECT_COUNT=0
GUEST266_FOUND=true
=== GUEST266_NO_ACTIVE_TASKS_BEGIN ===
0001:def no_active_tasks(rows,vmid):
0002: t.need(type(rows) is list and len(rows)<1000,'ACTIVE_TASKS_TRUNCATED_OR_INVALID')
0003: for task in rows:
0004: t.need(type(task) is dict and type(task.get('type')) is str,'ACTIVE_TASK_SCHEMA')
0005: # The active index includes completed, not-yet-archived tasks.
0006: if type(task.get('endtime')) is int and task.get('status') not in (None,'RUNNING'):continue
0007: kind=task['type'];target=str(task.get('id',''))
0008: if kind in ('vncshell','vncterm','vncproxy','spiceproxy'):continue
0009: t.need(target!=str(vmid) and not any(x in kind.lower() for x in ('dump','restore','migrat','snapshot','clone','move_disk','resize')),'COMPETING_PVE_TASK')
=== GUEST266_NO_ACTIVE_TASKS_END ===
GUEST266_REACHABLE_FUNCTIONS=no_active_tasks
GUEST266_REACHABLE_EDGES=[]
GUEST266_REACHABLE_CALLS=[{"args":["type(rows) is list and len(rows) < 1000","'ACTIVE_TASKS_TRUNCATED_OR_INVALID'"],"func":"t.need","kw":[],"lineno":60,"owner":"no_active_tasks"},{"args":["type(task) is dict and type(task.get('type')) is str","'ACTIVE_TASK_SCHEMA'"],"func":"t.need","kw":[],"lineno":62,"owner":"no_active_tasks"},{"args":["task.get('id', '')"],"func":"str","kw":[],"lineno":65,"owner":"no_active_tasks"},{"args":["target != str(vmid) and (not any((x in kind.lower() for x in ('dump', 'restore', 'migrat', 'snapshot', 'clone', 'move_disk', 'resize'))))","'COMPETING_PVE_TASK'"],"func":"t.need","kw":[],"lineno":67,"owner":"no_active_tasks"},{"args":["'id'","''"],"func":"task.get","kw":[],"lineno":65,"owner":"no_active_tasks"},{"args":["rows"],"func":"type","kw":[],"lineno":60,"owner":"no_active_tasks"},{"args":["rows"],"func":"len","kw":[],"lineno":60,"owner":"no_active_tasks"},{"args":["task.get('endtime')"],"func":"type","kw":[],"lineno":64,"owner":"no_active_tasks"},{"args":["'status'"],"func":"task.get","kw":[],"lineno":64,"owner":"no_active_tasks"},{"args":["task"],"func":"type","kw":[],"lineno":62,"owner":"no_active_tasks"},{"args":["task.get('type')"],"func":"type","kw":[],"lineno":62,"owner":"no_active_tasks"},{"args":["'endtime'"],"func":"task.get","kw":[],"lineno":64,"owner":"no_active_tasks"},{"args":["vmid"],"func":"str","kw":[],"lineno":67,"owner":"no_active_tasks"},{"args":["(x in kind.lower() for x in ('dump', 'restore', 'migrat', 'snapshot', 'clone', 'move_disk', 'resize'))"],"func":"any","kw":[],"lineno":67,"owner":"no_active_tasks"},{"args":["'type'"],"func":"task.get","kw":[],"lineno":62,"owner":"no_active_tasks"},{"args":[],"func":"kind.lower","kw":[],"lineno":67,"owner":"no_active_tasks"}]
GUEST266_REACHABLE_SIDE_EFFECT_CALLS=[]
GUEST266_REACHABLE_SIDE_EFFECT_CALL_COUNT=0
TRANSITIVE_STATIC_REPLAY_SAFE=true
STATIC_TRANSITIVE_ANALYSIS_COMPLETE=true
STATIC_TRANSITIVE_RC=0
TRANSITIVE_STATIC_REPLAY_SAFE_SUMMARY=true
TASK_RESULT=PASS_CT110_HELPER_TRANSITIVE_STATIC_SAFE
DECISION=PASS_HELPER_REPLAY_STATIC_SAFETY_PROVEN
NEXT_GATE=CONTROLLED_CT110_HELPER_REPLAY_ONLY
HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"SUPPORT-260927-HOMELAB-BACKUP-CT110-HELPER-TRANSITIVE-STATIC-RCA-1225R1","status":"OK","changes_made":false,"rollback_started":false,"rollback_restored":null}
SOURCE_1225_STATUS=OK
SOURCE_1225_DECISION=PASS_HELPER_REPLAY_STATIC_SAFETY_PROVEN
SOURCE_1225_NEXT_GATE=CONTROLLED_CT110_HELPER_REPLAY_ONLY
=== SOURCE_IDENTITY ===
LXC_SHA256=3fa7d194010d76f7c8bc95035ae8876262e9337903e310f45f45df88c266dc8d
HELPER_SHA256=dbb3e6dbb71b10797df736431d9501a752a0f8c439163c9a0bddb7f76747f011
LXC_SHA_MATCH=true
HELPER_SHA_MATCH=true
=== CONTROLLED_REPLAY ===
DIAG_SCRATCH=/run/workers2-1226-gg5z91zs
LXC_ENV_AST={'PATH': '/usr/sbin:/usr/bin:/sbin:/bin', 'LC_ALL': 'C', 'LANG': 'C', 'HOME': '/root', 'PYTHONDONTWRITEBYTECODE': '1'}
LXC_PVESH_SHA_EXPECTED=9ed13d4c2d82e7864ff0192c428da7669af263f81dfcc84d5a981ca98fee8439
LXC_VZDUMP_SHA_EXPECTED=21339d009afd55cb7ec613b64c1f493b2a7dbd18b85b4d712909ef6d6710f4ea
LXC_HELPER_CONST=None
ENV_RESOLUTION=PASS
ENV_KEYS=HOME,LANG,LC_ALL,PATH,PYTHONDONTWRITEBYTECODE
ENV_SHA256=456f8e8fc9ebad1ab3986b95605b59ddc935705e06dc61932168f9570df76c90
LIVE_PVESH_SHA=9ed13d4c2d82e7864ff0192c428da7669af263f81dfcc84d5a981ca98fee8439
LIVE_VZDUMP_SHA=21339d009afd55cb7ec613b64c1f493b2a7dbd18b85b4d712909ef6d6710f4ea
PVESH_IDENTITY_MATCH=true
VZDUMP_IDENTITY_MATCH=true
TOOL_IDENTITY_GATE=PASS
CT110_UNPRIVILEGED=true
CT110_CONFIG_GATE=PASS
BACKUP_SERVICE_STATE_RAW=failed/failed
ACTIVE_VZDUMP_PROCESS_COUNT=0
CONCURRENCY_GATE=PASS
RUN1_INPUT_BYTES=186216
RUN1_INPUT_SHA256=430372537fe5a38c3de0ea08d2f30b165177d16fe6b3fe55a90bc823e8265fbf
RUN1_ROW_COUNT=15
RUN1_CONFIG_COUNT=8
RUN1_TASK_COUNT=749
RUN1_STAGING_FREE=285682868224
RUN1_RC=1
RUN1_STDOUT_BYTES=0
RUN1_STDOUT_SHA256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
RUN1_STDOUT_BEGIN
RUN1_STDOUT_END
RUN1_STDERR_BYTES=898
RUN1_STDERR_SHA256=ee3d762267c6d073c4a78f5f96ce6d98ce9b395fecb645ed23853cba7305f9a9
RUN1_STDERR_BEGIN
Traceback (most recent call last):
File "/opt/homelab-backup-v2/releases/backup-v2-overlay-504r1-ca6876fa9c3b/fresh_lxc_helper.py", line 45, in <module>
raise SystemExit(main())
~~~~^^
File "/opt/homelab-backup-v2/releases/backup-v2-overlay-504r1-ca6876fa9c3b/fresh_lxc_helper.py", line 34, in main
pve265.validate_job(job,now)
~~~~~~~~~~~~~~~~~~~^^^^^^^^^
File "/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/pve265.py", line 126, in validate_job
need(job.get('coverage_eligible') is True and job.get('blockers')==[],'JOB_BLOCKED')
~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/pve265.py", line 32, in need
if not ok:raise PVEError(reason)
^^^^^^^^^^^^^^^^^^^^^^
pve265.PVEError: JOB_BLOCKED
RUN1_STDERR_END
RUN1_FAILURE_MODE=NONZERO_RC
RUN2_INPUT_BYTES=186199
RUN2_INPUT_SHA256=09cd393d63f56e95700a678037ebd0099c118036dc7b6fb497482a562473b92f
RUN2_ROW_COUNT=15
RUN2_CONFIG_COUNT=8
RUN2_TASK_COUNT=749
RUN2_STAGING_FREE=285682868224
RUN2_RC=1
RUN2_STDOUT_BYTES=0
RUN2_STDOUT_SHA256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
RUN2_STDOUT_BEGIN
RUN2_STDOUT_END
RUN2_STDERR_BYTES=898
RUN2_STDERR_SHA256=ee3d762267c6d073c4a78f5f96ce6d98ce9b395fecb645ed23853cba7305f9a9
RUN2_STDERR_BEGIN
Traceback (most recent call last):
File "/opt/homelab-backup-v2/releases/backup-v2-overlay-504r1-ca6876fa9c3b/fresh_lxc_helper.py", line 45, in <module>
raise SystemExit(main())
~~~~^^
File "/opt/homelab-backup-v2/releases/backup-v2-overlay-504r1-ca6876fa9c3b/fresh_lxc_helper.py", line 34, in main
pve265.validate_job(job,now)
~~~~~~~~~~~~~~~~~~~^^^^^^^^^
File "/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/pve265.py", line 126, in validate_job
need(job.get('coverage_eligible') is True and job.get('blockers')==[],'JOB_BLOCKED')
~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/homelab-backup-v2/releases/backup-v2-accepted-486r1/candidate411/pve265.py", line 32, in need
if not ok:raise PVEError(reason)
^^^^^^^^^^^^^^^^^^^^^^
pve265.PVEError: JOB_BLOCKED
RUN2_STDERR_END
RUN2_FAILURE_MODE=NONZERO_RC
RUN_MODE_STABLE=true
RUN_RC_STABLE=true
RUN_STDERR_SHA_STABLE=true
RUN_JOB_SHA_STABLE=true
RUN_ARGV_SHA_STABLE=true
REPLAY_PRIMARY_FAILURE_MODE=NONZERO_RC
DIAG_SCRATCH_REMOVED=true
CONTROLLED_REPLAY_DIAG_RC=0
TASK_RESULT=PASS_CT110_CONTROLLED_HELPER_REPLAY_COLLECTED
DECISION=PASS_CT110_CONTROLLED_HELPER_REPLAY_COLLECTED
NEXT_GATE=READ_EXACT_1226_AND_FIX_ONLY_PROVEN_HELPER_FAILURE_MODE
HOMELAB_RESULT_CONTRACT={"version":1,"command_id":"SUPPORT-260927-HOMELAB-BACKUP-CT110-CONTROLLED-HELPER-REPLAY-1226R1","status":"OK","changes_made":false,"rollback_started":false,"rollback_restored":null}
OUTPUT_END
CHAT_OUTPUT_END