StorageManager.java 1020 Bytes
Newer Older
amir.yosef's avatar
amir.yosef committed
1 2
package storage;

3
import java.util.Date;
amir.yosef's avatar
amir.yosef committed
4 5 6 7 8 9 10 11 12 13 14
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class StorageManager {
    private final Storage storage;
    private final ScheduledExecutorService scheduler;

    public StorageManager() {
        this.storage = Storage.getInstance();
        this.scheduler = Executors.newSingleThreadScheduledExecutor();
15
        scheduler.scheduleAtFixedRate(this::performMaintenance, 2, 2, TimeUnit.MINUTES);
amir.yosef's avatar
amir.yosef committed
16
    }
17

amir.yosef's avatar
amir.yosef committed
18 19
    private void performMaintenance() {
        storage.runCachePolicy();
20
        System.out.println("Maintenance performed at: " + Date.from(java.time.Clock.systemUTC().instant()));
amir.yosef's avatar
amir.yosef committed
21 22 23 24 25
    }

    public void shutdown() {
        scheduler.shutdown();
        try {
26
            if (!scheduler.awaitTermination(20, TimeUnit.SECONDS)) {
amir.yosef's avatar
amir.yosef committed
27 28 29 30 31 32 33
                scheduler.shutdownNow();
            }
        } catch (InterruptedException e) {
            scheduler.shutdownNow();
        }
    }
}