forked from LogBlock/LogBlock
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:
@@ -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);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user