BackupTask class
Пакет: com.hypixel.hytale.server.core.util.backup
Файл: com/hypixel/hytale/server/core/util/backup/BackupTask.java
Поля (20)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
DateTimeFormatter |
BACKUP_FILE_DATE_FORMATTER |
|
BackupConfig |
var1 |
|
FileTime |
var1 |
|
|
var1 |
|
Path |
var1x |
|
BackupTask |
var2 |
|
BackupConfig |
var2 |
|
int |
var2 |
|
String |
var2x |
|
Path |
var3 |
|
int |
var3 |
|
List |
var3 |
|
Path |
var4 |
|
List |
var4 |
|
|
var4 |
|
Path |
var5 |
|
FileTime |
var5 |
|
FileTime |
var6 |
|
FileTime |
var7 |
|
boolean |
var8 |
Методы (10)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
static |
void |
cleanOldArchivesvoid cleanOldArchives(@Nonnull Path var0) |
static |
void |
cleanOrArchiveOldBackupsvoid cleanOrArchiveOldBackups(@Nonnull Path var0, @Nonnull Path var1) |
|
|
for for(Path var10 : var4) |
|
|
for for(Path var5 : var3) |
|
|
for for(Path var4 : var2) |
|
|
if if(var3 >= 1) |
|
|
if if(var8) |
|
|
if if(var2 >= 1) |
|
public void |
runpublic void run() |
static |
CompletableFuture<Void> |
startCompletableFuture<Void> start(@Nonnull Path var0, @Nonnull Path var1) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.util.backup;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.server.core.HytaleServer;
class="kw">import com.hypixel.hytale.server.core.config.BackupConfig;
class="kw">import java.io.IOException;
class="kw">import java.nio.file.DirectoryStream;
class="kw">import java.nio.file.Files;
class="kw">import java.nio.file.Path;
class="kw">import java.nio.file.StandardCopyOption;
class="kw">import java.nio.file.attribute.FileTime;
class="kw">import java.time.Duration;
class="kw">import java.time.LocalDateTime;
class="kw">import java.time.ZoneId;
class="kw">import java.time.format.DateTimeFormatter;
class="kw">import java.time.temporal.ChronoUnit;
class="kw">import java.util.List;
class="kw">import java.util.concurrent.CompletableFuture;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class BackupTask {
class="kw">private class="kw">static class="kw">final DateTimeFormatter BACKUP_FILE_DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd_HH-mm-ss");
class="kw">private class="kw">static class="kw">final Duration BACKUP_ARCHIVE_FREQUENCY = Duration.of(12L, ChronoUnit.HOURS);
class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
@Nonnull
class="kw">private class="kw">final CompletableFuture<Void> completion = new CompletableFuture<>();
class="kw">public class="kw">static CompletableFuture<Void> start(@Nonnull Path var0, @Nonnull Path var1) {
BackupTask var2 = new BackupTask(var0, var1);
class="kw">return var2.completion;
}
class="kw">private BackupTask(@Nonnull class="kw">final Path var1, @Nonnull class="kw">final Path var2) {
(new Thread("Backup Runner") {
{
this.setDaemon(false);
}
@Override
class="kw">public void run() {
BackupUtil.broadcastBackupStatus(true);
try {
Path var1x = var2.resolve("archive");
Files.createDirectories(var2);
Files.createDirectories(var1x);
BackupTask.cleanOrArchiveOldBackups(var2, var1x);
BackupTask.cleanOldArchives(var1x);
String var2x = BackupTask.BACKUP_FILE_DATE_FORMATTER.format(LocalDateTime.now(ZoneId.systemDefault())) + ".zip";
Path var3 = var2.resolve(var2x + ".tmp");
BackupUtil.walkFileTreeAndZip(var1, var3);
Path var4 = var2.resolve(var2x);
Files.move(var3, var4, StandardCopyOption.REPLACE_EXISTING);
BackupTask.LOGGER.at(Level.INFO).log("Successfully created backup %s", var4);
BackupTask.this.completion.complete(null);
} catch (Throwable var8) {
((HytaleLogger.Api)BackupTask.LOGGER.at(Level.SEVERE).withCause(var8)).log("Backup failed with exception");
BackupUtil.broadcastBackupError(var8);
BackupTask.this.completion.completeExceptionally(var8);
} class="kw">finally {
BackupUtil.broadcastBackupStatus(false);
}
}
}).start();
}
class="kw">private class="kw">static void cleanOrArchiveOldBackups(@Nonnull Path var0, @Nonnull Path var1) class="kw">throws IOException {
BackupConfig var2 = HytaleServer.get().getConfig().getBackupConfig();
int var3 = var2.getMaxCount();
if (var3 >= 1) {
List var4 = BackupUtil.findOldBackups(var0, var3);
if (var4 != null && !var4.isEmpty()) {
Path var5 = var4.getFirst();
FileTime var6 = Files.getLastModifiedTime(var5);
FileTime var7 = getMostRecentArchive(var1);
boolean var8 = var7 == null || Duration.between(var7.toInstant(), var6.toInstant()).compareTo(BACKUP_ARCHIVE_FREQUENCY) > 0;
if (var8) {
var4 = var4.subList(1, var4.size());
Files.move(var5, var1.resolve(var5.getFileName()), StandardCopyOption.REPLACE_EXISTING);
LOGGER.at(Level.INFO).log("Archived old backup: %s", var5);
}
for (Path var10 : var4) {
LOGGER.at(Level.INFO).log("Clearing old backup: %s", var10);
Files.deleteIfExists(var10);
}
}
}
}
class="kw">private class="kw">static void cleanOldArchives(@Nonnull Path var0) class="kw">throws IOException {
BackupConfig var1 = HytaleServer.get().getConfig().getBackupConfig();
int var2 = var1.getArchiveMaxCount();
if (var2 >= 1) {
List var3 = BackupUtil.findOldBackups(var0, var2);
if (var3 != null && !var3.isEmpty()) {
for (Path var5 : var3) {
LOGGER.at(Level.INFO).log("Clearing old archive backup: %s", var5);
Files.deleteIfExists(var5);
}
}
}
}
@Nullable
class="kw">private class="kw">static FileTime getMostRecentArchive(@Nonnull Path var0) class="kw">throws IOException {
FileTime var1 = null;
try (DirectoryStream var2 = Files.newDirectoryStream(var0)) {
for (Path var4 : var2) {
if (Files.isRegularFile(var4)) {
FileTime var5 = Files.getLastModifiedTime(var4);
if (var1 == null || var5.compareTo(var1) > 0) {
var1 = var5;
}
}
}
}
class="kw">return var1;
}
}