org.apache.ignite.internal

## Interface GridKernalGateway

All Known Implementing Classes:
  GridKernalGatewayImpl

    @GridToStringExclude
    public interface GridKernalGateway

This interface guards access to implementations of public methods that access kernal functionality from the following main API interfaces:

- `ClusterGroup`

Note that this kernal gateway should not be used to guard against method from the following non-rich interfaces since their implementations are already managed by their respective implementing classes:

- `Ignite`
- `ClusterNode`

Kernal gateway is also responsible for notifying various futures about the change in kernal state so that issued futures could properly interrupt themselves when kernal becomes unavailable while future is held externally by the user.

### Method Summary

Methods
`void` `addStopListener(Runnable lsnr)` Adds stop listener.
`GridKernalState` `getState()` Gets current kernal state.
`void` `lightCheck()` Performs light-weight check on the kernal state at the moment of this call.
`void` `readLock()` Should be called on entering every kernal related call originated directly or indirectly via public API.
`void` `readLockAnyway()` Same as `readLock()` but doesn't throw IllegalStateException if grid stop.
`void` `readUnlock()` Should be called on leaving every kernal related call originated directly or indirectly via public API.
`void` `removeStopListener(Runnable lsnr)` Removes previously added stop listener.
`void` `setState(GridKernalState state)` Sets kernal state.
`boolean` `tryWriteLock(long timeout)`
`String` `userStackTrace()` Gets user stack trace through the first call of grid public API.
`void` `writeLock()` This method waits for all current calls to exit and blocks any further `readLock()` calls until `writeUnlock()` method is called.
`void` `writeUnlock()` This method unblocks `writeLock()`.

### Method Detail

#### lightCheck

    void lightCheck()
                    throws IllegalStateException

Performs light-weight check on the kernal state at the moment of this call.

This method should only be used when the kernal state should be checked just once at the beginning of the method and the fact that kernal state can change in the middle of such method's execution should not matter.

For example, when a method returns a constant value its implementation doesn't depend on the kernal being valid throughout its execution. In such case it is enough to check the kernal's state just once at the beginning of this method to provide consistent behavior of the API without incurring overhead of `lock-based` guard methods.

Throws:
  `IllegalStateException` - Thrown in case when no kernal calls are allowed.

#### readLock

    void readLock()
                  throws IllegalStateException

Should be called on entering every kernal related call originated directly or indirectly via public API.

This method essentially acquires a read lock and multiple threads can enter the call without blocking.

Throws:
  `IllegalStateException` - Thrown in case when no kernal calls are allowed.
See Also:
  `readUnlock()`

#### readLockAnyway

    void readLockAnyway()

Same as `readLock()` but doesn't throw IllegalStateException if grid stop.

#### setState

    void setState(GridKernalState state)

Sets kernal state. Various kernal states drive the logic inside of the gateway.

Parameters:
  `state` - Kernal state to set.

#### getState

    GridKernalState getState()

Gets current kernal state.

Returns:
  Kernal state.

#### readUnlock

    void readUnlock()

Should be called on leaving every kernal related call originated directly or indirectly via public API.

This method essentially releases the internal read-lock acquired previously by `readLock()` method.

See Also:
  `readLock()`

#### writeLock

    void writeLock()

This method waits for all current calls to exit and blocks any further `readLock()` calls until `writeUnlock()` method is called.

This method essentially acquires the internal write lock.

#### writeUnlock

    void writeUnlock()

This method unblocks `writeLock()`.

This method essentially releases internal write lock previously acquired by `writeLock()` method.

#### addStopListener

    void addStopListener(Runnable lsnr)

Adds stop listener. Note that the identity set will be used to store listeners for performance reasons. Futures can register a listener to be notified when they need to be internally interrupted.

Parameters:
  `lsnr` - Listener to add.

#### removeStopListener

    void removeStopListener(Runnable lsnr)

Removes previously added stop listener.

Parameters:
  `lsnr` - Listener to remove.

#### userStackTrace

    String userStackTrace()

Gets user stack trace through the first call of grid public API.

#### tryWriteLock

    boolean tryWriteLock(long timeout)
                         throws InterruptedException

Parameters:
  `timeout` - Timeout.
Returns:
  `True` if write lock has been acquired.
Throws:
  `InterruptedException` - If interrupted.

2015 Copyright © Apache Software Foundation

Follow @ApacheIgnite

Ignite Fabric | : ver. 1.0.0
Release Date | : March 31 2015