Fix DB scheduling on mariaDB

This commit is contained in:
Fabian Dill
2020-09-09 01:41:37 +02:00
parent ada13a67fc
commit 99517021c8
6 changed files with 61 additions and 19 deletions

View File

@@ -3,13 +3,13 @@ import tempfile
import random
import zlib
import json
import multiprocessing
from flask import request, flash, redirect, url_for, session, render_template
from EntranceRandomizer import parse_arguments
from Main import main as ERmain
from Main import get_seed, seeddigits
import pickle
from .models import *
from WebHostLib import app
@@ -35,15 +35,20 @@ def generate(race=False):
elif len(gen_options) > app.config["MAX_ROLL"]:
flash(f"Sorry, generating of multiworlds is limited to {app.config['MAX_ROLL']} players for now. "
f"If you have a larger group, please generate it yourself and upload it.")
else:
gen = Generation(options={name: vars(options) for name, options in gen_options.items()},
# convert to json compatible
meta={"race": race, "owner": session["_id"].int}, state=STATE_QUEUED,
owner=session["_id"])
elif len(gen_options) >= app.config["JOB_THRESHOLD"]:
gen = Generation(
options=pickle.dumps({name: vars(options) for name, options in gen_options.items()}),
# convert to json compatible
meta=pickle.dumps({"race": race}), state=STATE_QUEUED,
owner=session["_id"])
commit()
return redirect(url_for("wait_seed", seed=gen.id))
else:
seed_id = gen_game({name: vars(options) for name, options in gen_options.items()},
race=race, owner=session["_id"].int)
return redirect(url_for("view_seed", seed=seed_id))
return render_template("generate.html", race=race)
@@ -89,8 +94,11 @@ def gen_game(gen_options, race=False, owner=None, sid=None):
return upload_to_db(target.name, owner, sid)
except BaseException:
with db_session:
Generation.get(id=sid).state = STATE_ERROR
if sid:
with db_session:
gen = Generation.get(id=sid)
if gen is not None:
gen.state = STATE_ERROR
raise
@@ -127,8 +135,14 @@ def upload_to_db(folder, owner, sid):
flash(e)
if multidata:
with db_session:
seed = Seed(multidata=multidata, spoiler=spoiler, patches=patches, owner=owner, id=sid)
if sid:
seed = Seed(multidata=multidata, spoiler=spoiler, patches=patches, owner=owner, id=sid)
else:
seed = Seed(multidata=multidata, spoiler=spoiler, patches=patches, owner=owner)
for patch in patches:
patch.seed = seed
Generation.get(id=sid).delete()
if sid:
gen = Generation.get(id=sid)
if gen is not None:
gen.delete()
return seed.id