34
34
import java .util .concurrent .atomic .AtomicBoolean ;
35
35
import java .util .concurrent .atomic .AtomicLong ;
36
36
import org .reactivestreams .Publisher ;
37
- import org .reactivestreams .Subscriber ;
38
37
import org .reactivestreams .Subscription ;
39
38
import org .slf4j .Logger ;
40
39
import org .slf4j .LoggerFactory ;
41
40
import reactor .core .CoreSubscriber ;
42
41
import reactor .core .publisher .Flux ;
43
42
import reactor .core .publisher .Mono ;
44
43
import reactor .core .publisher .MonoProcessor ;
44
+ import reactor .core .publisher .Operators ;
45
+ import reactor .util .context .Context ;
45
46
import reactor .util .retry .Retry ;
46
47
47
48
/**
@@ -667,26 +668,28 @@ private class WeightedSocket implements LoadBalancerSocketMetrics, RSocket {
667
668
@ Override
668
669
public Mono <Payload > requestResponse (Payload payload ) {
669
670
return rSocketMono .flatMap (
670
- source -> {
671
- return Mono .from (
672
- subscriber ->
673
- source
674
- .requestResponse (payload )
675
- .subscribe (new LatencySubscriber <>(subscriber , this )));
676
- });
671
+ source ->
672
+ Mono .from (
673
+ subscriber ->
674
+ source
675
+ .requestResponse (payload )
676
+ .subscribe (
677
+ new LatencySubscriber <>(
678
+ Operators .toCoreSubscriber (subscriber ), this ))));
677
679
}
678
680
679
681
@ Override
680
682
public Flux <Payload > requestStream (Payload payload ) {
681
683
682
684
return rSocketMono .flatMapMany (
683
- source -> {
684
- return Flux .from (
685
- subscriber ->
686
- source
687
- .requestStream (payload )
688
- .subscribe (new CountingSubscriber <>(subscriber , this )));
689
- });
685
+ source ->
686
+ Flux .from (
687
+ subscriber ->
688
+ source
689
+ .requestStream (payload )
690
+ .subscribe (
691
+ new CountingSubscriber <>(
692
+ Operators .toCoreSubscriber (subscriber ), this ))));
690
693
}
691
694
692
695
@ Override
@@ -698,7 +701,9 @@ public Mono<Void> fireAndForget(Payload payload) {
698
701
subscriber ->
699
702
source
700
703
.fireAndForget (payload )
701
- .subscribe (new CountingSubscriber <>(subscriber , this )));
704
+ .subscribe (
705
+ new CountingSubscriber <>(
706
+ Operators .toCoreSubscriber (subscriber ), this )));
702
707
});
703
708
}
704
709
@@ -710,21 +715,24 @@ public Mono<Void> metadataPush(Payload payload) {
710
715
subscriber ->
711
716
source
712
717
.metadataPush (payload )
713
- .subscribe (new CountingSubscriber <>(subscriber , this )));
718
+ .subscribe (
719
+ new CountingSubscriber <>(
720
+ Operators .toCoreSubscriber (subscriber ), this )));
714
721
});
715
722
}
716
723
717
724
@ Override
718
725
public Flux <Payload > requestChannel (Publisher <Payload > payloads ) {
719
726
720
727
return rSocketMono .flatMapMany (
721
- source -> {
722
- return Flux .from (
723
- subscriber ->
724
- source
725
- .requestChannel (payloads )
726
- .subscribe (new CountingSubscriber <>(subscriber , this )));
727
- });
728
+ source ->
729
+ Flux .from (
730
+ subscriber ->
731
+ source
732
+ .requestChannel (payloads )
733
+ .subscribe (
734
+ new CountingSubscriber <>(
735
+ Operators .toCoreSubscriber (subscriber ), this ))));
728
736
}
729
737
730
738
synchronized double getPredictedLatency () {
@@ -867,18 +875,23 @@ public long lastTimeUsedMillis() {
867
875
* Subscriber wrapper used for request/response interaction model, measure and collect latency
868
876
* information.
869
877
*/
870
- private class LatencySubscriber <U > implements Subscriber <U > {
871
- private final Subscriber <U > child ;
878
+ private class LatencySubscriber <U > implements CoreSubscriber <U > {
879
+ private final CoreSubscriber <U > child ;
872
880
private final WeightedSocket socket ;
873
881
private final AtomicBoolean done ;
874
882
private long start ;
875
883
876
- LatencySubscriber (Subscriber <U > child , WeightedSocket socket ) {
884
+ LatencySubscriber (CoreSubscriber <U > child , WeightedSocket socket ) {
877
885
this .child = child ;
878
886
this .socket = socket ;
879
887
this .done = new AtomicBoolean (false );
880
888
}
881
889
890
+ @ Override
891
+ public Context currentContext () {
892
+ return child .currentContext ();
893
+ }
894
+
882
895
@ Override
883
896
public void onSubscribe (Subscription s ) {
884
897
start = incr ();
@@ -931,15 +944,20 @@ public void onComplete() {
931
944
* Subscriber wrapper used for stream like interaction model, it only counts the number of
932
945
* active streams
933
946
*/
934
- private class CountingSubscriber <U > implements Subscriber <U > {
935
- private final Subscriber <U > child ;
947
+ private class CountingSubscriber <U > implements CoreSubscriber <U > {
948
+ private final CoreSubscriber <U > child ;
936
949
private final WeightedSocket socket ;
937
950
938
- CountingSubscriber (Subscriber <U > child , WeightedSocket socket ) {
951
+ CountingSubscriber (CoreSubscriber <U > child , WeightedSocket socket ) {
939
952
this .child = child ;
940
953
this .socket = socket ;
941
954
}
942
955
956
+ @ Override
957
+ public Context currentContext () {
958
+ return child .currentContext ();
959
+ }
960
+
943
961
@ Override
944
962
public void onSubscribe (Subscription s ) {
945
963
socket .pendingStreams .incrementAndGet ();
0 commit comments