当您删除网关然后添加具有相同 EUI 的新网关时,如果失败,因为它抱怨网关已经存在。
{
"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
...
我稍微更新了这个问题,使其范围与 #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不能解决问题,请重新打开。