001/* 002 * (C) Copyright 2019 Nuxeo (http://nuxeo.com/) and others. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 * 016 * Contributors: 017 * Florent Guillaume 018 */ 019package org.nuxeo.runtime.cluster; 020 021import java.time.Duration; 022 023import javax.validation.constraints.NotNull; 024 025import org.nuxeo.runtime.RuntimeServiceException; 026 027/** 028 * Cluster Service, defining cluster node state and identity. 029 * 030 * @since 11.1 031 */ 032public interface ClusterService { 033 034 /** 035 * Checks if cluster mode is enabled. 036 * 037 * @return {@code true} if cluster mode is enabled, {@code false} if not 038 */ 039 boolean isEnabled(); 040 041 /** 042 * Returns the node id. This is never {@code null}. 043 * 044 * @return the node id 045 */ 046 @NotNull 047 String getNodeId(); 048 049 /** 050 * Runs a {@link Runnable} atomically in a cluster-wide critical section, outside a transaction. 051 * 052 * @param key the key used to determine atomicity 053 * @param duration the duration during which we attempt to acquire the lock 054 * @param pollDelay the delay between two subsequent polls of the lock 055 * @param runnable the runnable 056 * @throws RuntimeServiceException if locking failed 057 */ 058 void runAtomically(String key, Duration duration, Duration pollDelay, Runnable runnable); 059 060}