Skip to content

Commit d47b36b

Browse files
committed
Cleanup DevEUI from DevAddr > DevEUI set, if DS does not exist.
1 parent d11e570 commit d47b36b

File tree

2 files changed

+53
-6
lines changed

2 files changed

+53
-6
lines changed

internal/storage/device_session.go

+17-6
Original file line numberDiff line numberDiff line change
@@ -421,12 +421,23 @@ func GetDeviceSessionsForDevAddr(ctx context.Context, devAddr lorawan.DevAddr) (
421421
for _, devEUI := range devEUIs {
422422
s, err := GetDeviceSession(ctx, devEUI)
423423
if err != nil {
424-
// TODO: in case not found, remove the DevEUI from the list
425-
log.WithError(err).WithFields(log.Fields{
426-
"dev_addr": devAddr,
427-
"dev_eui": devEUI,
428-
"ctx_id": ctx.Value(logging.ContextIDKey),
429-
}).Warning("get device-session for devaddr error")
424+
if err == ErrDoesNotExist {
425+
key := GetRedisKey(devAddrKeyTempl, devAddr)
426+
if err := RedisClient().SRem(ctx, key, devEUI[:]).Err(); err != nil {
427+
log.WithError(err).WithFields(log.Fields{
428+
"dev_addr": devAddr,
429+
"dev_eui": devEUI,
430+
"ctx_id": ctx.Value(logging.ContextIDKey),
431+
}).Error("remove deveui from devaddr set error")
432+
}
433+
} else {
434+
log.WithError(err).WithFields(log.Fields{
435+
"dev_addr": devAddr,
436+
"dev_eui": devEUI,
437+
"ctx_id": ctx.Value(logging.ContextIDKey),
438+
}).Error("get device-session for devaddr error")
439+
}
440+
430441
continue
431442
}
432443

internal/storage/device_session_test.go

+36
Original file line numberDiff line numberDiff line change
@@ -356,3 +356,39 @@ func TestGetFullFCntUp(t *testing.T) {
356356
assert.Equalf(test.FullFCnt, out, "Test %d: expected %d, got %d", i, test.FullFCnt, out)
357357
}
358358
}
359+
360+
func TestGetDeviceSessionsForDevAddr(t *testing.T) {
361+
assert := require.New(t)
362+
conf := test.GetConfig()
363+
assert.NoError(Setup(conf))
364+
365+
RedisClient().FlushAll(context.Background())
366+
367+
devAddr := lorawan.DevAddr{1, 2, 3, 4}
368+
devEUI1 := lorawan.EUI64{1, 1, 1, 1, 1, 1, 1, 1}
369+
devEUI2 := lorawan.EUI64{2, 2, 2, 2, 2, 2, 2, 2}
370+
371+
ds := DeviceSession{
372+
DevAddr: devAddr,
373+
DevEUI: devEUI1,
374+
}
375+
assert.NoError(SaveDeviceSession(context.Background(), ds))
376+
377+
key := GetRedisKey(devAddrKeyTempl, devAddr)
378+
assert.NoError(RedisClient().SAdd(context.Background(), key, devEUI2[:]).Err())
379+
380+
euis, err := GetDevEUIsForDevAddr(context.Background(), devAddr)
381+
assert.NoError(err)
382+
assert.Len(euis, 2)
383+
384+
dss, err := GetDeviceSessionsForDevAddr(context.Background(), devAddr)
385+
assert.NoError(err)
386+
assert.Len(dss, 1)
387+
388+
// DevEUI2 should be removed from the set, as no device-session exists (anymore)
389+
// for this DevEUI.
390+
euis, err = GetDevEUIsForDevAddr(context.Background(), devAddr)
391+
assert.NoError(err)
392+
assert.Equal([]lorawan.EUI64{devEUI1}, euis)
393+
394+
}

0 commit comments

Comments
 (0)