nats-io / nats-server

High-Performance server for NATS.io, the cloud and edge native messaging system.
https://nats.io
Apache License 2.0
15.49k stars 1.38k forks source link

crasher report when creating a JS template programatically #1636

Closed aricart closed 1 year ago

aricart commented 3 years ago

Defect

The server is crashing with what I expect is an invalid template request.

[71920] - launched
[71920] - ports file found
[71920] - attempting to connect
[71920] 2020/10/09 15:37:15.230874 [INF] Starting nats-server version 2.2.0-beta.23
[71920] 2020/10/09 15:37:15.230957 [INF] Git commit [not set]
[71920] 2020/10/09 15:37:15.230961 [INF] Using configuration file: /var/folders/1y/_rk6yz81341g5q8k1vr5nqmw0000gq/T/b7939799
[71920] 2020/10/09 15:37:15.231148 [INF] Starting JetStream
[71920] 2020/10/09 15:37:15.231382 [WRN]     _ ___ _____ ___ _____ ___ ___   _   __  __
[71920] 2020/10/09 15:37:15.231389 [WRN]  _ | | __|_   _/ __|_   _| _ \ __| /_\ |  \/  |
[71920] 2020/10/09 15:37:15.231392 [WRN] | || | _|  | | \__ \ | | |   / _| / _ \| |\/| |
[71920] 2020/10/09 15:37:15.231395 [WRN]  \__/|___| |_| |___/ |_| |_|_\___/_/ \_\_|  |_|
[71920] 2020/10/09 15:37:15.231396 [WRN] 
[71920] 2020/10/09 15:37:15.231398 [WRN]                _         _
[71920] 2020/10/09 15:37:15.231399 [WRN]               | |__  ___| |_ __ _
[71920] 2020/10/09 15:37:15.231401 [WRN]               | '_ \/ -_)  _/ _` |
[71920] 2020/10/09 15:37:15.231402 [WRN]               |_.__/\___|\__\__,_|
[71920] 2020/10/09 15:37:15.231404 [WRN] 
[71920] 2020/10/09 15:37:15.231407 [WRN]          JetStream is a Beta feature
[71920] 2020/10/09 15:37:15.231408 [WRN]     https://github.com/nats-io/jetstream
[71920] 2020/10/09 15:37:15.231410 [INF] 
[71920] 2020/10/09 15:37:15.231412 [INF] ----------- JETSTREAM -----------
[71920] 2020/10/09 15:37:15.231420 [INF]   Max Memory:      1.00 MB
[71920] 2020/10/09 15:37:15.231423 [INF]   Max Storage:     1.00 MB
[71920] 2020/10/09 15:37:15.231427 [INF]   Store Directory: "/tmp"
[71920] 2020/10/09 15:37:15.231445 [INF] ----------------------------------------
[71920] 2020/10/09 15:37:15.231527 [INF]   Recovering JetStream state for account "$G"
[71920] 2020/10/09 15:37:15.232235 [INF]   Restored 2,500 messages for Stream "data"
[71920] 2020/10/09 15:37:15.232291 [INF]   Recovering 1 Consumers for Stream - "data"
[71920] 2020/10/09 15:37:15.232502 [INF] JetStream state for account "$G" recovered
[71920] 2020/10/09 15:37:15.232675 [INF] Starting http monitor on 127.0.0.1:60134
[71920] 2020/10/09 15:37:15.232722 [INF] Listening for client connections on 127.0.0.1:60135
[71920] 2020/10/09 15:37:15.232725 [INF] Server id is NBU4CDKZMME44CCNBS3J2DKMYGYQE72L74LFBEJQCZ333XRAWTXH6RMI
[71920] 2020/10/09 15:37:15.232727 [INF] Server is ready

> INFO {"server_id":"NBU4CDKZMME44CCNBS3J2DKMYGYQE72L74LFBEJQCZ333XRAWTXH6RMI","server_name":"NBU4CDKZMME44CCNBS3J2DKMYGYQE72L74LFBEJQCZ333XRAWTXH6RMI","version":"2.2.0-beta.23","proto":1,"go":"go1.14.2","host":"127.0.0.1","port":60135,"headers":true,"max_payload":1048576,"jetstream":true,"client_id":5,"client_ip":"127.0.0.1"} ␍␊
< CONNECT {"protocol":1,"version":"1.0.0-9","lang":"nats.deno","verbose":false,"pedantic":false}␍␊
< PING␍␊
[71920] 2020/10/09 15:37:15.336330 [TRC] 127.0.0.1:60137 - cid:5 - <<- [CONNECT {"protocol":1,"version":"1.0.0-9","lang":"nats.deno","verbose":false,"pedantic":false}]

[71920] 2020/10/09 15:37:15.336401 [TRC] 127.0.0.1:60137 - cid:5 - <<- [PING]

[71920] 2020/10/09 15:37:15.336405 [TRC] 127.0.0.1:60137 - cid:5 - ->> [PONG]

> PONG␍␊
< SUB _INBOX.4GJIQFPHRMRACKWTKD8W51.* 1␍␊PUB $JS.API.STREAM.TEMPLATE.CREATE.FOOS _INBOX.4GJIQFPHRMRACKWTKD8W51.4GJIQFPHRMRACKWTKD8W3R 36␍␊{"name":"FOOS","subjects":["foo.>"]}␍␊
[71920] 2020/10/09 15:37:15.338382 [TRC] 127.0.0.1:60137 - cid:5 - <<- [SUB _INBOX.4GJIQFPHRMRACKWTKD8W51.* 1]
[71920] 2020/10/09 15:37:15.338424 [TRC] 127.0.0.1:60137 - cid:5 - <<- [PUB $JS.API.STREAM.TEMPLATE.CREATE.FOOS _INBOX.4GJIQFPHRMRACKWTKD8W51.4GJIQFPHRMRACKWTKD8W3R 36]
[71920] 2020/10/09 15:37:15.338429 [TRC] 127.0.0.1:60137 - cid:5 - <<- MSG_PAYLOAD: ["{\"name\":\"FOOS\",\"subjects\":[\"foo.>\"]}"]

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x8 pc=0x145b59c]

goroutine 52 [running]:
github.com/nats-io/nats-server/server.(*Account).AddStreamTemplate(0xc000170000, 0xc0002b2440, 0x4, 0xc000150c01, 0x4)
    /Users/synadia/Dropbox/code/src/github.com/nats-io/nats-server/server/jetstream.go:997 +0x6c
github.com/nats-io/nats-server/server.(*Server).jsTemplateCreateRequest(0xc00013f500, 0xc00017f4a0, 0xc000348000, 0xc000150c90, 0x23, 0xc00013aac0, 0x34, 0xc00033a488, 0x24, 0x178)
    /Users/synadia/Dropbox/code/src/github.com/nats-io/nats-server/server/jetstream_api.go:587 +0x55a
github.com/nats-io/nats-server/server.(*client).deliverMsg(0xc000348000, 0xc00017f4a0, 0xc000150c60, 
0x23, 0x30, 0xc0000f5238, 0x11, 0x20, 0xc000349459, 0x41, ...)
    /Users/synadia/Dropbox/code/src/github.com/nats-io/nats-server/server/client.go:2874 +0x345
github.com/nats-io/nats-server/server.(*client).processMsgResults(0xc000348000, 0xc0001701e0, 0xc00029d6e0, 0xc00033a488, 0x26, 0x178, 0x0, 0x0, 0x0, 0xc000150c60, ...)
    /Users/synadia/Dropbox/code/src/github.com/nats-io/nats-server/server/client.go:3614 +0x5be
github.com/nats-io/nats-server/server.(*client).processServiceImport(0xc000348000, 0xc000134960, 0xc000170000, 0xc00033a488, 0x26, 0x178)
    /Users/synadia/Dropbox/code/src/github.com/nats-io/nats-server/server/client.go:3463 +0x713
github.com/nats-io/nats-server/server.(*Account).addServiceImportSub.func1(0xc000296420, 0xc000348000, 0xc000150c00, 0x23, 0xc00013aa40, 0x34, 0xc00033a488, 0x26, 0x178)
    /Users/synadia/Dropbox/code/src/github.com/nats-io/nats-server/server/accounts.go:1394 +0x5e
github.com/nats-io/nats-server/server.(*client).deliverMsg
(0xc000348000, 0xc000296420, 0xc00033a42b, 0x23, 0x1d5, 0xc00033a44f, 0x34, 0x1b1, 0xc000349459, 0x63, ...)
    /Users/synadia/Dropbox/code/src/github.com/nats-io/nats-server/server/client.go:2872 +0x457
github.com/nats-io/nats-server/server.(*client).processMsgResults(0xc000348000, 0xc000170000, 0xc00029d410, 0xc00033a488, 0x26, 0x178, 0x0, 0x0, 0x0, 0xc00033a42b, ...)
    /Users/synadia/Dropbox/code/src/github.com/nats-io/nats-server/server/client.go:3614 +0x5be
github.com/nats-io/nats-server/server.(*client).processInboundClientMsg(0xc000348000, 0xc00033a488, 0x26, 
0x178, 0xc0002b2380)
    /Users/synadia/Dropbox/code/src/github.com/nats-io/nats-server/server/client.go:3287 +0x3b6
github.com/nats-io/nats-server/server.(*client).processInboundMsg(0xc000348000, 0xc00033a488, 0x26, 0x178)
    /Users/synadia/Dropbox/code/src/github.com/nats-io/nats-server/server/client.go:3168 +0x95
github.com/nats-io/nats-server/server.(*client).parse(0xc000348000, 
0xc00033a400, 0xae, 0x200, 0xae, 0x0)
    /Users/synadia/Dropbox/code/src/github.com/nats-io/nats-server/server/parser.go:449 +0x2156
github.com/nats-io/nats-server/server.(*client).readLoop(0xc000348000, 0x0, 0x0, 0x0)
    /Users/synadia/Dropbox/code/src/github.com/nats-io/nats-server/server/client.go:1008 +0x512
github.com/nats-io/nats-server/server.(*Server).createClient.func2()
    /Users/synadia/Dropbox/code/src/github.com/nats-io/nats-server/server/server.go:2245 +0x45

created by github.com/nats-io/nats-server/server.(*Server).startGoRoutine
    /Users/synadia/Dropbox/code/src/github.com/nats-io/nats-server/server/server.go:2620 +0xc1

Versions of nats-server and affected client libraries used:

latest from master

OS/Container environment:

OS X

Steps or code to reproduce the issue:

Expected result:

Actual result:

aricart commented 3 years ago

The actual issue is that the request for creating a stream is different than a template.

{
      name: "",
      subjects: ["orders.>"],
      retention: RetentionPolicy.Limits,
      max_consumers: -1,
      max_msgs: -1,
      max_bytes: -1,
      max_age: 0,
      max_msg_size: -1,
      storage: StorageType.Memory,
      discard: DiscardPolicy.Old,
      num_replicas: 1
}
{
    name: "ORDERS",
    max_streams: 100,
    config: {
      name: "",
      subjects: ["orders.>"],
      retention: RetentionPolicy.Limits,
      max_consumers: -1,
      max_msgs: -1,
      max_bytes: -1,
      max_age: 0,
      max_msg_size: -1,
      storage: StorageType.Memory,
      discard: DiscardPolicy.Old,
      num_replicas: 1,
    }
  }

Not quite sure why we should nest the config when the template config is the config.