From 441e8d883e82ee56859509a85cb3ff3ede126b0d Mon Sep 17 00:00:00 2001 From: Christian 'ketura' McCarty Date: Mon, 20 Mar 2023 00:23:10 -0500 Subject: [PATCH] Fixing new replays not being findable due to a JVM segfault. Fixed versioning not propagating. --- .../gempukku/lotro/db/DbGameHistoryDAO.java | 22 ++++++++----------- .../com/gempukku/lotro/game/GameRecorder.java | 11 ++++++++-- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/db/DbGameHistoryDAO.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/db/DbGameHistoryDAO.java index dce764388..647f42477 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/db/DbGameHistoryDAO.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/db/DbGameHistoryDAO.java @@ -18,7 +18,7 @@ import java.util.Objects; public class DbGameHistoryDAO implements GameHistoryDAO { private final DbAccess _dbAccess; private final DateTimeFormatter _dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd"); - private final DateTimeFormatter _dateTimeFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss"); + private final DateTimeFormatter _dateTimeFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); public DbGameHistoryDAO(DbAccess dbAccess) { _dbAccess = dbAccess; @@ -70,9 +70,8 @@ public class DbGameHistoryDAO implements GameHistoryDAO { try (org.sql2o.Connection conn = db.open()) { String sql = """ - SELECT winner, winnerId, loser, loserId, win_reason, lose_reason, - win_recording_id, lose_recording_id, format_name, tournament, - winner_deck_name, loser_deck_name, start_date, end_date + SELECT winner, winnerId, loser, loserId, win_reason, lose_reason, win_recording_id, lose_recording_id, + format_name, tournament, winner_deck_name, loser_deck_name, start_date, end_date, replay_version FROM game_history WHERE winner = :playerName OR loser = :playerName @@ -100,9 +99,8 @@ public class DbGameHistoryDAO implements GameHistoryDAO { try (org.sql2o.Connection conn = db.open()) { String sql = """ - SELECT winner, winnerId, loser, loserId, win_reason, lose_reason, - win_recording_id, lose_recording_id, format_name, tournament, - winner_deck_name, loser_deck_name, start_date, end_date + SELECT winner, winnerId, loser, loserId, win_reason, lose_reason, win_recording_id, lose_recording_id, + format_name, tournament, winner_deck_name, loser_deck_name, start_date, end_date, replay_version FROM game_history WHERE win_recording_id = :recordID OR lose_recording_id = :recordID; @@ -151,10 +149,8 @@ public class DbGameHistoryDAO implements GameHistoryDAO { try (org.sql2o.Connection conn = db.open()) { String sql = """ SELECT - winner, winnerId, loser, loserId, win_reason, lose_reason, - win_recording_id, lose_recording_id, format_name, - tournament, winner_deck_name, loser_deck_name, - start_date, end_date + winner, winnerId, loser, loserId, win_reason, lose_reason, win_recording_id, lose_recording_id, + format_name, tournament, winner_deck_name, loser_deck_name, start_date, end_date, replay_version FROM game_history WHERE format_name LIKE :format ORDER BY end_date DESC @@ -307,8 +303,8 @@ public class DbGameHistoryDAO implements GameHistoryDAO { try (org.sql2o.Connection conn = db.open()) { String sql = """ - SELECT winner, winnerId, loser, loserId, win_reason, lose_reason, win_recording_id, lose_recording_id, format_name, - tournament, winner_deck_name, loser_deck_name, start_date, end_date + SELECT winner, winnerId, loser, loserId, win_reason, lose_reason, win_recording_id, lose_recording_id, + format_name, tournament, winner_deck_name, loser_deck_name, start_date, end_date, replay_version FROM game_history WHERE format_name = :formatName ORDER BY end_date DESC diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/GameRecorder.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/GameRecorder.java index 71b89cf53..fa1330e1f 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/GameRecorder.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/GameRecorder.java @@ -22,6 +22,7 @@ import javax.xml.transform.stream.StreamResult; import java.io.*; import java.time.ZoneOffset; import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -109,8 +110,14 @@ public class GameRecorder { private File getRecordingFileVersion1(String playerId, String gameId, ZonedDateTime startDate) { var gameReplayFolder = new File(AppConfig.getProperty("application.root"), "replay"); - var yearFolder = new File(gameReplayFolder, String.format("%04d", startDate.getYear())); - var monthFolder = new File(yearFolder, String.format("%02d", startDate.getMonthValue())); + //This dumbass formatting output is because anything that otherwise intersects with the + // year subfield appears to trigger a JVM segfault in the guts of the java ecosystem. + // Super-dumb. Don't touch. + var year = startDate.format(DateTimeFormatter.ofPattern("yyyy")); + var month = startDate.format(DateTimeFormatter.ofPattern("MM")); + + var yearFolder = new File(gameReplayFolder, year); + var monthFolder = new File(yearFolder, month); var playerReplayFolder = new File(monthFolder, playerId); return new File(playerReplayFolder, gameId + ".xml.gz"); }