Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Spring Cloud Gateway's Service Discovery with Spring Cloud Kubernetes not working in Greenwich.M3? #282

Closed
Alos opened this issue Dec 1, 2018 · 42 comments
Labels
Milestone

Comments

@Alos
Copy link

Alos commented Dec 1, 2018

I've been trying to get Spring Cloud Gateway working with Spring Security and so I've moved to Greenwitch M3. I've managed to get security working but now I'm unable to get the gateway to correctly pick up all my downstream services.

Visiting one of my downstream services endpoints gets me a 500 error. No exceptions are thrown on my logs.

I've tried to printout all the services that the DiscoveryClient finds like so:

@Bean
CommandLineRunner discoveryClientRunner(DiscoveryClient client) {
	return new CommandLineRunner() {
	    @Override
	    public void run(String... args) throws Exception {
		System.out.println("Available Services:");
		client.getServices().forEach(System.out::println);
	    }
	};
}

I get a nice list of all my services.

For debugging purposes I've enabled /actuator/gateway/routes and when I visit it I get a:

There was an unexpected error (type=Internal Server Error, status=500).

No stack traces on my logs.

@Alos
Copy link
Author

Alos commented Dec 1, 2018

Is there a way I can get more debugging info to find out whats wrong?

@Alos
Copy link
Author

Alos commented Dec 3, 2018

I've done a few tests with the same gateway:

Works perfectly fine:

  • Spring Boot 2.0.6.RELEASE
  • Spring Cloud Finchley.SR1
  • Spring Cloud Kubernetes 0.3.0.RELEASE

Does not work:

  • Spring Boot 2.1.0.RELEASE
  • Spring Cloud Greenwich.M3
  • Spring Cloud Kubernetes 1.0.0.M2 (default from Greenwich.M3's dependencies)

So maybe its the version of Spring Cloud Kubernetes, I tried replacing it with the working version:

Does not work:

  • Spring Boot 2.1.0.RELEASE
  • Spring Cloud Greenwich.M3
  • Spring Cloud Kubernetes 0.3.0.RELEASE (Manually specified)

This is the code for the gateway in question.

@jgrandja
Copy link

jgrandja commented Dec 3, 2018

@spencergibb @ryanjbaxter

@rwinch and I have been working with @Alos on getting the new OAuth support integrated with Spring Cloud Gateway. We've made some good progress thus far but @Alos is currently blocked with this issue. Can you please take a look when you have a moment. Much appreciated.

@spencergibb
Copy link
Member

spring cloud kubernetes 0.3.x only works with boot 2.0.x and Finchley.X

@spencergibb spencergibb transferred this issue from spring-cloud/spring-cloud-gateway Dec 3, 2018
@Alos
Copy link
Author

Alos commented Dec 3, 2018

I think that Greenwich.M3 uses 1.0.0.M2 by default that also does not work for me.

@spencergibb
Copy link
Member

@geoand @salaboy or @iocanel can any of you take a glance at this. My machine took some downtime today trying to install virtualbox on ubuntu 18.10 trying to get minikube running locally.

@geoand
Copy link
Contributor

geoand commented Dec 4, 2018

I'll take a look in a couple hours 😄

@geoand
Copy link
Contributor

geoand commented Dec 4, 2018

@Alos Have you made any changes to your sample?
I am asking because I just ran it on my machine it seemed to be working fine.

@salaboy
Copy link
Contributor

salaboy commented Dec 4, 2018

Hi @Alos I got it working here: https://github.com/salaboy/s1p_gateway with 0.3.0.RELEASE / SB 2.0 that was for S1P. I bet (and it is just a guess, based on other projects that I am currently migrating) that the problem is Spring Boot 2.1 related and something has changed that is causing that issue.

I will need to move my examples to Spring Boot 2.1 anyways.. so I am happy to help to figure out what is going wrong.

@salaboy
Copy link
Contributor

salaboy commented Dec 4, 2018

@jgrandja I am also really interested in OAuth2 integration it will be really nice to have an example with SCK and OAuth2, can you share your findings on that front?

@salaboy
Copy link
Contributor

salaboy commented Dec 4, 2018

@Alos @jgrandja I am currently running the app I can see the 500 error:

2018-12-04 09:01:56.385 TRACE 13227 --- [ctor-http-nio-2] org.springframework.web.HttpLogging      : [188cd3b4] Writing "<html><body><h1>Whitelabel Error Page</h1><p>This application has no configured error view, so you are seeing this as a fallback.</p><div id='created'>Tue Dec 04 09:01:56 GMT 2018</div><div>There was an unexpected error (type=Internal Server Error, status=500).</div><div>Failure executing: GET at: https://35.204.12.205/api/v1/services. Message: Unauthorized! Token may have expired! Please log-in again. Unauthorized.</div></body></html>"
2018-12-04 09:01:56.387 TRACE 13227 --- [ctor-http-nio-2] o.s.w.s.adapter.HttpWebHandlerAdapter    : [188cd3b4] Completed 500 INTERNAL_SERVER_ERROR, headers={masked}
2018-12-04 09:01:56.387 TRACE 13227 --- [ctor-http-nio-2] org.springframework.web.HttpLogging      : [188cd3b4] Handling completed
2018-12-04 09:01:56.416 TRACE 13227 --- [ctor-http-nio-2] o.s.w.s.adapter.HttpWebHandlerAdapter    : [188cd3b4] HTTP GET "/favicon.ico", headers={masked}
2018-12-04 09:01:56.416 TRACE 13227 --- [ctor-http-nio-2] o.s.c.g.f.WeightCalculatorWebFilter      : Weights attr: {}
2018-12-04 09:01:56.424 TRACE 13227 --- [ctor-http-nio-2] o.s.w.r.function.server.RouterFunctions  : [188cd3b4] Matched org.springframework.boot.autoconfigure.web.reactive.error.DefaultErrorWebExceptionHandler$$Lambda$657/881468465@2798a70e
2018-12-04 09:01:56.427 DEBUG 13227 --- [ctor-http-nio-2] org.springframework.web.HttpLogging      : [188cd3b4] Resolved [KubernetesClientException: Failure executing: GET at: https://35.204.12.205/api/v1/services. Message: Unauthorized! Token may have expired! Please log-in again. Unauthorized.] for HTTP GET /favicon.ico
2018-12-04 09:01:56.427 TRACE 13227 --- [ctor-http-nio-2] org.springframework.web.HttpLogging      : [188cd3b4] Writing "<html><body><h1>Whitelabel Error Page</h1><p>This application has no configured error view, so you are seeing this as a fallback.</p><div id='created'>Tue Dec 04 09:01:56 GMT 2018</div><div>There was an unexpected error (type=Internal Server Error, status=500).</div><div>Failure executing: GET at: https://35.204.12.205/api/v1/services. Message: Unauthorized! Token may have expired! Please log-in again. Unauthorized.</div></body></html>"
2018-12-04 09:01:56.430 TRACE 13227 --- [ctor-http-nio-2] o.s.w.s.adapter.HttpWebHandlerAdapter    : [188cd3b4] Completed 500 INTERNAL_SERVER_ERROR, headers={masked}
2018-12-04 09:01:56.430 TRACE 13227 --- [ctor-http-nio-2] org.springframework.web.HttpLogging      : [188cd3b4] Handling completed

But it seems to be related with OAuth2 . Notice that I am running the app in an environment where I have a kubernetes context configured against a real cluster. (Minikube will give you more troubles than solutions, at least in my experience)

@Alos
Copy link
Author

Alos commented Dec 4, 2018

Hello!

So the https://35.204.12.205/api/v1/services error is your local cluster trying to talk to the K8 API to get the list of services. I have the gateway and a simple dog-service running in a cluster in GKE where the gateway CAN talk to K8 and get a list of services. The gateway runs and compiles but fails to redirect to the downstream services. The /actuator/gateway/routes also fails.

@Alos
Copy link
Author

Alos commented Dec 4, 2018

@Alos Have you made any changes to your sample?
I am asking because I just ran it on my machine it seemed to be working fine.

The gateway runs fine, it just does not redirect to the downstream services. The /actuator/gateway/routes also fails

@spencergibb
Copy link
Member

spencergibb commented Dec 4, 2018

Setting

server.error.include-stacktrace=ALWAYS

revealed

Tue Dec 04 23:07:18 UTC 2018
There was an unexpected error (type=Internal Server Error, status=500).
java.lang.NullPointerException
 at java.util.HashMap.putMapEntries(HashMap.java:501)
 at java.util.HashMap.putAll(HashMap.java:785)
 at org.springframework.cloud.kubernetes.discovery.KubernetesDiscoveryClient.getInstances(KubernetesDiscoveryClient.java:90)
 at org.springframework.cloud.client.discovery.composite.CompositeDiscoveryClient.getInstances(CompositeDiscoveryClient.java:53)
 at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.tryOnNext(FluxMapFuseable.java:301)
 at reactor.core.publisher.FluxIterable$IterableSubscriptionConditional.slowPath(FluxIterable.java:515)
 at reactor.core.publisher.FluxIterable$IterableSubscriptionConditional.request(FluxIterable.java:473)
 at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.request(FluxMapFuseable.java:346)
 at reactor.core.publisher.FluxFilterFuseable$FilterFuseableConditionalSubscriber.request(FluxFilterFuseable.java:404)
 at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.request(FluxMapFuseable.java:346)
 at reactor.core.publisher.FluxFilterFuseable$FilterFuseableSubscriber.request(FluxFilterFuseable.java:185)
 at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.request(FluxMapFuseable.java:162)
 at reactor.core.publisher.FluxFlatMap$FlatMapInner.onSubscribe(FluxFlatMap.java:933)
 at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onSubscribe(FluxMapFuseable.java:90)
 at reactor.core.publisher.FluxFilterFuseable$FilterFuseableSubscriber.onSubscribe(FluxFilterFuseable.java:82)
 at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.onSubscribe(FluxMapFuseable.java:255)
 at reactor.core.publisher.FluxFilterFuseable$FilterFuseableConditionalSubscriber.onSubscribe(FluxFilterFuseable.java:299)
 at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.onSubscribe(FluxMapFuseable.java:255)
 at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:135)
 at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:63)
 at reactor.core.publisher.FluxMapFuseable.subscribe(FluxMapFuseable.java:60)
 at reactor.core.publisher.FluxFilterFuseable.subscribe(FluxFilterFuseable.java:48)
 at reactor.core.publisher.FluxMapFuseable.subscribe(FluxMapFuseable.java:60)
 at reactor.core.publisher.FluxFilterFuseable.subscribe(FluxFilterFuseable.java:52)
 at reactor.core.publisher.FluxMapFuseable.subscribe(FluxMapFuseable.java:63)
 at reactor.core.publisher.Flux.subscribe(Flux.java:7734)
 at reactor.core.publisher.FluxFlatMap$FlatMapMain.onNext(FluxFlatMap.java:389)
 at reactor.core.publisher.FluxIterable$IterableSubscription.slowPath(FluxIterable.java:243)
 at reactor.core.publisher.FluxIterable$IterableSubscription.request(FluxIterable.java:201)
 at reactor.core.publisher.FluxFlatMap$FlatMapMain.onSubscribe(FluxFlatMap.java:335)
 at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:139)
 at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:63)
 at reactor.core.publisher.FluxFlatMap.subscribe(FluxFlatMap.java:97)
 at reactor.core.publisher.FluxMap.subscribe(FluxMap.java:62)
 at reactor.core.publisher.FluxMap.subscribe(FluxMap.java:62)
 at reactor.core.publisher.Flux.subscribe(Flux.java:7734)
 at reactor.core.publisher.FluxFlatMap$FlatMapMain.onNext(FluxFlatMap.java:389)
 at reactor.core.publisher.FluxIterable$IterableSubscription.slowPath(FluxIterable.java:243)
 at reactor.core.publisher.FluxIterable$IterableSubscription.request(FluxIterable.java:201)
 at reactor.core.publisher.FluxFlatMap$FlatMapMain.onSubscribe(FluxFlatMap.java:335)
 at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:139)
 at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:63)
 at reactor.core.publisher.FluxFlatMap.subscribe(FluxFlatMap.java:97)
 at reactor.core.publisher.MonoCollectList.subscribe(MonoCollectList.java:59)
 at reactor.core.publisher.MonoMapFuseable.subscribe(MonoMapFuseable.java:59)
 at reactor.core.publisher.MonoFlattenIterable.subscribe(MonoFlattenIterable.java:101)
 at reactor.core.publisher.FluxMaterialize.subscribe(FluxMaterialize.java:40)
 at reactor.core.publisher.MonoCollectList.subscribe(MonoCollectList.java:59)
 at reactor.core.publisher.MonoPeekFuseable.subscribe(MonoPeekFuseable.java:74)
 at reactor.core.publisher.MonoFlattenIterable.subscribe(MonoFlattenIterable.java:101)
 at reactor.core.publisher.FluxDematerialize.subscribe(FluxDematerialize.java:39)
 at reactor.core.publisher.FluxDefer.subscribe(FluxDefer.java:54)
 at reactor.core.publisher.FluxConcatMap.subscribe(FluxConcatMap.java:121)
 at reactor.core.publisher.MonoNext.subscribe(MonoNext.java:40)
 at reactor.core.publisher.MonoMap.subscribe(MonoMap.java:55)
 at reactor.core.publisher.MonoFlatMap.subscribe(MonoFlatMap.java:60)
 at reactor.core.publisher.MonoSwitchIfEmpty.subscribe(MonoSwitchIfEmpty.java:44)
 at reactor.core.publisher.MonoMap.subscribe(MonoMap.java:55)
 at reactor.core.publisher.Mono.subscribe(Mono.java:3590)
 at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.drain(FluxConcatMap.java:442)
 at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.onSubscribe(FluxConcatMap.java:212)
 at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:139)
 at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:63)
 at reactor.core.publisher.FluxConcatMap.subscribe(FluxConcatMap.java:121)
 at reactor.core.publisher.MonoNext.subscribe(MonoNext.java:40)
 at reactor.core.publisher.MonoSwitchIfEmpty.subscribe(MonoSwitchIfEmpty.java:44)
 at reactor.core.publisher.MonoFlatMap.subscribe(MonoFlatMap.java:60)
 at reactor.core.publisher.MonoFlatMap.subscribe(MonoFlatMap.java:60)
 at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
 at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
 at reactor.core.publisher.MonoPeekTerminal.subscribe(MonoPeekTerminal.java:61)
 at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:150)
 at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1476)
 at reactor.core.publisher.MonoZip$ZipCoordinator.signal(MonoZip.java:247)
 at reactor.core.publisher.MonoZip$ZipInner.onNext(MonoZip.java:329)
 at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:2041)
 at reactor.core.publisher.MonoZip$ZipInner.onSubscribe(MonoZip.java:318)
 at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:54)
 at reactor.core.publisher.Mono.subscribe(Mono.java:3590)
 at reactor.core.publisher.MonoZip.subscribe(MonoZip.java:128)
 at reactor.core.publisher.MonoFlatMap.subscribe(MonoFlatMap.java:60)
 at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
 at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
 at reactor.core.publisher.MonoPeekTerminal.subscribe(MonoPeekTerminal.java:61)
 at reactor.core.publisher.MonoPeekFuseable.subscribe(MonoPeekFuseable.java:74)
 at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
 at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
 at reactor.core.publisher.MonoOnErrorResume.subscribe(MonoOnErrorResume.java:44)
 at reactor.core.publisher.MonoOnErrorResume.subscribe(MonoOnErrorResume.java:44)
 at reactor.core.publisher.MonoPeekTerminal.subscribe(MonoPeekTerminal.java:61)
 at reactor.core.publisher.MonoOnErrorResume.subscribe(MonoOnErrorResume.java:44)
 at reactor.core.publisher.Mono.subscribe(Mono.java:3590)
 at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.drain(MonoIgnoreThen.java:172)
 at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:56)
 at reactor.core.publisher.MonoPeekFuseable.subscribe(MonoPeekFuseable.java:70)
 at reactor.core.publisher.MonoPeekTerminal.subscribe(MonoPeekTerminal.java:61)
 at reactor.netty.http.server.HttpServerHandle.onStateChange(HttpServerHandle.java:64)
 at reactor.netty.tcp.TcpServerBind$ChildObserver.onStateChange(TcpServerBind.java:226)
 at reactor.netty.http.server.HttpServerOperations.onInboundNext(HttpServerOperations.java:431)
 at reactor.netty.channel.ChannelOperationsHandler.channelRead(ChannelOperationsHandler.java:141)
 at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
 at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
 at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
 at reactor.netty.http.server.HttpTrafficHandler.channelRead(HttpTrafficHandler.java:159)
 at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
 at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
 at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
 at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:438)
 at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:310)
 at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:284)
 at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:253)
 at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
 at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
 at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
 at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1434)
 at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
 at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
 at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:965)
 at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:808)
 at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:410)
 at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:310)
 at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884)
 at java.lang.Thread.run(Thread.java:749)

@spencergibb
Copy link
Member

spencergibb commented Dec 4, 2018

@Alos after the snapshots build can you use them and set

logging.level.org.springframework.cloud.kubernetes=DEBUG

I added some logging 15546ff

@Alos
Copy link
Author

Alos commented Dec 4, 2018

Yep, please have a look @spencergibb


I  2018-12-04 23:53:18.612 TRACE 1 --- [-server-epoll-6] o.s.w.s.adapter.HttpWebHandlerAdapter    : [1581ac75] HTTP GET "/actuator/gateway/routes", headers={masked}
I  2018-12-04 23:53:18.646 TRACE 1 --- [-server-epoll-6] o.s.c.g.f.WeightCalculatorWebFilter      : Weights attr: {}
I  2018-12-04 23:53:18.816 DEBUG 1 --- [-server-epoll-6] o.s.w.r.r.m.a.ResponseBodyResultHandler  : Using 'application/json;charset=UTF-8;q=0.8' given [text/html, application/xhtml+xml, image/webp, image/apng, application/xml;q=0.9, */*;q=0.8] and supported [application/json;charset=UTF-8, application/*+json;charset=UTF-8, text/event-stream]
I  2018-12-04 23:53:18.818 DEBUG 1 --- [-server-epoll-6] o.s.w.r.r.m.a.ResponseBodyResultHandler  : [1581ac75] 0..1 [java.util.List<java.util.Map<java.lang.String, java.lang.Object>>]
I  2018-12-04 23:53:19.139 DEBUG 1 --- [-server-epoll-6] o.s.c.k.d.KubernetesDiscoveryClient      : Adding label metadata: null
I  2018-12-04 23:53:19.181 TRACE 1 --- [-server-epoll-6] o.s.w.r.function.server.RouterFunctions  : [1581ac75] Matched org.springframework.boot.autoconfigure.web.reactive.error.DefaultErrorWebExceptionHandler$$Lambda$687/199065528@2586bd18
I  2018-12-04 23:53:19.307 DEBUG 1 --- [-server-epoll-6] org.springframework.web.HttpLogging      : [1581ac75] Resolved [NullPointerException: null] for HTTP GET /actuator/gateway/routes
 

@geoand
Copy link
Contributor

geoand commented Dec 5, 2018

I can confirm that I am also seeing the same behavior when requesting /actuator/gateway/routes. I'll check it out

@salaboy
Copy link
Contributor

salaboy commented Dec 5, 2018

@Alos also I found the configuration that I used to avoid Ribbon Client Side load balancing:

spring:
  application.name: gateway
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true
          url-expression: "'http://'+serviceId"
      x-forwarded:
        prefixEnabled: true
    kubernetes:
      reload:
        enabled: true
        mode: polling
        period: 5000

@spencergibb spencergibb added this to the 2.1.0.RC1 milestone Dec 5, 2018
@spencergibb
Copy link
Member

There's a fix in @Alos, let us know if that doesn't help you.

@Alos
Copy link
Author

Alos commented Dec 5, 2018

I'll give it a shot

@Alos
Copy link
Author

Alos commented Dec 5, 2018

This indeed fix the NPE but it stills does not discover any services. Now I just get a 404.

To clarify, running on Greenwich.BUILD-SNAPSHOT removes the NPE but now the DiscoveryClient does not show any services when I print them out:

 @Bean
  CommandLineRunner discoveryClientRunner(DiscoveryClient client) {
    return new CommandLineRunner() {
      @Override
      public void run(String... args) throws Exception {
        System.out.println("Available Services:");
        client.getServices().forEach(System.out::println);
      }
    };
  }

I get:

2018-12-05 11:01:36.000 PST Available Services:

Going back to Greenwich.M3 has the NPE but I get a list of services:

I  Available Services:
I  dog-service
I  gateway-service
I  kubernetes
 

@spencergibb spencergibb reopened this Dec 5, 2018
@geoand
Copy link
Contributor

geoand commented Dec 5, 2018

Would it be possible for us to have access to the cluster you are using that causes the problem?

@Alos
Copy link
Author

Alos commented Dec 5, 2018

Yes, I need some information from you tho

@geoand
Copy link
Contributor

geoand commented Dec 5, 2018

Awesome, could you send me the info you need me to supply at <my_github_id> gmail address?

Thanks

@geoand
Copy link
Contributor

geoand commented Dec 7, 2018

I found something that might be the root cause of the problem for the snapshots:

It seems like #265 added @ConditionalOnBean to the KubernetesDiscoveryClientAutoConfiguration.discoveryClient

When enabling Spring Boot DEBUG logging level we see:

   KubernetesDiscoveryClientAutoConfiguration#discoveryClient:
      Did not match:
         - @ConditionalOnMissingBean (types: org.springframework.cloud.client.discovery.DiscoveryClient; SearchStrategy: all) found beans of type 'org.springframework.cloud.client.discovery.DiscoveryClient' compositeDiscoveryClient, simpleDiscoveryClient (OnBeanCondition)
      Matched:
         - @ConditionalOnProperty (spring.cloud.kubernetes.discovery.enabled) matched (OnPropertyCondition)

@spencergibb Seems like something we need to address, right?

@spencergibb
Copy link
Member

Yes, there's an auto configuration order problem

@geoand
Copy link
Contributor

geoand commented Dec 7, 2018

Has something similar been dealt with in any of the other Spring Cloud modules?

spencergibb added a commit that referenced this issue Dec 7, 2018
…Bean will function correctly.

Also removes extension from KubernetesDiscoveryProperties

See gh-282
@spencergibb
Copy link
Member

spencergibb commented Dec 7, 2018

Yes, the condition on #265 is wrong as well. Also the return type is too generic, it should return the full class type.

I've made some fixes here e36b703 and dcdc7c2 @geoand and @Alos care to try the latest snapshots (once built)?

@Alos
Copy link
Author

Alos commented Dec 7, 2018 via email

@geoand
Copy link
Contributor

geoand commented Dec 7, 2018

@spencergibb Will do, thanks!

@spencergibb
Copy link
Member

@Alos if it doesn't work can you give us the output of the /actuator/conditions endpoint (or run with --debug to get the report in the logs).

@Alos
Copy link
Author

Alos commented Dec 7, 2018

This works!

Both the actuator/gateway/routes and communicating to the downstream services works as expected! 👍

@spencergibb
Copy link
Member

Closed via e36b703 and dcdc7c2

@steventong
Copy link

I have the same problem.

I am using:

Spring Boot 2.1.0.RELEASE / 2.1.2.RELEASE
Spring Cloud Greenwich.RELEASE / Greenwich.BUILD-SNAPSHOT / Greenwich.M3

with webflux oauth2 resource server

here's a track from Spring boot 2.1.0.RELEASE and Greenwich.BUILD-SNAPSHOT

NullPointerException

org.springframework.cloud.kubernetes.discovery.KubernetesDiscoveryClient.getInstances(KubernetesDiscoveryClient.java:99)
at org.springframework.cloud.client.discovery.composite.CompositeDiscoveryClient.getInstances(CompositeDiscoveryClient.java:53)
at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.tryOnNext(FluxMapFuseable.java:301)
at reactor.core.publisher.FluxIterable$IterableSubscriptionConditional.slowPath(FluxIterable.java:515)
at reactor.core.publisher.FluxIterable$IterableSubscriptionConditional.request(FluxIterable.java:473)
at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.request(FluxMapFuseable.java:346)
at reactor.core.publisher.FluxFilterFuseable$FilterFuseableConditionalSubscriber.request(FluxFilterFuseable.java:404)
at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.request(FluxMapFuseable.java:346)
at reactor.core.publisher.FluxFilterFuseable$FilterFuseableSubscriber.request(FluxFilterFuseable.java:185)
at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.request(FluxMapFuseable.java:162)
at reactor.core.publisher.FluxFlatMap$FlatMapInner.onSubscribe(FluxFlatMap.java:933)
at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onSubscribe(FluxMapFuseable.java:90)
at reactor.core.publisher.FluxFilterFuseable$FilterFuseableSubscriber.onSubscribe(FluxFilterFuseable.java:82)
at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.onSubscribe(FluxMapFuseable.java:255)
at reactor.core.publisher.FluxFilterFuseable$FilterFuseableConditionalSubscriber.onSubscribe(FluxFilterFuseable.java:299)
at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.onSubscribe(FluxMapFuseable.java:255)
at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:135)
at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:63)
at reactor.core.publisher.FluxMapFuseable.subscribe(FluxMapFuseable.java:60)
at reactor.core.publisher.FluxFilterFuseable.subscribe(FluxFilterFuseable.java:48)
at reactor.core.publisher.FluxMapFuseable.subscribe(FluxMapFuseable.java:60)
at reactor.core.publisher.FluxFilterFuseable.subscribe(FluxFilterFuseable.java:52)
at reactor.core.publisher.FluxMapFuseable.subscribe(FluxMapFuseable.java:63)
at reactor.core.publisher.Flux.subscribe(Flux.java:7734)
at reactor.core.publisher.FluxFlatMap$FlatMapMain.onNext(FluxFlatMap.java:389)
at reactor.core.publisher.FluxIterable$IterableSubscription.slowPath(FluxIterable.java:243)
at reactor.core.publisher.FluxIterable$IterableSubscription.request(FluxIterable.java:201)
at reactor.core.publisher.FluxFlatMap$FlatMapMain.onSubscribe(FluxFlatMap.java:335)
at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:139)
at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:63)
at reactor.core.publisher.FluxFlatMap.subscribe(FluxFlatMap.java:97)
at reactor.core.publisher.FluxMap.subscribe(FluxMap.java:62)
at reactor.core.publisher.FluxMap.subscribe(FluxMap.java:62)
at reactor.core.publisher.Flux.subscribe(Flux.java:7734)
at reactor.core.publisher.FluxFlatMap$FlatMapMain.onNext(FluxFlatMap.java:389)
at reactor.core.publisher.FluxIterable$IterableSubscription.slowPath(FluxIterable.java:243)
at reactor.core.publisher.FluxIterable$IterableSubscription.request(FluxIterable.java:201)
at reactor.core.publisher.FluxFlatMap$FlatMapMain.onSubscribe(FluxFlatMap.java:335)
at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:139)
at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:63)
at reactor.core.publisher.FluxFlatMap.subscribe(FluxFlatMap.java:97)
at reactor.core.publisher.MonoCollectList.subscribe(MonoCollectList.java:59)
at reactor.core.publisher.MonoMapFuseable.subscribe(MonoMapFuseable.java:59)
at reactor.core.publisher.MonoFlattenIterable.subscribe(MonoFlattenIterable.java:101)
at reactor.core.publisher.FluxMaterialize.subscribe(FluxMaterialize.java:40)
at reactor.core.publisher.MonoCollectList.subscribe(MonoCollectList.java:59)
at reactor.core.publisher.MonoPeekFuseable.subscribe(MonoPeekFuseable.java:74)
at reactor.core.publisher.MonoFlattenIterable.subscribe(MonoFlattenIterable.java:101)
at reactor.core.publisher.FluxDematerialize.subscribe(FluxDematerialize.java:39)
at reactor.core.publisher.FluxDefer.subscribe(FluxDefer.java:54)
at reactor.core.publisher.FluxConcatMap.subscribe(FluxConcatMap.java:121)
at reactor.core.publisher.MonoNext.subscribe(MonoNext.java:40)
at reactor.core.publisher.MonoMap.subscribe(MonoMap.java:55)
at reactor.core.publisher.MonoFlatMap.subscribe(MonoFlatMap.java:60)
at reactor.core.publisher.MonoSwitchIfEmpty.subscribe(MonoSwitchIfEmpty.java:44)
at reactor.core.publisher.MonoMap.subscribe(MonoMap.java:55)
at reactor.core.publisher.Mono.subscribe(Mono.java:3590)
at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.drain(FluxConcatMap.java:442)
at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.onSubscribe(FluxConcatMap.java:212)
at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:139)
at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:63)
at reactor.core.publisher.FluxConcatMap.subscribe(FluxConcatMap.java:121)
at reactor.core.publisher.MonoNext.subscribe(MonoNext.java:40)
at reactor.core.publisher.MonoSwitchIfEmpty.subscribe(MonoSwitchIfEmpty.java:44)
at reactor.core.publisher.MonoFlatMap.subscribe(MonoFlatMap.java:60)
at reactor.core.publisher.MonoFlatMap.subscribe(MonoFlatMap.java:60)
at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
at reactor.core.publisher.MonoPeekTerminal.subscribe(MonoPeekTerminal.java:61)
at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:150)
at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1476)
at reactor.core.publisher.MonoZip$ZipCoordinator.signal(MonoZip.java:247)
at reactor.core.publisher.MonoZip$ZipInner.onNext(MonoZip.java:329)
at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:2041)
at reactor.core.publisher.MonoZip$ZipInner.onSubscribe(MonoZip.java:318)
at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:54)
at reactor.core.publisher.Mono.subscribe(Mono.java:3590)
at reactor.core.publisher.MonoZip.subscribe(MonoZip.java:128)
at reactor.core.publisher.MonoFlatMap.subscribe(MonoFlatMap.java:60)
at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
at reactor.core.publisher.Mono.subscribe(Mono.java:3590)
at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onComplete(FluxSwitchIfEmpty.java:75)
at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:141)
at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:67)
at reactor.core.publisher.FluxFilter$FilterSubscriber.onNext(FluxFilter.java:107)
at reactor.core.publisher.FluxDefaultIfEmpty$DefaultIfEmptySubscriber.onNext(FluxDefaultIfEmpty.java:92)
at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:76)
at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.innerNext(FluxConcatMap.java:275)
at reactor.core.publisher.FluxConcatMap$ConcatMapInner.onNext(FluxConcatMap.java:849)
at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1476)
at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:144)
at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:114)
at reactor.core.publisher.FluxFilter$FilterSubscriber.onNext(FluxFilter.java:107)
at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:67)
at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:76)
at reactor.core.publisher.FluxFilter$FilterSubscriber.onNext(FluxFilter.java:107)
at reactor.core.publisher.FluxFlatMap$FlatMapMain.tryEmitScalar(FluxFlatMap.java:449)
at reactor.core.publisher.FluxFlatMap$FlatMapMain.onNext(FluxFlatMap.java:384)
at reactor.core.publisher.FluxIterable$IterableSubscription.slowPath(FluxIterable.java:243)
at reactor.core.publisher.FluxIterable$IterableSubscription.request(FluxIterable.java:201)
at reactor.core.publisher.FluxFlatMap$FlatMapMain.onSubscribe(FluxFlatMap.java:335)
at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:139)
at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:63)
at reactor.core.publisher.FluxFlatMap.subscribe(FluxFlatMap.java:97)
at reactor.core.publisher.FluxFilter.subscribe(FluxFilter.java:53)
at reactor.core.publisher.MonoNext.subscribe(MonoNext.java:40)
at reactor.core.publisher.MonoSwitchIfEmpty.subscribe(MonoSwitchIfEmpty.java:44)
at reactor.core.publisher.MonoFilter.subscribe(MonoFilter.java:46)
at reactor.core.publisher.MonoMap.subscribe(MonoMap.java:55)
at reactor.core.publisher.MonoFlatMap.subscribe(MonoFlatMap.java:60)
at reactor.core.publisher.Mono.subscribe(Mono.java:3590)
at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.drain(FluxConcatMap.java:442)
at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.onSubscribe(FluxConcatMap.java:212)
at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:139)
at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:63)
at reactor.core.publisher.FluxConcatMap.subscribe(FluxConcatMap.java:121)
at reactor.core.publisher.MonoNext.subscribe(MonoNext.java:40)
at reactor.core.publisher.MonoDefaultIfEmpty.subscribe(MonoDefaultIfEmpty.java:37)
at reactor.core.publisher.MonoFilter.subscribe(MonoFilter.java:46)
at reactor.core.publisher.MonoSwitchIfEmpty.subscribe(MonoSwitchIfEmpty.java:44)
at reactor.core.publisher.MonoFlatMap.subscribe(MonoFlatMap.java:60)
at reactor.core.publisher.MonoSwitchIfEmpty.subscribe(MonoSwitchIfEmpty.java:44)
at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
at reactor.core.publisher.MonoOnErrorResume.subscribe(MonoOnErrorResume.java:44)
at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:150)
at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1476)
at reactor.core.publisher.FluxDefaultIfEmpty$DefaultIfEmptySubscriber.onComplete(FluxDefaultIfEmpty.java:100)
at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:136)
at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:136)
at reactor.core.publisher.FluxFilter$FilterSubscriber.onComplete(FluxFilter.java:160)
at reactor.core.publisher.FluxMap$MapConditionalSubscriber.onComplete(FluxMap.java:262)
at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1479)
at reactor.core.publisher.MonoProcessor.onNext(MonoProcessor.java:389)
at reactor.core.publisher.FluxPeek$PeekSubscriber.onNext(FluxPeek.java:192)
at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:67)
at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1476)
at reactor.core.publisher.MonoSupplier.subscribe(MonoSupplier.java:61)
at reactor.core.publisher.Mono.subscribe(Mono.java:3590)
at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onComplete(FluxSwitchIfEmpty.java:75)
at reactor.core.publisher.MonoNext$NextSubscriber.onComplete(MonoNext.java:96)
at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.drain(FluxConcatMap.java:360)
at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.onComplete(FluxConcatMap.java:269)
at reactor.core.publisher.Operators.complete(Operators.java:131)
at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:122)
at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:63)
at reactor.core.publisher.FluxConcatMap.subscribe(FluxConcatMap.java:121)
at reactor.core.publisher.MonoNext.subscribe(MonoNext.java:40)
at reactor.core.publisher.MonoSwitchIfEmpty.subscribe(MonoSwitchIfEmpty.java:44)
at reactor.core.publisher.MonoPeek.subscribe(MonoPeek.java:71)
at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
at reactor.core.publisher.Mono.subscribe(Mono.java:3590)
at reactor.core.publisher.MonoProcessor.add(MonoProcessor.java:531)
at reactor.core.publisher.MonoProcessor.subscribe(MonoProcessor.java:444)
at reactor.core.publisher.MonoMap.subscribe(MonoMap.java:52)
at reactor.core.publisher.MonoFilter.subscribe(MonoFilter.java:46)
at reactor.core.publisher.MonoMap.subscribe(MonoMap.java:55)
at reactor.core.publisher.MonoMap.subscribe(MonoMap.java:55)
at reactor.core.publisher.MonoDefaultIfEmpty.subscribe(MonoDefaultIfEmpty.java:37)
at reactor.core.publisher.MonoFlatMap.subscribe(MonoFlatMap.java:60)
at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
at reactor.core.publisher.Mono.subscribe(Mono.java:3590)
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.drain(MonoIgnoreThen.java:172)
at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:56)
at reactor.core.publisher.Mono.subscribe(Mono.java:3590)
at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onComplete(FluxSwitchIfEmpty.java:75)
at reactor.core.publisher.MonoFlatMap$FlatMapMain.secondComplete(MonoFlatMap.java:189)
at reactor.core.publisher.MonoFlatMap$FlatMapInner.onComplete(MonoFlatMap.java:260)
at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:136)
at reactor.core.publisher.Operators.complete(Operators.java:131)
at reactor.core.publisher.MonoEmpty.subscribe(MonoEmpty.java:45)
at reactor.core.publisher.MonoMap.subscribe(MonoMap.java:55)
at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:150)
at reactor.core.publisher.FluxFilterFuseable$FilterFuseableSubscriber.onNext(FluxFilterFuseable.java:113)
at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:2041)
at reactor.core.publisher.FluxFilterFuseable$FilterFuseableSubscriber.request(FluxFilterFuseable.java:185)
at reactor.core.publisher.MonoFlatMap$FlatMapMain.onSubscribe(MonoFlatMap.java:103)
at reactor.core.publisher.FluxFilterFuseable$FilterFuseableSubscriber.onSubscribe(FluxFilterFuseable.java:82)
at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:54)
at reactor.core.publisher.MonoFilterFuseable.subscribe(MonoFilterFuseable.java:47)
at reactor.core.publisher.MonoFlatMap.subscribe(MonoFlatMap.java:60)
at reactor.core.publisher.MonoSwitchIfEmpty.subscribe(MonoSwitchIfEmpty.java:44)
at reactor.core.publisher.MonoFlatMap.subscribe(MonoFlatMap.java:60)
at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
at reactor.core.publisher.MonoSubscriberContext.subscribe(MonoSubscriberContext.java:47)
at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
at reactor.core.publisher.MonoSubscriberContext.subscribe(MonoSubscriberContext.java:47)
at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:150)
at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:121)
at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:121)
at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1476)
at reactor.core.publisher.MonoFlatMap$FlatMapInner.onNext(MonoFlatMap.java:241)
at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1476)
at reactor.core.publisher.MonoCollectList$MonoBufferAllSubscriber.onComplete(MonoCollectList.java:118)
at reactor.core.publisher.FluxIterable$IterableSubscription.fastPath(FluxIterable.java:333)
at reactor.core.publisher.FluxIterable$IterableSubscription.request(FluxIterable.java:198)
at reactor.core.publisher.MonoCollectList$MonoBufferAllSubscriber.onSubscribe(MonoCollectList.java:90)
at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:139)
at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:63)
at reactor.core.publisher.MonoCollectList.subscribe(MonoCollectList.java:59)
at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:150)
at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:67)
at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:76)
at reactor.core.publisher.FluxFilterWhen$FluxFilterWhenSubscriber.drain(FluxFilterWhen.java:295)
at reactor.core.publisher.FluxFilterWhen$FluxFilterWhenSubscriber.onNext(FluxFilterWhen.java:134)
at reactor.core.publisher.FluxIterable$IterableSubscription.slowPath(FluxIterable.java:243)
at reactor.core.publisher.FluxIterable$IterableSubscription.request(FluxIterable.java:201)
at reactor.core.publisher.FluxFilterWhen$FluxFilterWhenSubscriber.onSubscribe(FluxFilterWhen.java:194)
at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:139)
at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:63)
at reactor.core.publisher.FluxFilterWhen.subscribe(FluxFilterWhen.java:69)
at reactor.core.publisher.MonoNext.subscribe(MonoNext.java:40)
at reactor.core.publisher.MonoSwitchIfEmpty.subscribe(MonoSwitchIfEmpty.java:44)
at reactor.core.publisher.MonoFlatMap.subscribe(MonoFlatMap.java:60)
at reactor.core.publisher.MonoMapFuseable.subscribe(MonoMapFuseable.java:59)
at reactor.core.publisher.MonoMapFuseable.subscribe(MonoMapFuseable.java:59)
at reactor.core.publisher.MonoFlatMap.subscribe(MonoFlatMap.java:60)
at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
at reactor.core.publisher.MonoPeekTerminal.subscribe(MonoPeekTerminal.java:61)
at reactor.core.publisher.MonoPeekFuseable.subscribe(MonoPeekFuseable.java:74)
at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
at reactor.core.publisher.MonoOnErrorResume.subscribe(MonoOnErrorResume.java:44)
at reactor.core.publisher.MonoOnErrorResume.subscribe(MonoOnErrorResume.java:44)
at reactor.core.publisher.MonoPeekTerminal.subscribe(MonoPeekTerminal.java:61)
at reactor.core.publisher.MonoOnErrorResume.subscribe(MonoOnErrorResume.java:44)
at reactor.core.publisher.Mono.subscribe(Mono.java:3590)
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.drain(MonoIgnoreThen.java:172)
at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:56)
at reactor.core.publisher.MonoPeekFuseable.subscribe(MonoPeekFuseable.java:70)
at reactor.core.publisher.MonoPeekTerminal.subscribe(MonoPeekTerminal.java:61)
at reactor.netty.http.server.HttpServerHandle.onStateChange(HttpServerHandle.java:64)
at reactor.netty.tcp.TcpServerBind$ChildObserver.onStateChange(TcpServerBind.java:226)
at reactor.netty.http.server.HttpServerOperations.onInboundNext(HttpServerOperations.java:430)
at reactor.netty.channel.ChannelOperationsHandler.channelRead(ChannelOperationsHandler.java:141)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
at reactor.netty.http.server.HttpTrafficHandler.channelRead(HttpTrafficHandler.java:159)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:438)
at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:310)
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:284)
at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:253)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1434)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:965)
at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:808)
at io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe$1.run(AbstractEpollChannel.java:382)
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:404)
at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:315)
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884)
at java.lang.Thread.run(Thread.java:748)

@geoand
Copy link
Contributor

geoand commented Jan 26, 2019

Please try the latest Spring Cloud Kubernetes 1.0.0.RELEASE

@steventong
Copy link

steventong commented Jan 26, 2019

1.0.0.RELEASE still not work for me

+--- org.springframework.cloud:spring-cloud-starter-kubernetes -> 1.0.0.RELEASE
|    +--- org.springframework.cloud:spring-cloud-kubernetes-core:1.0.0.RELEASE
|    |    +--- io.fabric8:kubernetes-client:4.1.0
|    |    |    +--- io.fabric8:kubernetes-model:4.1.0
|    |    |    |    +--- com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.7.5 -> 2.9.7
|    |    |    |    |    \--- com.fasterxml.jackson.core:jackson-annotations:2.9.0
|    |    |    |    \--- javax.validation:validation-api:1.1.0.Final -> 2.0.1.Final
|    |    |    +--- com.squareup.okhttp3:okhttp:3.9.1 -> 3.8.1
|    |    |    |    \--- com.squareup.okio:okio:1.13.0
|    |    |    +--- com.squareup.okhttp3:logging-interceptor:3.9.1 -> 3.8.1
|    |    |    |    \--- com.squareup.okhttp3:okhttp:3.8.1 (*)
|    |    |    +--- org.slf4j:slf4j-api:1.7.13 -> 1.7.25
|    |    |    +--- org.slf4j:jul-to-slf4j:1.7.13 -> 1.7.25 (*)
|    |    |    +--- com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.7.7 -> 2.9.7
|    |    |    |    \--- org.yaml:snakeyaml:1.23
|    |    |    +--- io.fabric8:zjsonpatch:0.3.0
|    |    |    \--- com.github.mifmif:generex:1.0.1
|    |    |         \--- dk.brics.automaton:automaton:1.11-8
|    |    +--- org.springframework.boot:spring-boot-autoconfigure:2.1.2.RELEASE -> 2.1.0.RELEASE (*)
|    |    \--- org.springframework.cloud:spring-cloud-context:2.1.0.RELEASE (*)
|    \--- org.springframework.cloud:spring-cloud-kubernetes-discovery:1.0.0.RELEASE
|         +--- org.springframework.cloud:spring-cloud-kubernetes-core:1.0.0.RELEASE (*)
|         +--- org.springframework.cloud:spring-cloud-commons:2.1.0.RELEASE (*)
|         \--- org.springframework.cloud:spring-cloud-context:2.1.0.RELEASE (*)
2019-01-27 05:06:35.745  WARN 1 --- [-server-epoll-8] i.c.s.g.e.GlobalErrorAttributes          : null

java.lang.NullPointerException: null
	at org.springframework.cloud.kubernetes.discovery.KubernetesDiscoveryClient.getInstances(KubernetesDiscoveryClient.java:99) ~[spring-cloud-kubernetes-discovery-1.0.0.RELEASE.jar!/:1.0.0.RELEASE]
	at org.springframework.cloud.client.discovery.composite.CompositeDiscoveryClient.getInstances(CompositeDiscoveryClient.java:53) ~[spring-cloud-commons-2.1.0.RELEASE.jar!/:2.1.0.RELEASE]
	at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.tryOnNext(FluxMapFuseable.java:301) [reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxIterable$IterableSubscriptionConditional.slowPath(FluxIterable.java:515) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxIterable$IterableSubscriptionConditional.request(FluxIterable.java:473) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.request(FluxMapFuseable.java:346) [reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxFilterFuseable$FilterFuseableConditionalSubscriber.request(FluxFilterFuseable.java:404) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.request(FluxMapFuseable.java:346) [reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxFilterFuseable$FilterFuseableSubscriber.request(FluxFilterFuseable.java:185) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.request(FluxMapFuseable.java:162) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxFlatMap$FlatMapInner.onSubscribe(FluxFlatMap.java:933) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onSubscribe(FluxMapFuseable.java:90) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxFilterFuseable$FilterFuseableSubscriber.onSubscribe(FluxFilterFuseable.java:82) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.onSubscribe(FluxMapFuseable.java:255) [reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxFilterFuseable$FilterFuseableConditionalSubscriber.onSubscribe(FluxFilterFuseable.java:299) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.onSubscribe(FluxMapFuseable.java:255) [reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:135) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:63) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at ........

@Alos
Copy link
Author

Alos commented Jan 26, 2019

Are you running this in GKE?

@steventong
Copy link

We deploy k8s 1.8 on our server cluster.

@geoand
Copy link
Contributor

geoand commented Jan 28, 2019

@steventong Could you please provide the updated stack trace for 1.0.0.RELEASE?

Thank you

@steventong
Copy link

Full stack:

java.lang.NullPointerException: null
	at org.springframework.cloud.kubernetes.discovery.KubernetesDiscoveryClient.getInstances(KubernetesDiscoveryClient.java:99) ~[spring-cloud-kubernetes-discovery-1.0.0.RELEASE.jar!/:1.0.0.RELEASE]
	at org.springframework.cloud.client.discovery.composite.CompositeDiscoveryClient.getInstances(CompositeDiscoveryClient.java:53) ~[spring-cloud-commons-2.1.0.RELEASE.jar!/:2.1.0.RELEASE]
	at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.tryOnNext(FluxMapFuseable.java:301) [reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxIterable$IterableSubscriptionConditional.slowPath(FluxIterable.java:515) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxIterable$IterableSubscriptionConditional.request(FluxIterable.java:473) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.request(FluxMapFuseable.java:346) [reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxFilterFuseable$FilterFuseableConditionalSubscriber.request(FluxFilterFuseable.java:404) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.request(FluxMapFuseable.java:346) [reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxFilterFuseable$FilterFuseableSubscriber.request(FluxFilterFuseable.java:185) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.request(FluxMapFuseable.java:162) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxFlatMap$FlatMapInner.onSubscribe(FluxFlatMap.java:933) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onSubscribe(FluxMapFuseable.java:90) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxFilterFuseable$FilterFuseableSubscriber.onSubscribe(FluxFilterFuseable.java:82) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.onSubscribe(FluxMapFuseable.java:255) [reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxFilterFuseable$FilterFuseableConditionalSubscriber.onSubscribe(FluxFilterFuseable.java:299) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.onSubscribe(FluxMapFuseable.java:255) [reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:135) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:63) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxMapFuseable.subscribe(FluxMapFuseable.java:60) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxFilterFuseable.subscribe(FluxFilterFuseable.java:48) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxMapFuseable.subscribe(FluxMapFuseable.java:60) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxFilterFuseable.subscribe(FluxFilterFuseable.java:52) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxMapFuseable.subscribe(FluxMapFuseable.java:63) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.Flux.subscribe(Flux.java:7734) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxFlatMap$FlatMapMain.onNext(FluxFlatMap.java:389) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxIterable$IterableSubscription.slowPath(FluxIterable.java:243) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxIterable$IterableSubscription.request(FluxIterable.java:201) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxFlatMap$FlatMapMain.onSubscribe(FluxFlatMap.java:335) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:139) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:63) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxFlatMap.subscribe(FluxFlatMap.java:97) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxMap.subscribe(FluxMap.java:62) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxMap.subscribe(FluxMap.java:62) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.Flux.subscribe(Flux.java:7734) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxFlatMap$FlatMapMain.onNext(FluxFlatMap.java:389) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxIterable$IterableSubscription.slowPath(FluxIterable.java:243) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxIterable$IterableSubscription.request(FluxIterable.java:201) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxFlatMap$FlatMapMain.onSubscribe(FluxFlatMap.java:335) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:139) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:63) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxFlatMap.subscribe(FluxFlatMap.java:97) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoCollectList.subscribe(MonoCollectList.java:59) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoMapFuseable.subscribe(MonoMapFuseable.java:59) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoFlattenIterable.subscribe(MonoFlattenIterable.java:101) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxMaterialize.subscribe(FluxMaterialize.java:40) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoCollectList.subscribe(MonoCollectList.java:59) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoPeekFuseable.subscribe(MonoPeekFuseable.java:74) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoFlattenIterable.subscribe(MonoFlattenIterable.java:101) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxDematerialize.subscribe(FluxDematerialize.java:39) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxDefer.subscribe(FluxDefer.java:54) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxConcatMap.subscribe(FluxConcatMap.java:121) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoNext.subscribe(MonoNext.java:40) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoMap.subscribe(MonoMap.java:55) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoFlatMap.subscribe(MonoFlatMap.java:60) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoSwitchIfEmpty.subscribe(MonoSwitchIfEmpty.java:44) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoMap.subscribe(MonoMap.java:55) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.Mono.subscribe(Mono.java:3590) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.drain(FluxConcatMap.java:442) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.onSubscribe(FluxConcatMap.java:212) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:139) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:63) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxConcatMap.subscribe(FluxConcatMap.java:121) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoNext.subscribe(MonoNext.java:40) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoSwitchIfEmpty.subscribe(MonoSwitchIfEmpty.java:44) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoFlatMap.subscribe(MonoFlatMap.java:60) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoFlatMap.subscribe(MonoFlatMap.java:60) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoPeekTerminal.subscribe(MonoPeekTerminal.java:61) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:150) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1476) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoZip$ZipCoordinator.signal(MonoZip.java:247) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoZip$ZipInner.onNext(MonoZip.java:329) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:2041) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoZip$ZipInner.onSubscribe(MonoZip.java:318) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:54) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.Mono.subscribe(Mono.java:3590) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoZip.subscribe(MonoZip.java:128) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoFlatMap.subscribe(MonoFlatMap.java:60) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.Mono.subscribe(Mono.java:3590) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onComplete(FluxSwitchIfEmpty.java:75) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:141) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:67) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxFilter$FilterSubscriber.onNext(FluxFilter.java:107) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxDefaultIfEmpty$DefaultIfEmptySubscriber.onNext(FluxDefaultIfEmpty.java:92) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:76) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.innerNext(FluxConcatMap.java:275) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxConcatMap$ConcatMapInner.onNext(FluxConcatMap.java:849) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1476) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:144) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:114) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxFilter$FilterSubscriber.onNext(FluxFilter.java:107) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:67) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:76) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxFilter$FilterSubscriber.onNext(FluxFilter.java:107) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxFlatMap$FlatMapMain.tryEmitScalar(FluxFlatMap.java:449) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxFlatMap$FlatMapMain.onNext(FluxFlatMap.java:384) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxIterable$IterableSubscription.slowPath(FluxIterable.java:243) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxIterable$IterableSubscription.request(FluxIterable.java:201) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxFlatMap$FlatMapMain.onSubscribe(FluxFlatMap.java:335) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:139) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:63) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxFlatMap.subscribe(FluxFlatMap.java:97) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxFilter.subscribe(FluxFilter.java:53) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoNext.subscribe(MonoNext.java:40) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoSwitchIfEmpty.subscribe(MonoSwitchIfEmpty.java:44) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoFilter.subscribe(MonoFilter.java:46) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoMap.subscribe(MonoMap.java:55) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoFlatMap.subscribe(MonoFlatMap.java:60) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.Mono.subscribe(Mono.java:3590) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.drain(FluxConcatMap.java:442) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.onSubscribe(FluxConcatMap.java:212) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:139) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:63) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxConcatMap.subscribe(FluxConcatMap.java:121) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoNext.subscribe(MonoNext.java:40) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoDefaultIfEmpty.subscribe(MonoDefaultIfEmpty.java:37) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoFilter.subscribe(MonoFilter.java:46) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoSwitchIfEmpty.subscribe(MonoSwitchIfEmpty.java:44) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoFlatMap.subscribe(MonoFlatMap.java:60) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoSwitchIfEmpty.subscribe(MonoSwitchIfEmpty.java:44) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoOnErrorResume.subscribe(MonoOnErrorResume.java:44) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:150) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1476) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxDefaultIfEmpty$DefaultIfEmptySubscriber.onComplete(FluxDefaultIfEmpty.java:100) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:136) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:136) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxFilter$FilterSubscriber.onComplete(FluxFilter.java:160) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxMap$MapConditionalSubscriber.onComplete(FluxMap.java:262) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1479) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoProcessor.onNext(MonoProcessor.java:389) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxPeek$PeekSubscriber.onNext(FluxPeek.java:192) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:67) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1476) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoSupplier.subscribe(MonoSupplier.java:61) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.Mono.subscribe(Mono.java:3590) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onComplete(FluxSwitchIfEmpty.java:75) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoNext$NextSubscriber.onComplete(MonoNext.java:96) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.drain(FluxConcatMap.java:360) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.onComplete(FluxConcatMap.java:269) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.Operators.complete(Operators.java:131) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:122) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:63) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxConcatMap.subscribe(FluxConcatMap.java:121) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoNext.subscribe(MonoNext.java:40) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoSwitchIfEmpty.subscribe(MonoSwitchIfEmpty.java:44) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoPeek.subscribe(MonoPeek.java:71) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.Mono.subscribe(Mono.java:3590) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoProcessor.add(MonoProcessor.java:531) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoProcessor.subscribe(MonoProcessor.java:444) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoMap.subscribe(MonoMap.java:52) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoFilter.subscribe(MonoFilter.java:46) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoMap.subscribe(MonoMap.java:55) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoMap.subscribe(MonoMap.java:55) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoDefaultIfEmpty.subscribe(MonoDefaultIfEmpty.java:37) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoFlatMap.subscribe(MonoFlatMap.java:60) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.Mono.subscribe(Mono.java:3590) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.drain(MonoIgnoreThen.java:172) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:56) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.Mono.subscribe(Mono.java:3590) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onComplete(FluxSwitchIfEmpty.java:75) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoFlatMap$FlatMapMain.secondComplete(MonoFlatMap.java:189) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoFlatMap$FlatMapInner.onComplete(MonoFlatMap.java:260) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxMap$MapSubscriber.onComplete(FluxMap.java:136) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.Operators.complete(Operators.java:131) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoEmpty.subscribe(MonoEmpty.java:45) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoMap.subscribe(MonoMap.java:55) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:150) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxFilterFuseable$FilterFuseableSubscriber.onNext(FluxFilterFuseable.java:113) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:2041) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxFilterFuseable$FilterFuseableSubscriber.request(FluxFilterFuseable.java:185) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoFlatMap$FlatMapMain.onSubscribe(MonoFlatMap.java:103) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxFilterFuseable$FilterFuseableSubscriber.onSubscribe(FluxFilterFuseable.java:82) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:54) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoFilterFuseable.subscribe(MonoFilterFuseable.java:47) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoFlatMap.subscribe(MonoFlatMap.java:60) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoSwitchIfEmpty.subscribe(MonoSwitchIfEmpty.java:44) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoFlatMap.subscribe(MonoFlatMap.java:60) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoSubscriberContext.subscribe(MonoSubscriberContext.java:47) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoSubscriberContext.subscribe(MonoSubscriberContext.java:47) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:150) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:121) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:121) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1476) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoFlatMap$FlatMapInner.onNext(MonoFlatMap.java:241) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1476) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoCollectList$MonoBufferAllSubscriber.onComplete(MonoCollectList.java:118) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxIterable$IterableSubscription.fastPath(FluxIterable.java:333) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxIterable$IterableSubscription.request(FluxIterable.java:198) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoCollectList$MonoBufferAllSubscriber.onSubscribe(MonoCollectList.java:90) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:139) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:63) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoCollectList.subscribe(MonoCollectList.java:59) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:150) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:67) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:76) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxFilterWhen$FluxFilterWhenSubscriber.drain(FluxFilterWhen.java:295) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxFilterWhen$FluxFilterWhenSubscriber.onNext(FluxFilterWhen.java:134) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxIterable$IterableSubscription.slowPath(FluxIterable.java:243) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxIterable$IterableSubscription.request(FluxIterable.java:201) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxFilterWhen$FluxFilterWhenSubscriber.onSubscribe(FluxFilterWhen.java:194) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:139) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:63) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.FluxFilterWhen.subscribe(FluxFilterWhen.java:69) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoNext.subscribe(MonoNext.java:40) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoSwitchIfEmpty.subscribe(MonoSwitchIfEmpty.java:44) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoFlatMap.subscribe(MonoFlatMap.java:60) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoMapFuseable.subscribe(MonoMapFuseable.java:59) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoMapFuseable.subscribe(MonoMapFuseable.java:59) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoFlatMap.subscribe(MonoFlatMap.java:60) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoPeekTerminal.subscribe(MonoPeekTerminal.java:61) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoPeekFuseable.subscribe(MonoPeekFuseable.java:74) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoOnErrorResume.subscribe(MonoOnErrorResume.java:44) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoOnErrorResume.subscribe(MonoOnErrorResume.java:44) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoPeekTerminal.subscribe(MonoPeekTerminal.java:61) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoOnErrorResume.subscribe(MonoOnErrorResume.java:44) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.Mono.subscribe(Mono.java:3590) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.drain(MonoIgnoreThen.java:172) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:56) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoPeekFuseable.subscribe(MonoPeekFuseable.java:70) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.core.publisher.MonoPeekTerminal.subscribe(MonoPeekTerminal.java:61) ~[reactor-core-3.2.2.RELEASE.jar!/:3.2.2.RELEASE]
	at reactor.netty.http.server.HttpServerHandle.onStateChange(HttpServerHandle.java:64) ~[reactor-netty-0.8.2.RELEASE.jar!/:0.8.2.RELEASE]
	at reactor.netty.tcp.TcpServerBind$ChildObserver.onStateChange(TcpServerBind.java:226) ~[reactor-netty-0.8.2.RELEASE.jar!/:0.8.2.RELEASE]
	at reactor.netty.http.server.HttpServerOperations.onInboundNext(HttpServerOperations.java:431) ~[reactor-netty-0.8.2.RELEASE.jar!/:0.8.2.RELEASE]
	at reactor.netty.channel.ChannelOperationsHandler.channelRead(ChannelOperationsHandler.java:141) ~[reactor-netty-0.8.2.RELEASE.jar!/:0.8.2.RELEASE]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) ~[netty-transport-4.1.29.Final.jar!/:4.1.29.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) ~[netty-transport-4.1.29.Final.jar!/:4.1.29.Final]
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) ~[netty-transport-4.1.29.Final.jar!/:4.1.29.Final]
	at reactor.netty.http.server.HttpTrafficHandler.channelRead(HttpTrafficHandler.java:159) ~[reactor-netty-0.8.2.RELEASE.jar!/:0.8.2.RELEASE]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) ~[netty-transport-4.1.29.Final.jar!/:4.1.29.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) ~[netty-transport-4.1.29.Final.jar!/:4.1.29.Final]
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) ~[netty-transport-4.1.29.Final.jar!/:4.1.29.Final]
	at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:438) ~[netty-transport-4.1.29.Final.jar!/:4.1.29.Final]
	at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:310) ~[netty-codec-4.1.29.Final.jar!/:4.1.29.Final]
	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:284) ~[netty-codec-4.1.29.Final.jar!/:4.1.29.Final]
	at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:253) ~[netty-transport-4.1.29.Final.jar!/:4.1.29.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) ~[netty-transport-4.1.29.Final.jar!/:4.1.29.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) ~[netty-transport-4.1.29.Final.jar!/:4.1.29.Final]
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) ~[netty-transport-4.1.29.Final.jar!/:4.1.29.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1434) ~[netty-transport-4.1.29.Final.jar!/:4.1.29.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) ~[netty-transport-4.1.29.Final.jar!/:4.1.29.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) ~[netty-transport-4.1.29.Final.jar!/:4.1.29.Final]
	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:965) ~[netty-transport-4.1.29.Final.jar!/:4.1.29.Final]
	at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:808) ~[netty-transport-native-epoll-4.1.29.Final-linux-x86_64.jar!/:4.1.29.Final]
	at io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe$1.run(AbstractEpollChannel.java:382) ~[netty-transport-native-epoll-4.1.29.Final-linux-x86_64.jar!/:4.1.29.Final]
	at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163) ~[netty-common-4.1.29.Final.jar!/:4.1.29.Final]
	at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:404) ~[netty-common-4.1.29.Final.jar!/:4.1.29.Final]
	at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:315) ~[netty-transport-native-epoll-4.1.29.Final-linux-x86_64.jar!/:4.1.29.Final]
	at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884) ~[netty-common-4.1.29.Final.jar!/:4.1.29.Final]
	at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_181]

@geoand
Copy link
Contributor

geoand commented Jan 30, 2019

@steventong A PR is in #320

@steventong
Copy link

NPE was solved.

Thank you.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

7 participants