My favorites | Sign in
Project Home Downloads Wiki Issues Source
Checkout   Browse   Changes    
 
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/*
* Copyright 2011 LMAX Ltd.
*
* 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 com.lmax.disruptor;

import java.util.concurrent.TimeUnit;

/**
* Coordination barrier for tracking the cursor for publishers and sequence of
* dependent {@link EventProcessor}s for processing a data structure
*/
public interface SequenceBarrier
{
/**
* Wait for the given sequence to be available for consumption.
*
* @param sequence to wait for
* @return the sequence up to which is available
* @throws AlertException if a status change has occurred for the Disruptor
* @throws InterruptedException if the thread needs awaking on a condition variable.
*/
long waitFor(long sequence) throws AlertException, InterruptedException;

/**
* Wait for the given sequence to be available for consumption with a time out.
*
* @param sequence to wait for
* @param timeout value
* @param units for the timeout value
* @return the sequence up to which is available
* @throws AlertException if a status change has occurred for the Disruptor
* @throws InterruptedException if the thread needs awaking on a condition variable.
*/
long waitFor(long sequence, long timeout, TimeUnit units) throws AlertException, InterruptedException;

/**
* Delegate a call to the {@link Sequencer#getCursor()}
*
* @return value of the cursor for entries that have been published.
*/
long getCursor();

/**
* The current alert status for the barrier.
*
* @return true if in alert otherwise false.
*/
boolean isAlerted();

/**
* Alert the {@link EventProcessor}s of a status change and stay in this status until cleared.
*/
void alert();

/**
* Clear the current alert status.
*/
void clearAlert();

/**
* Check if an alert has been raised and throw an {@link AlertException} if it has.
*
* @throws AlertException if alert has been raised.
*/
void checkAlert() throws AlertException;
}

Change log

r409 by mjpt777 on Sep 16, 2011   Diff
Apply DRY principle to alert checking.
Go to: 
Project members, sign in to write a code review

Older revisions

r341 by mjpt777 on Sep 5, 2011   Diff
Introduced Sequencer.
r332 by mjpt777 on Sep 5, 2011   Diff
DependencyBarrier to SequenceBarrier
name change.
r250 by mjpt777 on Aug 11, 2011   Diff
Removed the indirection layers for
sequence tracking which should give a
performance improvement to real world
applications.  All sequences are now
tracked without using any class that
...
All revisions of this file

File info

Size: 2569 bytes, 78 lines
Powered by Google Project Hosting