Have an extra map for uncommited playerIds

They will only added to the main list after a successful
commit and cleared otherwise
This commit is contained in:
Brokkonaut
2018-08-03 14:09:09 +02:00
parent d0f64070ae
commit 6168ef1713

View File

@@ -53,6 +53,7 @@ public class Consumer extends Thread {
private final Set<Actor> failedPlayers = new HashSet<Actor>(); private final Set<Actor> failedPlayers = new HashSet<Actor>();
private final LogBlock logblock; private final LogBlock logblock;
private final Map<Actor, Integer> playerIds = new HashMap<Actor, Integer>(); private final Map<Actor, Integer> playerIds = new HashMap<Actor, Integer>();
private final Map<Actor, Integer> uncommitedPlayerIds = new HashMap<Actor, Integer>();
private long addEntryCounter; private long addEntryCounter;
private long nextWarnCounter; private long nextWarnCounter;
@@ -470,7 +471,7 @@ public class Consumer extends Thread {
if (r != null) { if (r != null) {
boolean failOnActors = false; boolean failOnActors = false;
for (final Actor actor : r.getActors()) { for (final Actor actor : r.getActors()) {
if (!playerIds.containsKey(actor)) { if (playerIDAsIntIncludeUncommited(actor) == null) {
if (!addPlayer(conn, actor)) { if (!addPlayer(conn, actor)) {
if (failedPlayers.add(actor)) { if (failedPlayers.add(actor)) {
logblock.getLogger().warning("[Consumer] Failed to add player " + actor.getName()); logblock.getLogger().warning("[Consumer] Failed to add player " + actor.getName());
@@ -488,6 +489,8 @@ public class Consumer extends Thread {
batchHelper.processStatements(conn); batchHelper.processStatements(conn);
conn.commit(); conn.commit();
currentRows.clear(); currentRows.clear();
playerIds.putAll(uncommitedPlayerIds);
uncommitedPlayerIds.clear();
} }
} catch (Exception e) { } catch (Exception e) {
logblock.getLogger().log(Level.SEVERE, "[Consumer] Could not insert entries!", e); logblock.getLogger().log(Level.SEVERE, "[Consumer] Could not insert entries!", e);
@@ -507,6 +510,7 @@ public class Consumer extends Thread {
} }
currentRows.clear(); currentRows.clear();
batchHelper.reset(); batchHelper.reset();
uncommitedPlayerIds.clear();
if (conn != null) { if (conn != null) {
try { try {
conn.close(); conn.close();
@@ -622,11 +626,11 @@ public class Consumer extends Thread {
state.execute("INSERT IGNORE INTO `lb-players` (playername,UUID) SELECT '" + mysqlTextEscape(name) + "','" + uuid + "' FROM `lb-players` WHERE NOT EXISTS (SELECT NULL FROM `lb-players` WHERE UUID = '" + uuid + "') LIMIT 1;"); state.execute("INSERT IGNORE INTO `lb-players` (playername,UUID) SELECT '" + mysqlTextEscape(name) + "','" + uuid + "' FROM `lb-players` WHERE NOT EXISTS (SELECT NULL FROM `lb-players` WHERE UUID = '" + uuid + "') LIMIT 1;");
final ResultSet rs = state.executeQuery("SELECT playerid FROM `lb-players` WHERE UUID = '" + uuid + "'"); final ResultSet rs = state.executeQuery("SELECT playerid FROM `lb-players` WHERE UUID = '" + uuid + "'");
if (rs.next()) { if (rs.next()) {
playerIds.put(actor, rs.getInt(1)); uncommitedPlayerIds.put(actor, rs.getInt(1));
} }
rs.close(); rs.close();
state.close(); state.close();
return playerIds.containsKey(actor); return uncommitedPlayerIds.containsKey(actor);
} }
private void queueBlock(Actor actor, Location loc, BlockData typeBefore, BlockData typeAfter, byte[] stateBefore, byte[] stateAfter, ChestAccess ca) { private void queueBlock(Actor actor, Location loc, BlockData typeBefore, BlockData typeAfter, byte[] stateBefore, byte[] stateAfter, ChestAccess ca) {
@@ -678,11 +682,15 @@ public class Consumer extends Thread {
return "(SELECT playerid FROM `lb-players` WHERE UUID = '" + actor.getUUID() + "')"; return "(SELECT playerid FROM `lb-players` WHERE UUID = '" + actor.getUUID() + "')";
} }
private Integer playerIDAsInt(Actor actor) { private Integer playerIDAsIntIncludeUncommited(Actor actor) {
if (actor == null) { if (actor == null) {
return null; return null;
} }
return playerIds.get(actor); Integer id = playerIds.get(actor);
if (id != null) {
return id;
}
return uncommitedPlayerIds.get(actor);
} }
private static interface Row { private static interface Row {
@@ -727,7 +735,7 @@ public class Consumer extends Thread {
public void process(Connection conn, BatchHelper batchHelper) throws SQLException { public void process(Connection conn, BatchHelper batchHelper) throws SQLException {
PreparedStatement smt = batchHelper.getOrPrepareStatement(conn, statementString, Statement.RETURN_GENERATED_KEYS); PreparedStatement smt = batchHelper.getOrPrepareStatement(conn, statementString, Statement.RETURN_GENERATED_KEYS);
smt.setLong(1, date); smt.setLong(1, date);
smt.setInt(2, playerIDAsInt(actor)); smt.setInt(2, playerIDAsIntIncludeUncommited(actor));
smt.setInt(3, replacedMaterial); smt.setInt(3, replacedMaterial);
smt.setInt(4, replacedData); smt.setInt(4, replacedData);
smt.setInt(5, typeMaterial); smt.setInt(5, typeMaterial);
@@ -792,8 +800,8 @@ public class Consumer extends Thread {
public void process(Connection conn, BatchHelper batchHelper) throws SQLException { public void process(Connection conn, BatchHelper batchHelper) throws SQLException {
PreparedStatement smt = batchHelper.getOrPrepareStatement(conn, statementString, Statement.NO_GENERATED_KEYS); PreparedStatement smt = batchHelper.getOrPrepareStatement(conn, statementString, Statement.NO_GENERATED_KEYS);
smt.setLong(1, date); smt.setLong(1, date);
smt.setInt(2, playerIDAsInt(killer)); smt.setInt(2, playerIDAsIntIncludeUncommited(killer));
smt.setInt(3, playerIDAsInt(victim)); smt.setInt(3, playerIDAsIntIncludeUncommited(victim));
smt.setInt(4, weapon); smt.setInt(4, weapon);
smt.setInt(5, loc.getBlockX()); smt.setInt(5, loc.getBlockX());
smt.setInt(6, safeY(loc)); smt.setInt(6, safeY(loc));
@@ -825,7 +833,7 @@ public class Consumer extends Thread {
public void process(Connection conn, BatchHelper batchHelper) throws SQLException { public void process(Connection conn, BatchHelper batchHelper) throws SQLException {
PreparedStatement smt = batchHelper.getOrPrepareStatement(conn, statementString, Statement.NO_GENERATED_KEYS); PreparedStatement smt = batchHelper.getOrPrepareStatement(conn, statementString, Statement.NO_GENERATED_KEYS);
smt.setLong(1, date); smt.setLong(1, date);
smt.setInt(2, playerIDAsInt(player)); smt.setInt(2, playerIDAsIntIncludeUncommited(player));
smt.setString(3, message); smt.setString(3, message);
batchHelper.addBatch(smt, null); batchHelper.addBatch(smt, null);
} }