/* * Copyright (c) 2015 EMC Corporation * All Rights Reserved */ package com.emc.storageos.systemservices.impl.jobs.common; import java.io.Serializable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.emc.storageos.coordinator.client.service.CoordinatorClient; import com.emc.storageos.coordinator.client.service.DistributedQueue; import com.emc.storageos.coordinator.client.service.impl.DistributedQueueConsumer; public class JobProducer { private static final Logger log = LoggerFactory.getLogger(JobProducer.class); public static final int DEFAULT_MAX_THREADS = 1; public static final long DEFAULT_MAX_WAIT_STOP = 60 * 1000; private DistributedQueue<Serializable> queue; private DistributedQueueConsumer<Serializable> consumer; private CoordinatorClient coordinator; private String queueName; /** * Start db consistency job queue */ public void startQueue() { log.info("Starting job queue for {}", queueName); try { queue = coordinator.getQueue(queueName, consumer, new JobSerializer(), DEFAULT_MAX_THREADS); } catch (Exception e) { log.error("can not startup job queue for {}", queueName, e); } } /** * Stop db consistency job queue */ public void stopQueue() { log.info("Stopping job queue of {}", queueName); queue.stop(DEFAULT_MAX_WAIT_STOP); } public void enqueue(Serializable job) { log.info("enqueue job:{}", job); try { queue.put(job); } catch (Exception e) { log.error("fail to enqueue job", e); throw new RuntimeException(e); } } public CoordinatorClient getCoordinator() { return coordinator; } public void setCoordinator(CoordinatorClient coordinator) { this.coordinator = coordinator; } public DistributedQueueConsumer<Serializable> getConsumer() { return consumer; } public void setConsumer(DistributedQueueConsumer<Serializable> consumer) { this.consumer = consumer; } public void setQueueName(String queueName) { this.queueName = queueName; } }