/**
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.aurora.scheduler.state;
import org.apache.aurora.scheduler.storage.entities.ILock;
import org.apache.aurora.scheduler.storage.entities.ILockKey;
/**
* Defines all {@link ILock} primitives like: acquire, release, validate.
*/
public interface LockManager {
/**
* Creates, saves and returns a new {@link ILock} with the specified {@link ILockKey}.
* This method is not re-entrant, i.e. attempting to acquire a lock with the
* same key would throw a {@link LockException}.
*
* @param lockKey A key uniquely identify the lock to be created.
* @param user Name of the user requesting a lock.
* @return A new ILock instance.
* @throws LockException In case the lock with specified key already exists.
*/
ILock acquireLock(ILockKey lockKey, String user) throws LockException;
/**
* Releases (removes) the specified {@link ILock} from the system.
*
* @param lock {@link ILock} to remove from the system.
*/
void releaseLock(ILock lock);
/**
* Asserts that an entity is not locked.
*
* @param context Operation context to validate with the provided lock.
* @throws LockException If provided context is locked.
*/
void assertNotLocked(ILockKey context) throws LockException;
/**
* Returns all available locks stored.
*
* @return Set of {@link ILock} instances.
*/
Iterable<ILock> getLocks();
/**
* Thrown when {@link ILock} related operation failed.
*/
class LockException extends Exception {
public LockException(String msg) {
super(msg);
}
}
}