Skip to content

Commit 81eff62

Browse files
committed
Merge branch 'release/0.5.0'
2 parents bace2b2 + 7567d10 commit 81eff62

1 file changed

Lines changed: 57 additions & 3 deletions

File tree

src/main/java/com/github/rishabh9/kumoru/snapshots/SnapshotUpdateChecker.java

Lines changed: 57 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
import com.github.rishabh9.kumoru.snapshots.parser.MetadataAsyncXmlParser;
99
import com.github.rishabh9.kumoru.snapshots.parser.SnapshotMetadata;
1010
import io.vertx.core.AbstractVerticle;
11+
import io.vertx.core.CompositeFuture;
12+
import io.vertx.core.Future;
1113
import io.vertx.core.Promise;
1214
import io.vertx.core.buffer.Buffer;
1315
import io.vertx.core.eventbus.DeliveryOptions;
@@ -22,6 +24,7 @@
2224
import java.util.List;
2325
import java.util.Optional;
2426
import java.util.concurrent.TimeUnit;
27+
import java.util.stream.Collectors;
2528
import javax.xml.stream.XMLStreamException;
2629
import lombok.extern.log4j.Log4j2;
2730

@@ -38,10 +41,10 @@ public void start(final Promise<Void> startPromise) {
3841
log.debug("Starting snapshot updater");
3942
webClient = KumoruCommon.createWebClient(vertx);
4043
vertx.eventBus().registerDefaultCodec(UpdateMessage.class, new UpdateMessageCodec());
41-
final int interval = 12;
44+
final int interval = 60;
4245
timerId =
4346
vertx.setPeriodic(
44-
TimeUnit.HOURS.toMillis(interval),
47+
TimeUnit.SECONDS.toMillis(interval),
4548
id -> {
4649
final ZonedDateTime now = ZonedDateTime.now();
4750
log.debug("Snapshot update checker started...");
@@ -110,7 +113,15 @@ private void nextMirror(final Iterator<String> iterator, final String fileOrDire
110113
final String metadataXmlFileSystemPath = fileOrDirectory + METADATA_XML;
111114
if (isSnapshotUpdated(downloadedFile, metadataXmlFileSystemPath)) {
112115
log.debug("New snapshot available from {}", uri);
113-
updateSnapshot(metadataXmlFileSystemPath, snapshotPath, mirror, result.body());
116+
deleteOldSnapshots(fileOrDirectory)
117+
.onComplete(
118+
asyncResult ->
119+
// Update after attempting to delete is complete
120+
updateSnapshot(
121+
metadataXmlFileSystemPath,
122+
snapshotPath,
123+
mirror,
124+
result.body()));
114125
}
115126
} else {
116127
log.debug("Unable to retrieve metadata from {}", uri, asyncWebResult.cause());
@@ -120,6 +131,49 @@ private void nextMirror(final Iterator<String> iterator, final String fileOrDire
120131
}
121132
}
122133

134+
private Future<Void> deleteOldSnapshots(final String directory) {
135+
log.debug("Deleting old snapshots from {}", directory);
136+
final Promise<Void> promise = Promise.promise();
137+
vertx
138+
.fileSystem()
139+
.readDir(
140+
directory,
141+
readResult -> {
142+
if (readResult.succeeded()) {
143+
CompositeFuture.all(
144+
readResult.result().stream().map(this::delete).collect(Collectors.toList()))
145+
.onSuccess(success -> promise.complete())
146+
.onFailure(
147+
failure -> {
148+
log.error("Error deleting all files", failure.getCause());
149+
promise.fail(failure.getCause());
150+
});
151+
} else {
152+
log.error("Error listing files", readResult.cause());
153+
promise.fail(readResult.cause());
154+
}
155+
});
156+
return promise.future();
157+
}
158+
159+
private Future<Void> delete(final String fileOrDirectory) {
160+
log.debug("Deleting {}", fileOrDirectory);
161+
final Promise<Void> promise = Promise.promise();
162+
vertx
163+
.fileSystem()
164+
.deleteRecursive(
165+
fileOrDirectory,
166+
true,
167+
deleteResult -> {
168+
if (deleteResult.failed()) {
169+
log.error("Unable to delete {}", fileOrDirectory, deleteResult.cause());
170+
promise.fail(deleteResult.cause());
171+
}
172+
promise.complete();
173+
});
174+
return promise.future();
175+
}
176+
123177
private void updateSnapshot(
124178
final String metadataXmlFileSystemPath,
125179
final String snapshotPath,

0 commit comments

Comments
 (0)