Skip to content

Commit 3db471e

Browse files
committed
add test to verify cleanup is working
1 parent f36c339 commit 3db471e

File tree

3 files changed

+74
-2
lines changed

3 files changed

+74
-2
lines changed

pom.xml

+7
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,13 @@
110110
</exclusion>
111111
</exclusions>
112112
</dependency>
113+
114+
<dependency>
115+
<groupId>io.dropwizard</groupId>
116+
<artifactId>dropwizard-testing</artifactId>
117+
<version>${io.dropwizard.version}</version>
118+
<scope>test</scope>
119+
</dependency>
113120
</dependencies>
114121

115122
<build>

src/main/java/com/lowtuna/jsonblob/core/BlobCleanupJob.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,12 @@ public void run() {
4242
.map(Path::getParent)
4343
.distinct()
4444
.forEach(dataDir -> {
45+
log.info("Checking for unused blobs in {}", dataDir.toAbsolutePath());
4546
Set<String> blobs = Sets
4647
.newHashSet(Lists.transform(Arrays.asList(dataDir.toFile().listFiles()), f -> f.getName().split("\\.", 2)[0]))
4748
.parallelStream()
4849
.filter(f -> fileSystemJsonBlobManager.resolveTimestamp(f).isPresent()).collect(Collectors.toSet());
49-
log.info("Checking for unused blobs in {}", dataDir.toAbsolutePath());
50+
log.info("Identified {} blobs in {}", blobs.size(), dataDir);
5051
Map<String, DateTime> lastAccessed = Maps.asMap(blobs, new Function<String, DateTime>() {
5152
@Nullable
5253
@Override
@@ -59,8 +60,8 @@ public DateTime apply(@Nullable String input) {
5960
try {
6061
BlobMetadataContainer metadataContainer = metadataFile.exists() ? om.readValue(fileSystemJsonBlobManager.readFile(metadataFile), BlobMetadataContainer.class) : new BlobMetadataContainer();
6162
lastAccessed.putAll(metadataContainer.getLastAccessedByBlobId());
62-
6363
Map<String, DateTime> toRemove = Maps.filterEntries(lastAccessed, input -> input.getValue().plusMillis((int) blobAccessTtl.toMilliseconds()).isBefore(DateTime.now()));
64+
log.info("Identified {} blobs to remove in {}", toRemove.size(), dataDir);
6465
toRemove.keySet().parallelStream().forEach(blobId -> {
6566
if (deleteEnabled) {
6667
log.debug("Deleting blob with id {}", blobId);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package com.lowtuna.jsonblob.core;
2+
3+
import com.fasterxml.jackson.databind.ObjectMapper;
4+
import io.dropwizard.util.Duration;
5+
import lombok.extern.java.Log;
6+
import org.apache.commons.io.FileUtils;
7+
import org.bson.types.ObjectId;
8+
import org.joda.time.DateTime;
9+
import org.junit.Assert;
10+
import org.junit.Before;
11+
import org.junit.Test;
12+
13+
import java.io.File;
14+
import java.io.IOException;
15+
import java.nio.file.Files;
16+
import java.util.UUID;
17+
import java.util.concurrent.Executors;
18+
19+
/**
20+
* Created by tburch on 8/16/17.
21+
*/
22+
@Log
23+
public class BlobCleanupJobTest {
24+
25+
private static final File TEMP;
26+
static {
27+
File temp = FileUtils.getTempDirectory();
28+
File dir = new File(temp, UUID.randomUUID().toString());
29+
dir.deleteOnExit();
30+
TEMP = dir;
31+
}
32+
33+
private final Duration blobTtl = Duration.minutes(1);
34+
35+
private FileSystemJsonBlobManager blobManager;
36+
37+
@Before
38+
public void initBlobManage() {
39+
this.blobManager = new FileSystemJsonBlobManager(TEMP, Executors.newSingleThreadScheduledExecutor(), new ObjectMapper(), blobTtl, true);
40+
}
41+
42+
@Test
43+
public void testCleanup() throws Exception {
44+
DateTime now = DateTime.now();
45+
46+
Assert.assertEquals(0, countFiles());
47+
blobManager.createBlob("{\"foo\":|\"bar\"}", (new ObjectId(now.minusDays((int) (blobTtl.toMinutes() * 2)).toDate())).toString());
48+
Assert.assertEquals(1, countFiles());
49+
blobManager.createBlob("{\"foo\":|\"bar\"}", (new ObjectId(now.toDate())).toString());
50+
Assert.assertEquals(2, countFiles());
51+
52+
log.info("Starting blob manager");
53+
blobManager.start();
54+
55+
Thread.sleep(200000);
56+
57+
Assert.assertEquals(1, countFiles());
58+
}
59+
60+
private long countFiles() throws IOException {
61+
return Files.find(TEMP.toPath(), 999, (p, bfa) -> bfa.isRegularFile()).count();
62+
}
63+
64+
}

0 commit comments

Comments
 (0)