Use signal handler for checkpointing #254
Keine Reviewer
Label
Kein Label
Bug
Codeverbesserung
Einsteiger Freundlich
Idee
In Arbeit
Neues Feature
Prio A
Security Breach
Überprüfung notwendig
Verbesserung
Zu Beobachten
Kein Meilenstein
Niemand zuständig
2 Beteiligte
Fällig am
Kein Fälligkeitsdatum gesetzt.
Abhängigkeiten
Keine Abhängigkeiten gesetzt.
Referenz: SteamWar/SpigotCore#254
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren
Keine Beschreibung angegeben.
Branch "sigusr1" löschen
Das Löschen eines Branches ist permanent. Obwohl der Branch für eine kurze Zeit weiter existieren könnte, kann diese Aktion in den meisten Fällen NICHT rückgängig gemacht werden. Fortfahren?
@ -67,0 +60,4 @@
Bukkit.getOnlinePlayers().forEach(player -> player.kickPlayer(null));
List<?> networkManagers = TinyProtocol.networkManagers.get(TinyProtocol.getServerConnection(Core.getInstance()));
if(networkManagers.isEmpty()) {
Könnten wir dieses if bitte umdrehen? Fände ich schöner!
@ -67,1 +86,4 @@
private static final Reflection.FieldAccessor<List> channelFutures = Reflection.getField(TinyProtocol.serverConnection, List.class, 0, ChannelFuture.class);
private static final Reflection.MethodInvoker bind = Reflection.getMethod(TinyProtocol.serverConnection, null, InetAddress.class, int.class);
private static void freezeInternal(Path path) throws Exception {
Bukkit.getWorlds().forEach(world -> Arrays.stream(world.getLoadedChunks()).forEach(Chunk::unload));
Ist Chunk.unload auch gleich ein World save? Also das die Welt gespeichert wird?
Ein World save ist async, deswegen nutzen wir den nicht. (Weil wir dann mitten im Speichern checkpointen, nicht unbedingt ideal).
Wenn die Chunks entladen werden, werden sie auch gespeichert, d.h. wird defakto die Welt gespeichert.
Ok gut zu wissen.
@ -63,2 +49,2 @@
}
}
public static void signalHandler() {
Signal.handle(new Signal("USR1"), signal -> Bukkit.getScheduler().runTask(Core.getInstance(), CheckpointUtils::freeze));
Ich habe das Gefühl, dass das hier einen Fehler werfen kann, alleine, weil es sun.misc.Signal ist vom package.
Warum sollte das Fehler werfen? Ich weiß, dass es deprecated ist und ich eigentlich jdk.internal.Signal nutzen müsste, aber wir haben auch noch Java 8-Server im Betrieb, die müssen das auch können, und da gibt es noch kein jdk.internal. War sun.misc zur Entfernung in einer festgelegten JDK-Version vorgesehen?
Ich glaube aktuell nichts bekannt, aber mit Sicherheit. Ich hatte eher gedacht, dass es in Java-8 nicht existiert deswegen.