18 lines
1.3 KiB
Python
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()}))
|