@@ -208,22 +208,23 @@ private Mono<Void> handleFireAndForget(Payload payload) {
208
208
209
209
final AtomicBoolean once = new AtomicBoolean ();
210
210
211
- return Mono .defer (
212
- () -> {
213
- if (once .getAndSet (true )) {
214
- return Mono .error (
215
- new IllegalStateException ("FireAndForgetMono allows only a single subscriber" ));
216
- }
211
+ return Mono .< Void > defer (
212
+ () -> {
213
+ if (once .getAndSet (true )) {
214
+ return Mono .error (
215
+ new IllegalStateException ("FireAndForgetMono allows only a single subscriber" ));
216
+ }
217
217
218
- final int streamId = streamIdSupplier .nextStreamId (receivers );
219
- final ByteBuf requestFrame =
220
- RequestFireAndForgetFrameFlyweight .encodeReleasingPayload (
221
- allocator , streamId , payload );
218
+ final int streamId = streamIdSupplier .nextStreamId (receivers );
219
+ final ByteBuf requestFrame =
220
+ RequestFireAndForgetFrameFlyweight .encodeReleasingPayload (
221
+ allocator , streamId , payload );
222
222
223
- sendProcessor .onNext (requestFrame );
223
+ sendProcessor .onNext (requestFrame );
224
224
225
- return Mono .empty ();
226
- });
225
+ return Mono .empty ();
226
+ })
227
+ .subscribeOn (connection .eventLoopScheduler ());
227
228
}
228
229
229
230
private Mono <Payload > handleRequestResponse (final Payload payload ) {
@@ -284,6 +285,7 @@ public void hookOnTerminal(SignalType signalType) {
284
285
receivers .remove (streamId , receiver );
285
286
}
286
287
}))
288
+ .subscribeOn (connection .eventLoopScheduler ())
287
289
.doOnDiscard (ReferenceCounted .class , DROPPED_ELEMENTS_CONSUMER );
288
290
});
289
291
}
@@ -356,6 +358,7 @@ void hookOnTerminal(SignalType signalType) {
356
358
receivers .remove (streamId );
357
359
}
358
360
}))
361
+ .subscribeOn (connection .eventLoopScheduler (), false )
359
362
.doOnDiscard (ReferenceCounted .class , DROPPED_ELEMENTS_CONSUMER );
360
363
});
361
364
}
@@ -392,120 +395,125 @@ private Flux<? extends Payload> handleChannel(Payload initialPayload, Flux<Paylo
392
395
393
396
final UnicastProcessor <Payload > receiver = UnicastProcessor .create ();
394
397
395
- return receiver .transform (
396
- Operators .<Payload , Payload >lift (
397
- (s , actual ) ->
398
- new RequestOperator (actual ) {
398
+ return receiver
399
+ .transform (
400
+ Operators .<Payload , Payload >lift (
401
+ (s , actual ) ->
402
+ new RequestOperator (actual ) {
399
403
400
- final BaseSubscriber <Payload > upstreamSubscriber =
401
- new BaseSubscriber <Payload >() {
404
+ final BaseSubscriber <Payload > upstreamSubscriber =
405
+ new BaseSubscriber <Payload >() {
402
406
403
- boolean first = true ;
407
+ boolean first = true ;
404
408
405
- @ Override
406
- protected void hookOnSubscribe (Subscription subscription ) {
407
- // noops
408
- }
409
+ @ Override
410
+ protected void hookOnSubscribe (Subscription subscription ) {
411
+ // noops
412
+ }
409
413
410
- @ Override
411
- protected void hookOnNext (Payload payload ) {
412
- if (first ) {
413
- // need to skip first since we have already sent it
414
- // no need to release it since it was released earlier on the request
415
- // establishment
416
- // phase
417
- first = false ;
418
- request (1 );
419
- return ;
420
- }
421
- if (!PayloadValidationUtils .isValid (mtu , payload )) {
422
- payload .release ();
423
- cancel ();
424
- final IllegalArgumentException t =
425
- new IllegalArgumentException (INVALID_PAYLOAD_ERROR_MESSAGE );
426
- errorConsumer .accept (t );
427
- // no need to send any errors.
428
- sendProcessor .onNext (CancelFrameFlyweight .encode (allocator , streamId ));
429
- receiver .onError (t );
430
- return ;
431
- }
432
- final ByteBuf frame =
433
- PayloadFrameFlyweight .encodeNextReleasingPayload (
434
- allocator , streamId , payload );
435
-
436
- sendProcessor .onNext (frame );
437
- }
414
+ @ Override
415
+ protected void hookOnNext (Payload payload ) {
416
+ if (first ) {
417
+ // need to skip first since we have already sent it
418
+ // no need to release it since it was released earlier on the
419
+ // request
420
+ // establishment
421
+ // phase
422
+ first = false ;
423
+ request (1 );
424
+ return ;
425
+ }
426
+ if (!PayloadValidationUtils .isValid (mtu , payload )) {
427
+ payload .release ();
428
+ cancel ();
429
+ final IllegalArgumentException t =
430
+ new IllegalArgumentException (INVALID_PAYLOAD_ERROR_MESSAGE );
431
+ errorConsumer .accept (t );
432
+ // no need to send any errors.
433
+ sendProcessor .onNext (
434
+ CancelFrameFlyweight .encode (allocator , streamId ));
435
+ receiver .onError (t );
436
+ return ;
437
+ }
438
+ final ByteBuf frame =
439
+ PayloadFrameFlyweight .encodeNextReleasingPayload (
440
+ allocator , streamId , payload );
441
+
442
+ sendProcessor .onNext (frame );
443
+ }
444
+
445
+ @ Override
446
+ protected void hookOnComplete () {
447
+ ByteBuf frame =
448
+ PayloadFrameFlyweight .encodeComplete (allocator , streamId );
449
+ sendProcessor .onNext (frame );
450
+ }
451
+
452
+ @ Override
453
+ protected void hookOnError (Throwable t ) {
454
+ ByteBuf frame = ErrorFrameFlyweight .encode (allocator , streamId , t );
455
+ sendProcessor .onNext (frame );
456
+ receiver .onError (t );
457
+ }
438
458
439
- @ Override
440
- protected void hookOnComplete () {
441
- ByteBuf frame = PayloadFrameFlyweight .encodeComplete (allocator , streamId );
442
- sendProcessor .onNext (frame );
459
+ @ Override
460
+ protected void hookFinally (SignalType type ) {
461
+ senders .remove (streamId , this );
462
+ }
463
+ };
464
+
465
+ @ Override
466
+ void hookOnFirstRequest (long n ) {
467
+ final int streamId = streamIdSupplier .nextStreamId (receivers );
468
+ this .streamId = streamId ;
469
+
470
+ final ByteBuf frame =
471
+ RequestChannelFrameFlyweight .encodeReleasingPayload (
472
+ allocator , streamId , false , n , initialPayload );
473
+
474
+ senders .put (streamId , upstreamSubscriber );
475
+ receivers .put (streamId , receiver );
476
+
477
+ inboundFlux
478
+ .limitRate (Queues .SMALL_BUFFER_SIZE )
479
+ .doOnDiscard (ReferenceCounted .class , DROPPED_ELEMENTS_CONSUMER )
480
+ .subscribe (upstreamSubscriber );
481
+
482
+ sendProcessor .onNext (frame );
483
+ }
484
+
485
+ @ Override
486
+ void hookOnRemainingRequests (long n ) {
487
+ if (receiver .isDisposed ()) {
488
+ return ;
443
489
}
444
490
445
- @ Override
446
- protected void hookOnError (Throwable t ) {
447
- ByteBuf frame = ErrorFrameFlyweight .encode (allocator , streamId , t );
448
- sendProcessor .onNext (frame );
449
- receiver .onError (t );
491
+ sendProcessor .onNext (RequestNFrameFlyweight .encode (allocator , streamId , n ));
492
+ }
493
+
494
+ @ Override
495
+ void hookOnCancel () {
496
+ senders .remove (streamId , upstreamSubscriber );
497
+ if (receivers .remove (streamId , receiver )) {
498
+ sendProcessor .onNext (CancelFrameFlyweight .encode (allocator , streamId ));
450
499
}
500
+ }
451
501
452
- @ Override
453
- protected void hookFinally (SignalType type ) {
454
- senders .remove (streamId , this );
502
+ @ Override
503
+ void hookOnTerminal (SignalType signalType ) {
504
+ if (signalType == SignalType .ON_ERROR ) {
505
+ upstreamSubscriber .cancel ();
455
506
}
456
- };
457
-
458
- @ Override
459
- void hookOnFirstRequest (long n ) {
460
- final int streamId = streamIdSupplier .nextStreamId (receivers );
461
- this .streamId = streamId ;
462
-
463
- final ByteBuf frame =
464
- RequestChannelFrameFlyweight .encodeReleasingPayload (
465
- allocator , streamId , false , n , initialPayload );
466
-
467
- senders .put (streamId , upstreamSubscriber );
468
- receivers .put (streamId , receiver );
469
-
470
- inboundFlux
471
- .limitRate (Queues .SMALL_BUFFER_SIZE )
472
- .doOnDiscard (ReferenceCounted .class , DROPPED_ELEMENTS_CONSUMER )
473
- .subscribe (upstreamSubscriber );
474
-
475
- sendProcessor .onNext (frame );
476
- }
477
-
478
- @ Override
479
- void hookOnRemainingRequests (long n ) {
480
- if (receiver .isDisposed ()) {
481
- return ;
482
- }
483
-
484
- sendProcessor .onNext (RequestNFrameFlyweight .encode (allocator , streamId , n ));
485
- }
486
-
487
- @ Override
488
- void hookOnCancel () {
489
- senders .remove (streamId , upstreamSubscriber );
490
- if (receivers .remove (streamId , receiver )) {
491
- sendProcessor .onNext (CancelFrameFlyweight .encode (allocator , streamId ));
492
- }
493
- }
494
-
495
- @ Override
496
- void hookOnTerminal (SignalType signalType ) {
497
- if (signalType == SignalType .ON_ERROR ) {
498
- upstreamSubscriber .cancel ();
499
- }
500
- receivers .remove (streamId , receiver );
501
- }
502
-
503
- @ Override
504
- public void cancel () {
505
- upstreamSubscriber .cancel ();
506
- super .cancel ();
507
- }
508
- }));
507
+ receivers .remove (streamId , receiver );
508
+ }
509
+
510
+ @ Override
511
+ public void cancel () {
512
+ upstreamSubscriber .cancel ();
513
+ super .cancel ();
514
+ }
515
+ }))
516
+ .subscribeOn (connection .eventLoopScheduler (), false );
509
517
}
510
518
511
519
private Mono <Void > handleMetadataPush (Payload payload ) {
0 commit comments