blob: fa22dfb8dc553cfb8dae5b011e7d5087a4562960 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.ignite;
import java.io.Closeable;
import java.util.concurrent.TimeUnit;
/**
* This interface provides a rich API for working with distributed count down latch.
* <p>
* <h1 class="header">Functionality</h1>
* Distributed count down latch provides functionality similar to {@code java.util.CountDownLatch}.
* Note that you cannot remove count down latch having count greater that zero. It should be
* counted down to zero first.
* <h1 class="header">Creating Distributed Count Down Latch</h1>
* Instance of cache count down latch can be created by calling the following method:
* {@link Ignite#countDownLatch(String, int, boolean, boolean)}.
*/
public interface IgniteCountDownLatch extends Closeable {
/**
* Gets name of the latch.
*
* @return Name of the latch.
*/
public String name();
/**
* Gets current count value of the latch.
*
* @return Current count.
*/
public int count();
/**
* Gets initial count value of the latch.
*
* @return Initial count.
*/
public int initialCount();
/**
* Gets {@code autoDelete} flag. If this flag is {@code true} latch is removed
* from cache when it has been counted down to 0.
*
* @return Value of {@code autoDelete} flag.
*/
public boolean autoDelete();
/**
* Causes the current thread to wait until the latch has counted down to
* zero, unless current thread is interrupted.
* <p>
* If the current count of the latch is zero then this method returns immediately.
* <p>
* If the current count is greater than zero then the current
* thread becomes disabled for thread scheduling purposes and lies
* dormant until one of two things happen:
* <ul>
* <li>The count reaches zero due to invocations of the
* {@link #countDown} method on any node; or
* <li>Some other thread interrupts the current thread.
* </ul>
* <p>
* If the current thread:
* <ul>
* <li>has its interrupted status set on entry to this method; or
* <li>is interrupted while waiting,
* </ul>
* then {@link org.apache.ignite.internal.IgniteInterruptedCheckedException} is thrown and the current thread's
* interrupted status is cleared.
*
* @throws IgniteException If operation failed.
* @throws org.apache.ignite.IgniteInterruptedException if the current thread is interrupted
* while waiting
*/
public void await() throws IgniteException;
/**
* Causes the current thread to wait until the latch has counted down to
* zero, unless the thread is interrupted, or the specified waiting time elapses.
* <p>
* If the current count is zero then this method returns immediately
* with the value {@code true}.
* <p>
* If the current count is greater than zero then the current
* thread becomes disabled for thread scheduling purposes and lies
* dormant until one of three things happen:
* <ul>
* <li>The count reaches zero due to invocations of the
* {@link #countDown} method on any node; or
* <li>Some other thread interrupts the current thread; or
* <li>The specified waiting time elapses.
* </ul>
* <p>
* If the count reaches zero then the method returns with the
* value {@code true}.
* <p>
* If the current thread:
* <ul>
* <li>has its interrupted status set on entry to this method; or
* <li>is interrupted while waiting,
* </ul>
* then {@link org.apache.ignite.internal.IgniteInterruptedCheckedException} is thrown and the current thread's
* interrupted status is cleared.
* <p>
* If the specified waiting time elapses then the value {@code false}
* is returned. If the time is less than or equal to zero, the method
* will not wait at all.
*
* @param timeout The maximum time to wait in milliseconds.
* @return {@code True} if the count reached zero and {@code false}
* if the waiting time elapsed before the count reached zero.
* @throws org.apache.ignite.IgniteInterruptedException If the current thread is interrupted
* while waiting.
* @throws IgniteException If operation failed.
*/
public boolean await(long timeout) throws IgniteException;
/**
* Causes the current thread to wait until the latch has counted down to
* zero, unless the thread is interrupted, or the specified waiting time elapses.
* <p>
* If the current count is zero then this method returns immediately
* with the value {@code true}.
* <p>
* If the current count is greater than zero then the current
* thread becomes disabled for thread scheduling purposes and lies
* dormant until one of three things happen:
* <ul>
* <li>The count reaches zero due to invocations of the
* {@link #countDown} method on any node; or
* <li>Some other thread interrupts the current thread; or
* <li>The specified waiting time elapses.
* </ul>
* <p>
* If the count reaches zero then the method returns with the
* value {@code true}.
* <p>
* If the current thread:
* <ul>
* <li>has its interrupted status set on entry to this method; or
* <li>is interrupted while waiting,
* </ul>
* then {@link org.apache.ignite.internal.IgniteInterruptedCheckedException} is thrown and the current thread's
* interrupted status is cleared.
* <p>
* If the specified waiting time elapses then the value {@code false}
* is returned. If the time is less than or equal to zero, the method
* will not wait at all.
*
*
* @param timeout The maximum time to wait.
* @param unit The time unit of the {@code timeout} argument.
* @return {@code True} if the count reached zero and {@code false}
* if the waiting time elapsed before the count reached zero.
* @throws org.apache.ignite.IgniteInterruptedException If the current thread is interrupted
* while waiting.
* @throws IgniteException If operation failed.
*/
public boolean await(long timeout, TimeUnit unit) throws IgniteException;
/**
* Decrements the count of the latch, releasing all waiting threads
* on all nodes if the count reaches zero.
* <p>
* If the current count is greater than zero then it is decremented.
* If the new count is zero then all waiting threads are re-enabled for
* thread scheduling purposes.
* <p>
* If the current count equals zero then nothing happens.
*
* @return Count after decrement.
* @throws IgniteException If operation failed.
*/
public int countDown() throws IgniteException;
/**
* Decreases the count of the latch using passed in value,
* releasing all waiting threads on all nodes if the count reaches zero.
* <p>
* If the current count is greater than zero then it is decreased.
* If the new count is zero then all waiting threads are re-enabled for
* thread scheduling purposes.
* <p>
* If the current count equals zero then nothing happens.
*
* @param val Value to decrease counter on.
* @return Count after decreasing.
* @throws IgniteException If operation failed.
*/
public int countDown(int val) throws IgniteException;
/**
* Counts down this latch to zero, releasing all waiting threads on all nodes.
* <p>
* If the current count equals zero then nothing happens.
*
* @throws IgniteException If operation failed.
*/
public void countDownAll() throws IgniteException;
/**
* Gets {@code removed} status of the latch.
*
* @return {@code True} if latch was removed from cache, {@code false} otherwise.
*/
public boolean removed();
/**
* Removes this count down latch.
*
* @throws IgniteException If operation failed.
*/
@Override public void close();
}