/* * Copyright (c) 2014 EMC Corporation * All Rights Reserved */ package com.emc.storageos.db.gc; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.emc.storageos.db.client.util.KeyspaceUtil; import com.emc.storageos.db.client.model.DataObject; /** * Class schedules and runs GC job on local DB */ class LocalGCExecutorLoop extends GarbageCollectionExecutorLoop { private static final String LOCAL_DB_GC_LOCK = "Local_DB_GC_Lock"; private static final Logger log = LoggerFactory.getLogger(LocalGCExecutorLoop.class); public LocalGCExecutorLoop() { super(); } @Override protected boolean preGC() { return true; } /** * * @param clazz the GC will run on * @param <T> * @return true if we can run GC on this class **/ @Override protected <T extends DataObject> boolean canRunGCOnClass(Class<T> clazz) { // local GC on run on local DB return KeyspaceUtil.isLocal(clazz); } /** * Generate GC task for class * * @param clazz the GC will run on * @return a GC task **/ @Override protected <T extends DataObject> GarbageCollectionRunnable genGCTask(Class<T> clazz) { return new LocalGCRunnable(dbClient, clazz, dependencyTracker, gcDelayMins, coordinator); } @Override protected void postGC() { } @Override protected String getGCZKLockName() { return LOCAL_DB_GC_LOCK; } }