Split queue dump

This commit is contained in:
Robin Kupper
2011-08-06 17:27:12 +02:00
parent 7174e7a9d8
commit 55bdf06c7c
2 changed files with 38 additions and 16 deletions
+9 -3
View File
@@ -293,10 +293,11 @@ public class Consumer extends TimerTask
}
public void writeToFile() throws FileNotFoundException {
final File file = new File("plugins/LogBlock/consumer/queue.sql");
file.getParentFile().mkdirs();
final PrintWriter writer = new PrintWriter(file);
final long time = System.currentTimeMillis();
final Set<Integer> insertedPlayers = new HashSet<Integer>();
int counter = 0;
new File("plugins/LogBlock/import/").mkdirs();
PrintWriter writer = new PrintWriter(new File("plugins/LogBlock/import/queue-" + time + "-0.sql"));
while (!queue.isEmpty()) {
final Row r = queue.poll();
if (r == null)
@@ -308,6 +309,11 @@ public class Consumer extends TimerTask
}
for (final String insert : r.getInserts())
writer.println(insert);
counter++;
if (counter % 1000 == 0) {
writer.close();
writer = new PrintWriter(new File("plugins/LogBlock/import/queue-" + time + "-" + counter / 1000 + ".sql"));
}
}
writer.close();
}
+29 -13
View File
@@ -5,6 +5,7 @@ import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FilenameFilter;
import java.net.URL;
import java.sql.Connection;
import java.sql.ResultSet;
@@ -66,7 +67,7 @@ public class LogBlock extends JavaPlugin
updater = new Updater(this);
log.info("[LogBlock] Version check: " + updater.checkVersion());
config = new Config(this);
File file = new File("lib/mysql-connector-java-bin.jar");
final File file = new File("lib/mysql-connector-java-bin.jar");
if (!file.exists() || file.length() == 0)
download(log, new URL("http://diddiz.insane-architects.net/download/mysql-connector-java-bin.jar"), file);
if (!file.exists() || file.length() == 0)
@@ -77,24 +78,39 @@ public class LogBlock extends JavaPlugin
if (updater.update())
config = new Config(this);
updater.checkTables();
file = new File("plugins/LogBlock/consumer/queue.sql");
if (file.exists()) {
log.info("[LogBlock] Found stored queue. Try to import now.");
final File[] imports = new File("plugins/LogBlock/import/").listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.toLowerCase().endsWith(".sql");
}
});
if (imports != null && imports.length > 0) {
log.info("[LogBlock] Found " + imports.length + "imports.");
Connection conn = null;
try {
conn = getConnection();
conn.setAutoCommit(false);
final Statement state = conn.createStatement();
final BufferedReader reader = new BufferedReader(new FileReader(file));
String insert = null;
while ((insert = reader.readLine()) != null)
state.execute(insert);
conn.commit();
reader.close();
file.delete();
final Statement st = conn.createStatement();
for (final File sqlFile : imports)
try {
log.info("[LogBlock] Trying to import " + sqlFile.getName() + " ...");
final BufferedReader reader = new BufferedReader(new FileReader(sqlFile));
String line = null;
while ((line = reader.readLine()) != null)
st.addBatch(line);
st.executeBatch();
conn.commit();
reader.close();
sqlFile.delete();
log.info("[LogBlock] Successfully imported " + sqlFile.getName() + ".");
} catch (final Exception ex) {
log.log(Level.WARNING, "[LogBlock] Failed to import " + sqlFile.getName() + ": ", ex);
file.renameTo(new File("plugins/LogBlock/import/" + sqlFile.getName() + ".failed"));
}
st.close();
log.info("[LogBlock] Successfully imported stored queue.");
} catch (final Exception ex) {
log.log(Level.WARNING, "[LogBlock] Failed to import stored queue: ", ex);
log.log(Level.WARNING, "[LogBlock] Error while importing: ", ex);
} finally {
if (conn != null)
conn.close();