Lorawan-stack: 重用已删除网关的 EUI

创建于 2019-08-07  ·  7评论  ·  资料来源: TheThingsNetwork/lorawan-stack

概括

当您删除网关然后添加具有相同 EUI 的新网关时,如果失败,因为它抱怨网关已经存在。

重现步骤

  1. 删除现有网关
  2. 使用 CLI 添加它或
  3. 使用 API 添加它

你现在看到了什么?

{
    "code": 6,
    "message": "error:pkg/identityserver/store:already_exists (entity already exists)",
    "details": [
        {
            "@type": "type.googleapis.com/ttn.lorawan.v3.ErrorDetails",
            "namespace": "pkg/identityserver/store",
            "name": "already_exists",
            "message_format": "entity already exists",
            "attributes": {
                "field": "gateway_eui",
                "value": "'3135313749005303'"
            },
            "correlation_id": "c0dc6bb73d714702bd8d0be57e83f369"
        }
    ]
}

你想看到什么?


成功创建新网关

环境

amazon linux 使用 TTN CLI 和 Postman 使用 API 调用

你建议如何实施?

当用户尝试插入已删除的网关时,将已删除标志更新为 false

你可以自己做这个并提交一个拉请求吗?

...

identity server in progress

所有7条评论

我稍微更新了这个问题,使其范围与 #1121 略有不同,我们可以在一般情况下恢复已删除的实体(而不仅仅是应用程序)。

在本期中,让我们更多地关注添加与已删除网关具有相同 EUI 的新网关。

@htdvisser甚至拥有https://github.com/TheThingsNetwork/lorawan-stack/issues/1703 (现在在 Next Up)并没有完全涵盖能够使用以前使用过的 EUI 创建网关的常见用例. 循环管理员来清除实体并不是一个好的用户体验,而且清除实体比简单地释放 EUI 更具破坏性。

Afaik 我们在删除网关时释放 EUI 没有安全问题。 它已经是可选的了。 显然,这会使恢复部分恢复,即 EUI 消失了,但我认为这是可以接受的,并且与设备 EUI 在删除时立即释放的方式一致。

我们可以通过简单地在网关删除时释放 EUI 来解决这个问题吗? 如果不是,为什么不呢?

是的,我们可以在删除时将 Gateway EUI 字段更新为 nil/NULL。 应该像添加一个一样简单

// AfterDelete releases the EUI of a Gateway after it is deleted.
func (gtw *Gateway) AfterDelete(db *gorm.DB) error {
    return db.Unscoped().Model(gtw).UpdateColumn("gateway_eui", nil).Error
}

pkg/identityserver/store/hooks.go

@bafonins你能把这个捡起来吗?

@adamsondelacruz如果https://github.com/TheThingsNetwork/lorawan-stack/pull/1843不能解决问题,请重新打开。

此页面是否有帮助?
0 / 5 - 0 等级