zilla
zilla copied to clipboard
Intermittent NPE when trying to resolve guards
Caused by: java.util.concurrent.CompletionException: java.lang.NullPointerException: Cannot invoke "String.length()" because "str" is null
at java.base/java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:332)
at java.base/java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:347)
at java.base/java.util.concurrent.CompletableFuture$BiRelay.tryFire(CompletableFuture.java:1498)
at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510)
at java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2147)
at io.aklivity.zilla.runtime.engine/io.aklivity.zilla.runtime.engine.internal.registry.NamespaceTask.run(NamespaceTask.java:49)
at io.aklivity.zilla.runtime.engine/io.aklivity.zilla.runtime.engine.internal.registry.EngineWorker.onSystemSignal(EngineWorker.java:1105)
at io.aklivity.zilla.runtime.engine/io.aklivity.zilla.runtime.engine.internal.registry.EngineWorker.onSystemMessage(EngineWorker.java:1055)
at io.aklivity.zilla.runtime.engine/io.aklivity.zilla.runtime.engine.internal.registry.EngineWorker.handleRead(EngineWorker.java:1201)
at io.aklivity.zilla.runtime.engine/io.aklivity.zilla.runtime.engine.internal.concurent.ManyToOneRingBuffer.read(ManyToOneRingBuffer.java:181)
at io.aklivity.zilla.runtime.engine/io.aklivity.zilla.runtime.engine.internal.registry.EngineWorker.doWork(EngineWorker.java:817)
at org.agrona.core/org.agrona.concurrent.AgentRunner.doDutyCycle(AgentRunner.java:291)
at org.agrona.core/org.agrona.concurrent.AgentRunner.run(AgentRunner.java:164)
at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.NullPointerException: Cannot invoke "String.length()" because "str" is null
at java.base/java.io.Writer.write(Writer.java:249)
at io.aklivity.zilla.runtime.engine/io.aklivity.zilla.runtime.engine.internal.LabelManager.nextLabelId(LabelManager.java:82)
at java.base/java.util.HashMap.computeIfAbsent(HashMap.java:1220)
at io.aklivity.zilla.runtime.engine/io.aklivity.zilla.runtime.engine.internal.LabelManager.supplyLabelId(LabelManager.java:61)
at io.aklivity.zilla.runtime.engine/io.aklivity.zilla.runtime.engine.internal.registry.EngineManager$NameResolver.resolve(EngineManager.java:444)
at io.aklivity.zilla.runtime.engine/io.aklivity.zilla.runtime.engine.internal.registry.EngineManager.lambda$process$6(EngineManager.java:266)
at io.aklivity.zilla.runtime.binding.mqtt/io.aklivity.zilla.runtime.binding.mqtt.internal.config.MqttBindingConfig.resolveGuard(MqttBindingConfig.java:205)
at io.aklivity.zilla.runtime.binding.mqtt/io.aklivity.zilla.runtime.binding.mqtt.internal.config.MqttBindingConfig.<init>(MqttBindingConfig.java:92)
at io.aklivity.zilla.runtime.binding.mqtt/io.aklivity.zilla.runtime.binding.mqtt.internal.stream.MqttServerFactory.attach(MqttServerFactory.java:537)
at io.aklivity.zilla.runtime.binding.mqtt/io.aklivity.zilla.runtime.binding.mqtt.internal.MqttBindingContext.attach(MqttBindingContext.java:56)
at io.aklivity.zilla.runtime.engine/io.aklivity.zilla.runtime.engine.internal.registry.BindingRegistry.attach(BindingRegistry.java:50)
at io.aklivity.zilla.runtime.engine/io.aklivity.zilla.runtime.engine.internal.registry.NamespaceRegistry.attachBinding(NamespaceRegistry.java:156)
at java.base/java.util.Arrays$ArrayList.forEach(Arrays.java:4204)
at io.aklivity.zilla.runtime.engine/io.aklivity.zilla.runtime.engine.internal.registry.NamespaceRegistry.attach(NamespaceRegistry.java:128)
at io.aklivity.zilla.runtime.engine/io.aklivity.zilla.runtime.engine.internal.registry.EngineRegistry.attachNamespace(EngineRegistry.java:201)
at io.aklivity.zilla.runtime.engine/io.aklivity.zilla.runtime.engine.internal.registry.NamespaceTask.run(NamespaceTask.java:48)
... 8 more
Steps to reproduce: Use the following zilla.yaml:
name: example
guards:
authn_jwt:
type: jwt
options:
issuer: https://auth.example.com
audience: https://api.example.com
keys:
- kty: RSA
n: qqEu50hX+43Bx4W1UYWnAVKwFm+vDbP0kuIOSLVNa+HKQdHTf+3Sei5UCnkskn796izA29D0DdCy3ET9oaKRHIJyKbqFl0rv6f516QzOoXKC6N01sXBHBE/ovs0wwDvlaW+gFGPgkzdcfUlyrWLDnLV7LcuQymhTND2uH0oR3wJnNENN/OFgM1KGPPDOe19YsIKdLqARgxrhZVsh06OurEviZTXOBFI5r+yac7haDwOQhLHXNv+Y9MNvxs5QLWPFIM3bNUWfYrJnLrs4hGJS+y/KDM9Si+HL30QAFXy4YNO33J8DHjZ7ddG5n8/FqplOKvRtUgjcKWlxoGY4VdVaDQ==
e: AQAB
alg: RS256
kid: example
bindings:
north_tcp_server:
type: tcp
kind: server
options:
host: 0.0.0.0
port: 7185
routes:
- exit: north_mqtt_server
when:
- port: 7185
north_mqtt_server:
type: mqtt
kind: server
options:
authorization:
authn_jwt:
credentials:
connect:
username: Bearer {credentials}
topics:
- name: smartylighting/streetlights/1/0/event/1/lighting/measured
content:
model: json
catalog:
inline_schema:
- subject: item
routes:
- exit: south_mqtt_client
guarded:
authn_jwt:
- mqtt:stream
when:
- publish:
- topic: smartylighting/streetlights/1/0/event/1/lighting/measured
- subscribe:
- topic: smartylighting/streetlights/1/0/event/1/lighting/measured
south_mqtt_client:
type: mqtt
kind: client
exit: south_tcp_client
south_tcp_client:
type: tcp
kind: client
options:
host: localhost
port: 7183
catalogs:
inline_schema:
type: inline
options:
subjects:
item:
schema: |
properties:
id:
type: string
status:
type: string
required:
- id
- status
version: latest
Start zilla multiple times until it fails with the above exception at startup.