[Devlog]
Ich habe heute als ich mich noch einmal mit der Warteschleife beschäftigt habe, als ich auf das Problem von @AdvocatusDei reagieren wollte festgestellt, dass die Warteschleife absolut gut funktioniert, dass es jedoch ein dickes Aber gibt. Dieses System ist unglaublich komplex, wenn auch die Aufgabe, die es macht, relativ einfach ist: Nimm Videos und lade sie hoch. Das ganze hat ca. 2000 Zeilen JavaScript-Code (nicht Java!), was unglaublich viel ist für solche eine Sprache.
Mir ist heute ein großer Designfehler bewusst geworden, der sich, wenn auch total vertretbar, immer wieder bemerkbar macht. Das ganze System arbeitet mit nicht konsistenten Daten. Im Grunde ist es so, dass das Backend seine eigene "Wahrheit" hat, aber auch das Frontend. So werden im Frontend zum Teil veraltete Daten angezeigt. Das ganze lässt sich mit dem aktuellen Design auch nicht lösen. Aus diesem Grund habe ich heute angefangen eine neue Warteschleife zu programmieren.
Ich werde kurz skizzieren, wie das gerade läuft.
Im Moment, werden beim Programmstart alle Einträge, die noch offen sind in die Warteschlange geladen. Wenn der Autostart aktiv ist, wird sofort angefangen diese Einträge ab zu arbeiten. Das passiert im Hintergrund. Das Frontend ist davon mehr oder weniger autonom. Front- und Backend greifen unabhängig von einander auf die Datenbank zu - und hier liegt das Problem.
Ändere ich im Frontend etwas an den Daten, heißt das nicht, dass sie vom Backend übernommen werden. Beide System tauschen aber immer wieder Daten mit einander aus, haben aber einen unterschiedlichen Stand, was die Daten angeht. So produzieren sich Fehler... Sie spielen aktuell keine Rolle, wenn ich mein Template in die Warteschlange haue. Sobald ich am Upload etwas ändere beginnen die Probleme...
Mein neuer Ansatz ist, dass das Frontend sich seine Daten nicht aus der Datenbank holt, sondern alle Informationen vom Backend erhält. Und? Was bringt das? Es wird nur noch eine Instanz geben, die Daten empfängt oder verschickt: Und das ist die Warteschlange. Dadurch werden die Daten systemweit einheitlich.
Als kleines Schmankerl werde ich einen neuen Uploader bauen, bei dem (so hoffe ich im Moment) die Daten nicht mehr als Pakete verschickt werden, sondern du kontinuierlich über den Fortschritt informiert wirst. Dafür, so habe ich gelesen, gibt es eine Standartbibliothek. Diese werde ich nutzen. Gerade muss ich noch prüfen, wie sie sich mit dem System für das Drosseln des Uploads verträgt. Rein technisch sieht das eigentlich ganz gut aus, aber ich muss das noch prüfen.
Weil das ein sehr tiefgreifender Eingriff ist, werde ich ein Feature einbauen, dass es erlaubt experimentelle Features zu nutzen, oder eben nicht. Standard wird aktuell das alte System bleiben, bis das neue erprobt ist.
In 2 Tagen habe ich Abgabe von einer Auftragsarbeit für die Stadt Dortmund. Danach werden wieder Ressourcen frei, mich dort hinein zu stürzen.
Aktuell bin ich dabei dieses System in Code zu skizzieren. Das dauert also ein paar Tage (oder Wochen). Ich hoffe aber damit den Upload robuster zu machen. Eine Aufgabe, der ich mich gerade etwas verschrieben habe.
Eine gute Nacht
Vincent