Fixing new replays not being findable due to a JVM segfault. Fixed versioning not propagating.

This commit is contained in:
Christian 'ketura' McCarty
2023-03-20 00:23:10 -05:00
parent 8939dae20b
commit 441e8d883e
2 changed files with 18 additions and 15 deletions

View File

@@ -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

View File

@@ -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");
}