Files
dj/integration-work/deploy_scoped_cancel_bridge.py

18 lines
1.3 KiB
Python

import datetime, hashlib, json, pathlib, shutil, sqlite3, subprocess
root=pathlib.Path('/home/ps/huobao-gpu-selection')
candidate=root/'bridge-cancel.candidate.py'
compile(candidate.read_text(),str(candidate),'exec')
expected='7fde4e2bf1a188374cea8f25c4d60538362965cbc48f057b983876260b999a61'
entries=[('/home/ps/huobao-model-bridge','huobao-model-bridge','state'),('/home/ps/huobao-vdn/bridge','huobao-vdn-bridge','../bridge-state')]
for folder,_,_ in entries:
assert hashlib.sha256((pathlib.Path(folder)/'bridge.py').read_bytes()).hexdigest()==expected,'Live bridge changed; review before replacing'
stamp=datetime.datetime.now().strftime('%Y%m%d-%H%M%S')
for folder,name,statefolder in entries:
p=pathlib.Path(folder); backup=root/(name+'-cancel-backup-'+stamp); backup.mkdir(mode=0o700)
shutil.copy2(p/'bridge.py',backup/'bridge.py');shutil.copy2(p/'config.json',backup/'config.json')
with sqlite3.connect(p/statefolder/'jobs.sqlite3') as src,sqlite3.connect(backup/'jobs.sqlite3') as dest:src.backup(dest)
shutil.copy2(candidate,p/'bridge.py')
# Give ongoing HTTP requests time to finish; GPU workers keep running.
subprocess.run(['docker','restart','--timeout','60',name],check=True,stdout=subprocess.DEVNULL)
print(json.dumps({'updated':name,'backup':str(backup),'hash':hashlib.sha256((p/'bridge.py').read_bytes()).hexdigest()}))