pmalhaire / xk6-mqtt

k6 mqtt extension
Apache License 2.0
49 stars 37 forks source link

panic: runtime error: invalid memory address or nil pointer dereference #15

Closed KIMobile closed 1 year ago

KIMobile commented 1 year ago

Getting issue while using xk6-mqtt with influxdb: panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x1 addr=0x28 pc=0x9bcbc0] goroutine 97 [running]: github.com/mstoykov/atlas.(*Node).Path(0xc001174100) github.com/mstoykov/atlas@v0.0.0-20220811071828-388f114305dd/atlas.go:77 +0x20 go.k6.io/k6/metrics.(*TagSet).Map(...) go.k6.io/k6@v0.41.0/metrics/tags.go:74 go.k6.io/k6/output/influxdb.(*Output).batchFromSamples(0xc00230a100, {0xc001518200, 0x10, 0x11a1720}) go.k6.io/k6@v0.41.0/output/influxdb/output.go:129 +0x2fc go.k6.io/k6/output/influxdb.(*Output).flushMetrics.func1() go.k6.io/k6@v0.41.0/output/influxdb/output.go:203 +0x12a created by go.k6.io/k6/output/influxdb.(*Output).flushMetrics go.k6.io/k6@v0.41.0/output/influxdb/output.go:195 +0x12f

Code: Scenario file: _import {Counter, Trend } from 'k6/metrics'; const mqtt = require('k6/x/mqtt'); let connectPub_count = new Counter('connectPub_count'); let publish_count = new Counter('publish_count'); let publish_trend = new Trend('publish_time', true); . . . export function connectPub(k6PubId ,vus_connections) { let pub_client, err_pub_client if (k6PubId in vus_connections) { pub_client = vus_connections[k6PubId]; } else { try { let pub_client = mqtt.Client([MQTThost], user, password, cleanSessionSetting, k6PubId, timeout,) pub_client.connect() connectPub_count .add(1) vus_connections[k6PubId] = pub_client; } catch (error) { err_pub_client = error; console.log("connect error:", error) } } check(err_pub_client, { "Connect to topic": err => err === undefined }); return pub_client } . . . export function publish(pub_client, k6Message) { let err_publish; let startTime = new Date().getTime(); try { pub_client.publish(k6Topic, QoS, k6Message, retainPolicy, timeout); publish_trend.add(new Date().getTime() - startTime); } catch (error) { err_publish = error } publish_count.add(1) check(errpublish, { "Sending through MQTT": err => err === undefined }); }

Main load file: _import { randomPayload } from "./common/helper.js"; import {Gauge} from 'k6/metrics'; . . . let vus_connections = {}; let mqttcount = new Gauge('mqttCount'); . . . _export function mqttFlow() { let k6Message = randomPayload(); const k6PubId = pub-${__VU}; let pub_client = mqtt.connectPub(k6PubId, vus_connections) vus_connections[k6PubId] = pub_client mqtt.publish(pub_client, k6Message) mqtt_count.add(ENV.DEVICE_COUNT_MQTT1); }

When I disable INFLUX everything works fine

pmalhaire commented 1 year ago

Thanks for the report do you have any chance a simple script linux or macos that I Can run to reproduce thé issue ?

KIMobile commented 1 year ago

i run my script with docker-compose on windows docker-compose -f .\docker-compose-test.yml up

pmalhaire commented 1 year ago

I pushed a fix you can try it I'll push a tag if it works for you

pmalhaire commented 1 year ago

Closed should be fixed