zilla icon indicating copy to clipboard operation
zilla copied to clipboard

Intermittent NPE when trying to resolve guards

Open bmaidics opened this issue 1 year ago • 0 comments

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.

bmaidics avatar May 02 '24 09:05 bmaidics