/* * Copyright (c) 2015 EMC Corporation * All Rights Reserved */ package com.emc.storageos.systemservices.impl.util; import java.util.Date; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.emc.storageos.coordinator.client.model.Constants; import com.emc.storageos.coordinator.client.model.DbConsistencyStatus; import com.emc.storageos.coordinator.client.service.CoordinatorClient; import com.emc.storageos.coordinator.client.service.DrPostFailoverHandler; import com.emc.storageos.model.db.DbConsistencyStatusRestRep; import com.emc.storageos.systemservices.impl.jobs.DbConsistencyJob; import com.emc.storageos.systemservices.impl.jobs.common.JobProducer; /** * Db scan after failover. We need check db index/object CF inconsistencies * */ public class DrPostFailoverDBCheckHandler extends DrPostFailoverHandler { private static final Logger log = LoggerFactory.getLogger(JobProducer.class); private JobProducer jobProducer; private CoordinatorClient coordinator; public CoordinatorClient getCoordinator() { return coordinator; } public void setCoordinator(CoordinatorClient coordinator) { this.coordinator = coordinator; } public JobProducer getJobProducer() { return jobProducer; } public void setJobProducer(JobProducer jobProducer) { this.jobProducer = jobProducer; } @Override protected void execute() { if (isDbConsistencyCheckInProgress()) { log.warn("DB consistency check is in progress"); return; } DbConsistencyJob job = new DbConsistencyJob(); job.setStatus(DbConsistencyStatusRestRep.Status.NOT_STARTED); job.setStartTime(new Date()); jobProducer.enqueue(job); log.info("DB consistency job has been added to queue"); } private boolean isDbConsistencyCheckInProgress() { DbConsistencyStatus state = coordinator.queryRuntimeState(Constants.DB_CONSISTENCY_STATUS, DbConsistencyStatus.class); return state!=null && state.getStatus()==DbConsistencyStatusRestRep.Status.IN_PROGRESS; } }