Handle Miniflare metadata during Classic cutover and preserve daily backups
Core tests / core (push) Successful in 28s
Core tests / core (push) Successful in 28s
This commit is contained in:
@@ -8,7 +8,7 @@ import argparse,gzip,json,os,pathlib,shutil,sqlite3,subprocess,time,urllib.reque
|
||||
|
||||
def main(root):
|
||||
home=pathlib.Path.home();units=home/'.config/systemd/user';app=root/'app-staging'
|
||||
archive=root/'cutover-backup';archive.mkdir(mode=0o700,exist_ok=False)
|
||||
archive=root/('cutover-backup-'+str(int(time.time())));archive.mkdir(mode=0o700,exist_ok=False)
|
||||
def run(args,check=True):
|
||||
p=subprocess.run(args,capture_output=True,text=True)
|
||||
if check and p.returncode:raise RuntimeError('Command failed: '+' '.join(args[:4])+' '+p.stderr[-500:])
|
||||
@@ -46,7 +46,9 @@ def main(root):
|
||||
assert (archive/'wrath-auth-characters.sql.gz').stat().st_size>10000
|
||||
status('Publishing Classic game and authentication ports')
|
||||
run(['docker','stop','-t','30','azerothai-classic-world','azerothai-classic-auth'])
|
||||
for name in ['azerothai-classic-world','azerothai-classic-auth']:run(['docker','rename',name,name+'-staging'])
|
||||
for name in ['azerothai-classic-world','azerothai-classic-auth']:
|
||||
run(['docker','rm','-f',name+'-staging'],False)
|
||||
run(['docker','rename',name,name+'-staging'])
|
||||
common=['--network','azerothai-classic-access','--restart','unless-stopped','--user','1000:1000','-v',str(root)+':/work','-w','/work/run/bin']
|
||||
run(['docker','create','--name','azerothai-classic-world',*common,'--cpus','2','--memory','3g','-p','8086:8086','azerothai-classic-builder:local','bash','-c','exec 3<>/work/run/console; exec ./mangosd -c /work/run/etc/mangosd.conf <&3'])
|
||||
run(['docker','create','--name','azerothai-classic-auth',*common,'--cpus','0.5','--memory','128m','-p','3724:3724','azerothai-classic-builder:local','./realmd','-c','/work/run/etc/realmd.conf'])
|
||||
@@ -57,7 +59,7 @@ def main(root):
|
||||
p=app/'.dev.vars';text=p.read_text();import re
|
||||
text=re.sub(r'^SOAP_URL=.*$','SOAP_URL=http://'+ip+':7879',text,flags=re.M);p.write_text(text)
|
||||
# Discard copied Wrath metrics; native Classic counters remain intact.
|
||||
databases=list((app/'.wrangler/state/v3/d1').rglob('*.sqlite'))
|
||||
databases=[p for p in (app/'.wrangler/state/v3/d1').rglob('*.sqlite') if p.name!='metadata.sqlite']
|
||||
assert len(databases)==1
|
||||
db=sqlite3.connect(databases[0]);backup=sqlite3.connect(archive/'classic-before-cutover.sqlite');db.backup(backup);backup.close()
|
||||
names=[x[0] for x in db.execute("SELECT name FROM sqlite_master WHERE type='table'")]
|
||||
|
||||
Reference in New Issue
Block a user