Handle join-request error error=rx_info_set is empty

Viewed 32

Hi,
I'm trying to configure Lorawan roaming beetween Chirpstack and Actility.
I set the configuration according the documentation found online but when a device try to execute a Join Request, Chirsptack wrote this error message:

2025-11-21T09:08:40.491679Z ERROR up{deduplication_id=b3011a99-4046-40f1-81bd-2782314ca8f9}: chirpstack::uplink::join: Handle join-request error error=rx_info_set is empty

I checked the rust source code and I found the errore message on file "mod.rs":

fn filter_rx_info_by_public_only(uplink: &mut UplinkFrameSet) -> Result<()> {
    let mut rx_info_set: Vec<gw::UplinkRxInfo> = Vec::new();

    for rx_info in &uplink.rx_info_set {
        let gateway_id = EUI64::from_str(&rx_info.gateway_id).context("Gateway ID")?;
        if !(*uplink
            .gateway_private_up_map
            .get(&gateway_id)
            .ok_or_else(|| anyhow!("gateway_id missing in gateway_private_up_map"))?)
        {
            rx_info_set.push(rx_info.clone());
        }
    }

    uplink.rx_info_set = rx_info_set;
    if uplink.rx_info_set.is_empty() {
        return Err(anyhow!("rx_info_set is empty"));
    }

    Ok(())
}

I checked the json message sent via MQTT and it seems to have all the information.

{
    "phy_payload": {
        "mhdr": {
            "f_type": "JoinRequest",
            "major": "LoRaWANR1"
        },
        "mic": [
            67,
            238,
            68,
            5
        ],
        "payload": {
            "dev_eui": "1234567890abcdef",
            "dev_nonce": 62507,
            "join_eui": "0000000000000000"
        }
    },
    "rx_info": [
        {
            "channel": 1,
            "context": "dkoEPw==",
            "crcStatus": "CRC_OK",
            "gatewayId": "1234567890abcdef",
            "location": {},
            "nsTime": "2025-11-21T09:12:15.853369653+00:00",
            "rfChain": 1,
            "rssi": -48,
            "snr": 9.800000190734863,
            "uplinkId": 45591
        }
    ],
    "tx_info": {
        "frequency": 868300000,
        "modulation": {
            "lora": {
                "bandwidth": 125000,
                "codeRate": "CR_4_5",
                "spreadingFactor": 11
            }
        }
    }
}

Any idea ?

2 Answers

The issue is that between putting the uplink in Redis (as part of the deduplication process) and reading the collected set takes longer than the Redis deduplication key TTL (2 * deduplication_delay). Could it be that there is a high latency between Redis and ChirpStack? Or that it takes a long time for Redis to process the query?

Hi Orne,
I have the same issue using the default setup on docker:
https://github.com/chirpstack/chirpstack-docker

I tried also some optimization:

Disabled persistence on redis:
on file docker-compose.yaml:

    command: redis-server --save "" --appendonly no

Increased the deduplication delay.
on file chirpstack.toml:

deduplication_delay = "400ms"

but the result is always the same:

2025-11-24T12:06:06.638215Z ERROR up{deduplication_id=1cff4adc-88e2-44c3-b711-57df95500713}: chirpstack::uplink::join: Handle join-request error error=rx_info_set is empty