class CachingBlacklist implements Blacklist<T> {

    @Override
    public boolean isBlacklisted(T entry) throws BlacklistException {
        final String key = entry.getStableStorageID();

        if (cache.containsKey(key)) {
            // Cache hit
            return true;
        }

        // Cache miss
        boolean isBlacklisted = delegate.isBlacklisted(entry);
        if (isBlacklisted) {
            // Only cache entries that have been blacklisted, as we should always re-check otherwise
            cache.put(key, entry.getBlacklistExpiryTime() + purgeDelayMs);
        }
        return isBlacklisted;
    }

    @VisibleForTesting  CachingBlacklist(Blacklist<T> delegate, int maxSize, long purgeDelayMs, final TimeService clock);
    public  CachingBlacklist(Blacklist<T> delegate, int maxSize, long purgeDelayMs);

}