ゲートウェイを削除してから、同じ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"
}
]
}
新しいゲートウェイを正常に作成する
TTNCLIを使用するamazonlinuxとAPI呼び出しを使用するPostman
ユーザーが削除されたゲートウェイを挿入しようとしたときに、削除されたフラグをfalseに更新します
..。
この問題を少し更新して、#1121とは少し異なるスコープを設定しました。これにより、(アプリケーションだけでなく)一般的に削除されたエンティティの復元について詳しく知ることができます。
現在の問題では、削除されたゲートウェイと同じEUIを持つ新しいゲートウェイの追加に焦点を当てましょう。
@htdvisserは、 https://github.com/TheThingsNetwork/lorawan-stack/issues/1703 (現在はNext Up)を持っていても、以前に使用されたEUIを使用してゲートウェイを作成できるという一般的なユースケースを完全にはカバーしていません。 。 管理者をループしてエンティティを削除することは、優れたユーザーエクスペリエンスではありません。さらに、エンティティを削除することは、単にEUIを解放するよりも破壊的です。
ゲートウェイを削除するときにEUIを解放しても、セキュリティ上の問題はありません。 すでにオプションです。 明らかに、リカバリが部分的になります。つまり、EUIがなくなりますが、これは許容範囲であり、デバイスのEUIが削除時にすぐに解放される方法とも一致すると思います。
ゲートウェイの削除時にEUIを解放するだけで、この問題を解決できますか? そうでない場合は、なぜですか?
はい、削除時にゲートウェイ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あなたはこれを拾うことができますか?
https://github.com/TheThingsNetwork/lorawan-stack/pull/1843で問題が解決しない場合は、 @ adamsondelacruzを再度開いてください。