/* * Copyright (c) 2016 EMC Corporation * All Rights Reserved */ package com.emc.storageos.storagedriver.impl; import com.emc.storageos.storagedriver.LockManager; import com.emc.storageos.volumecontroller.ControllerLockingService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.concurrent.TimeUnit; /** * Implementation of lock manager service for device drivers. * Delegates to ControllerLockingService to get distributed lock on CoprHD nodes. */ public final class LockManagerImpl implements LockManager { private static final Logger log = LoggerFactory.getLogger(LockManagerImpl.class); private static LockManagerImpl lockManager; private ControllerLockingService lockingService; private LockManagerImpl() { } public static LockManager getInstance(ControllerLockingService lockingService) { if (lockManager == null) { lockManager = new LockManagerImpl(); lockManager.setLockingService(lockingService); } return lockManager; } @Override public boolean acquireLock(String lockName, long timeout, TimeUnit unit) { long timeoutSeconds; if (timeout == 0 || timeout == -1) { timeoutSeconds = timeout; } else { timeoutSeconds = unit.toSeconds(timeout); } // delegate to locking service log.info("Attempt to acquire lock. Name {}, timeout {} seconds", lockName, timeoutSeconds); return lockingService.acquireLock(lockName, timeoutSeconds); } @Override public boolean releaseLock(String lockName) { // delegate to locking service log.info("Attempt to release lock. Name {}.", lockName); return lockingService.releaseLock(lockName); } private void setLockingService(ControllerLockingService lockingService) { this.lockingService = lockingService; } }