jesumyip opened a new issue, #58:
URL: https://github.com/apache/pulsar-client-python/issues/58
Consider the following Python code:
```
print("----------> 1")
auth_token = "<my token>"
print("----------> 2")
pulsar_client =
pulsar.Client("pulsar+ssl://dev-stream-int.datamanaged.io:6651",
authentication=pulsar.AuthenticationToken(auth_token))
print("----------> 3")
producer =
pulsar_client.create_producer('persistent://bladerunner/notification/subscribe')
print("----------> 4")
producer.send("Hammurabi".encode('utf-8'), None)
print("----------> 5")
```
When this code is executed, it crashes with the following error:
```
File "/workspace/api/pulsartest.py", line 43, in pulsartest
producer =
pulsar_client.create_producer('persistent://bladerunner/notification/subscribe')
File
"/layers/google.python.pip/pip/lib/python3.9/site-packages/pulsar/__init__.py",
line 603, in create_producer
p._producer = self._client.create_producer(topic, conf)
_pulsar.ConnectError: Pulsar error: ConnectError
```
From the logs for the Python code, I am able to see:
<img width="597" alt="image"
src="https://user-images.githubusercontent.com/87511866/206396855-632d9889-b35c-4d19-94b1-6139da59dbf9.png">
That implies this line of code caused the crash:
`producer =
pulsar_client.create_producer('persistent://bladerunner/notification/subscribe')`
Now when I run the same Python code in a Ubuntu VM, it works just fine.
Some background:
1. Pulsar (v2.10.2) is installed in a GKE cluster in GCP Project-A.
2. I deployed a Ubuntu VM outside of the cluster but within the same VPC
network as the GKE cluster.
3. My App Engine code is running in a different GCP project (let's call it
Project-B) but it has VPC peering established with Project-A and I use
Python3.9 runtime.
4. I have `pulsar-client==2.10.2` in my `requirements.txt` file.
5. I have istio sitting in front of pulsar-proxy doing TLS termination.
6. Within the instance of pulsar, TLS is not enabled.
When the App Engine code is executed, I see these logs in GKE for
pulsar-proxy:
```
2022-12-08T08:26:26,015+0000 [pulsar-proxy-io-2-1] INFO
org.apache.pulsar.proxy.server.ProxyConnection - [/127.0.0.6:39297] New
connection opened
2022-12-08T08:26:26,158+0000 [pulsar-proxy-io-2-1] INFO
org.apache.pulsar.proxy.server.ProxyConnection - [/127.0.0.6:39297] complete
connection, init proxy handler. authenticated with token role admin,
hasProxyToBrokerUrl: false
2022-12-08T08:26:26,246+0000 [pulsar-proxy-io-2-1] INFO
org.apache.pulsar.client.impl.ConnectionPool - [[id: 0x77f9b9a7,
L:/10.44.3.20:49572 -
R:pulsar-dev-2-broker.hulk-dev-2.svc.cluster.local/10.44.14.33:6650]] Connected
to server
2022-12-08T08:26:26,313+0000 [pulsar-proxy-io-2-1] INFO
org.apache.pulsar.proxy.server.ProxyConnection - [/127.0.0.6:44881] New
connection opened
2022-12-08T08:26:26,354+0000 [pulsar-proxy-io-2-1] INFO
org.apache.pulsar.proxy.server.ProxyConnection - [/127.0.0.6:44881] complete
connection, init proxy handler. authenticated with token role admin,
hasProxyToBrokerUrl: true
2022-12-08T08:26:26,355+0000 [pulsar-proxy-io-2-1] WARN
org.apache.pulsar.proxy.server.ProxyConnection - [/127.0.0.6:44881] Unable to
authenticate:
java.lang.NumberFormatException: For input string: "" at
java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
~[?:?] at java.lang.Integer.parseInt(Integer.java:662) ~[?:?] at
java.lang.Integer.parseInt(Integer.java:770) ~[?:?] at
org.apache.pulsar.proxy.server.BrokerProxyValidator.resolveAndCheckTargetAddress(BrokerProxyValidator.java:118)
~[org.apache.pulsar-pulsar-proxy-2.10.2.jar:2.10.2] at
org.apache.pulsar.proxy.server.ProxyConnection.completeConnect(ProxyConnection.java:304)
~[org.apache.pulsar-pulsar-proxy-2.10.2.jar:2.10.2] at
org.apache.pulsar.proxy.server.ProxyConnection.doAuthentication(ProxyConnection.java:389)
~[org.apache.pulsar-pulsar-proxy-2.10.2.jar:2.10.2] at
org.apache.pulsar.proxy.server.ProxyConnection.handleConnect(ProxyConnection.java:471)
~[org.apache.pulsar-pulsar-proxy-2.10.2.jar:2.10.2] at
org.apache.pulsar.common.protocol.PulsarDecoder.channelRead(PulsarDecoder.java:167)
~[org.apache.pulsar-pulsar-common-2.10.2.jar:2.10.2] at or
g.apache.pulsar.proxy.server.ProxyConnection.channelRead(ProxyConnection.java:234)
~[org.apache.pulsar-pulsar-proxy-2.10.2.jar:2.10.2] at
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
~[io.netty-netty-transport-4.1.77.Final.jar:4.1.77.Final] at
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
~[io.netty-netty-transport-4.1.77.Final.jar:4.1.77.Final] at
io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
~[io.netty-netty-transport-4.1.77.Final.jar:4.1.77.Final] at
io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:327)
~[io.netty-netty-codec-4.1.77.Final.jar:4.1.77.Final] at
io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:299)
~[io.netty-netty-codec-4.1.77.Final.jar:4.1.77.Final] at
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(Abstra
ctChannelHandlerContext.java:379)
~[io.netty-netty-transport-4.1.77.Final.jar:4.1.77.Final] at
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
~[io.netty-netty-transport-4.1.77.Final.jar:4.1.77.Final] at
io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
~[io.netty-netty-transport-4.1.77.Final.jar:4.1.77.Final] at
io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:286)
~[io.netty-netty-handler-4.1.77.Final.jar:4.1.77.Final] at
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
~[io.netty-netty-transport-4.1.77.Final.jar:4.1.77.Final] at
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
~[io.netty-netty-transport-4.1.77.Final.jar:4.1.77.Final] at
io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:35
7) ~[io.netty-netty-transport-4.1.77.Final.jar:4.1.77.Final] at
io.netty.handler.flush.FlushConsolidationHandler.channelRead(FlushConsolidationHandler.java:152)
~[io.netty-netty-handler-4.1.77.Final.jar:4.1.77.Final] at
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
~[io.netty-netty-transport-4.1.77.Final.jar:4.1.77.Final] at
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
~[io.netty-netty-transport-4.1.77.Final.jar:4.1.77.Final] at
io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
~[io.netty-netty-transport-4.1.77.Final.jar:4.1.77.Final] at
io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
~[io.netty-netty-transport-4.1.77.Final.jar:4.1.77.Final] at
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
~[io.netty-netty-
transport-4.1.77.Final.jar:4.1.77.Final] at
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
~[io.netty-netty-transport-4.1.77.Final.jar:4.1.77.Final] at
io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
~[io.netty-netty-transport-4.1.77.Final.jar:4.1.77.Final] at
io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:800)
~[io.netty-netty-transport-classes-epoll-4.1.77.Final.jar:4.1.77.Final] at
io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:487)
~[io.netty-netty-transport-classes-epoll-4.1.77.Final.jar:4.1.77.Final] at
io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:385)
~[io.netty-netty-transport-classes-epoll-4.1.77.Final.jar:4.1.77.Final] at
io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:995)
~[io.netty-netty-common-4.1.77.Final.jar:4.1.77.Final] at
io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
~[io.netty-netty-common-4.1.77.Final.jar:4.1.77.Final] at
io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
~[io.netty-netty-common-4.1.77.Final.jar:4.1.77.Final] at
java.lang.Thread.run(Thread.java:829) ~[?:?]
2022-12-08T08:26:26,368+0000 [pulsar-proxy-io-2-1] INFO
org.apache.pulsar.proxy.server.ProxyConnection - [/127.0.0.6:44881] Connection
closed
```
Based on the logs, I am quite sure network packets are flowing correctly
between Project-A and Project-B such that App Engine is able to reach
pulsar-proxy. I also know that the combination of tls + istio + GKE is working
fine because the exact same code in the Ubuntu VM works with 100% success rate.
The Ubuntu VM was purposely installed outside of GKE as opposed to running the
Python code in a Ubuntu pod **within** the cluster to simulate remote network
connectivity.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]