11package no .nb .nna .veidemann .frontier .api ;
22
3- import com .google .common .util .concurrent .ThreadFactoryBuilder ;
4- import io .grpc .stub .ServerCallStreamObserver ;
53import no .nb .nna .veidemann .frontier .db .CrawlQueueManager ;
64import no .nb .nna .veidemann .frontier .worker .Frontier ;
75import org .slf4j .Logger ;
86import org .slf4j .LoggerFactory ;
97
10- import java .util .concurrent .Executors ;
11- import java .util .concurrent .ScheduledExecutorService ;
12- import java .util .concurrent .ScheduledFuture ;
138import java .util .concurrent .TimeUnit ;
149import java .util .concurrent .atomic .AtomicBoolean ;
1510import java .util .concurrent .atomic .AtomicInteger ;
@@ -21,30 +16,17 @@ public class Context {
2116 private static final Logger LOG = LoggerFactory .getLogger (Context .class );
2217 private final AtomicBoolean isShutdown ;
2318 private final AtomicInteger amountOfActiveObserversCounter ;
24- private final AtomicInteger amountOfActivePageFetchesCounter ;
2519 private final Frontier frontier ;
2620
2721 static final Lock lock = new ReentrantLock ();
2822 static final Condition notTerminated = lock .newCondition ();
2923
30- static final ScheduledExecutorService timoutThread = Executors .newScheduledThreadPool (
31- 1 , new ThreadFactoryBuilder ().setNameFormat ("fetch-timeout-%d" ).build ());
32-
3324 public Context (Frontier frontier ) {
3425 isShutdown = new AtomicBoolean (false );
3526 amountOfActiveObserversCounter = new AtomicInteger (0 );
36- amountOfActivePageFetchesCounter = new AtomicInteger (0 );
3727 this .frontier = frontier ;
3828 }
3929
40- public RequestContext newRequestContext (ServerCallStreamObserver responseObserver ) {
41- return new RequestContext (frontier , responseObserver );
42- }
43-
44- public boolean isCancelled () {
45- return isShutdown .get ();
46- }
47-
4830 public void shutdown () {
4931 isShutdown .set (true );
5032 if (amountOfActiveObserversCounter .get () <= 0 ) {
@@ -95,66 +77,25 @@ public Frontier getFrontier() {
9577 return frontier ;
9678 }
9779
98- public int getActivePageFetchCount () {
99- return amountOfActivePageFetchesCounter .get ();
100- }
101-
10280 public CrawlQueueManager getCrawlQueueManager () {
10381 return frontier .getCrawlQueueManager ();
10482 }
10583
106- public class RequestContext extends Context {
107- private final ServerCallStreamObserver responseObserver ;
108- private final AtomicBoolean observerCompleted = new AtomicBoolean (false );
109- private final AtomicBoolean pageFetchStarted = new AtomicBoolean (false );
110- private final AtomicBoolean fetchReturned = new AtomicBoolean (false );
111- private ScheduledFuture <Void > timeout ;
112-
113- private RequestContext (Frontier frontier , ServerCallStreamObserver responseObserver ) {
114- super (frontier );
115- this .responseObserver = responseObserver ;
116- amountOfActiveObserversCounter .incrementAndGet ();
117- LOG .trace ("Client connected. Currently active clients: {}" , amountOfActiveObserversCounter .get ());
118- }
119-
120- public boolean isCancelled () {
121- return isShutdown .get () || responseObserver .isCancelled ();
122- }
123-
124- public ServerCallStreamObserver getResponseObserver () {
125- return responseObserver ;
126- }
127-
128- public void startPageFetch () {
129- if (pageFetchStarted .compareAndSet (false , true )) {
130- amountOfActivePageFetchesCounter .incrementAndGet ();
131- LOG .trace ("Page fetch started. Currently active page fetches: {}" , amountOfActivePageFetchesCounter .get ());
132- }
133- }
134-
135- public void setObserverCompleted () {
136- if (observerCompleted .compareAndSet (false , true )) {
137- if (pageFetchStarted .get ()) {
138- amountOfActivePageFetchesCounter .decrementAndGet ();
139- }
140- if (amountOfActiveObserversCounter .decrementAndGet () <= 0 && isShutdown .get ()) {
141- lock .lock ();
142- try {
143- notTerminated .signalAll ();
144- } finally {
145- lock .unlock ();
146- }
147- }
148- LOG .trace ("Client disconnected. Currently active clients: {}. Currently active page fetches: {}" ,
149- amountOfActiveObserversCounter .get (), amountOfActivePageFetchesCounter .get ());
150- }
151- }
84+ public void startPageComplete () {
85+ amountOfActiveObserversCounter .incrementAndGet ();
86+ LOG .trace ("Client connected. Currently active clients: {}" , amountOfActiveObserversCounter .get ());
87+ }
15288
153- public void setFetchCompleted () {
154- if (timeout != null ) {
155- // Stop the timeout cancel handler
156- timeout .cancel (false );
89+ public void setObserverCompleted () {
90+ if (amountOfActiveObserversCounter .decrementAndGet () <= 0 && isShutdown .get ()) {
91+ lock .lock ();
92+ try {
93+ notTerminated .signalAll ();
94+ } finally {
95+ lock .unlock ();
15796 }
15897 }
98+ LOG .trace ("Client disconnected. Currently active clients: {}." ,
99+ amountOfActiveObserversCounter .get ());
159100 }
160101}
0 commit comments