-
Notifications
You must be signed in to change notification settings - Fork 5
/
LockManager.java
30 lines (25 loc) · 1.06 KB
/
LockManager.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package io.jes.lock;
import javax.annotation.Nonnull;
/**
* Lock manager controls {@link io.jes.reactors.Projector}/{@literal Sagas} {@link io.jes.JEventStore} tailing in
* clustered environment. (To avoid situations when multiple services read the same offset from
* {@link io.jes.JEventStore} and apply duplicate changes concurrently).
*
* <p>Note: there no any reentrancy guarantee by contract. Different implementations may or may not behave as reentrant.
*/
public interface LockManager {
/**
* Executes {@code action} in shared read mode, all other clients can perform read operations.
*
* @param key key to obtain lock instance.
* @param action action to perform.
*/
void doProtectedRead(@Nonnull String key, @Nonnull Runnable action);
/**
* Executes {@code action} in exclusive write mode, all other clients wait until this action completes.
*
* @param key key to obtain lock instance.
* @param action action to perform.
*/
void doProtectedWrite(@Nonnull String key, @Nonnull Runnable action);
}