Wenn Sie ein Gateway löschen und dann ein neues mit demselben EUI hinzufügen, schlägt dies fehl, weil es sich beschwert, dass das Gateway bereits vorhanden ist.
{
"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"
}
]
}
Erstellen Sie erfolgreich das neue Gateway
Amazon Linux mit TTN CLI und Postman mit API Call
Wenn der Benutzer versucht, ein gelöschtes Gateway einzufügen, aktualisieren Sie das Gelöscht-Flag auf „false“.
...
Ich habe dieses Problem ein wenig aktualisiert, um einen etwas anderen Umfang als # 1121 zu haben, wodurch wir mehr über die Wiederherstellung gelöschter Entitäten im Allgemeinen (anstatt nur Anwendungen) machen können.
In der aktuellen Ausgabe konzentrieren wir uns mehr auf das Hinzufügen neuer Gateways mit demselben EUI wie ein gelöschtes Gateway.
Bezogen auf https://github.com/TheThingsNetwork/lorawan-stack/issues/604 (Freigabe von IDs/EUIs)
@htdvisser selbst mit https://github.com/TheThingsNetwork/lorawan-stack/issues/1703 (jetzt in Next Up) deckt den üblichen Anwendungsfall nicht vollständig ab, ein Gateway mit einem zuvor verwendeten EUI erstellen zu können . Einen Administrator einzuschleifen, um eine Entität zu bereinigen, ist keine schöne Benutzererfahrung, außerdem ist die Bereinigung einer Entität zerstörerischer als die einfache Freigabe der EUI.
Afaik haben wir keine Sicherheitsprobleme mit der Freigabe der EUI beim Löschen des Gateways. Es ist bereits optional. Es würde natürlich zu einer teilweisen Wiederherstellung führen, dh die EUI ist weg, aber ich denke, das ist akzeptabel und stimmt auch damit überein, wie Geräte-EUIs beim sofortigen Löschen freigegeben werden.
Können wir dieses Problem schließen, indem wir einfach die EUI beim Löschen des Gateways freigeben? Wenn nein, warum nicht?
Ja, wir könnten das Gateway-EUI-Feld beim Löschen auf nil/NULL aktualisieren. Sollte so einfach sein wie das Hinzufügen von a
// 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
}
in pkg/identityserver/store/hooks.go
.
@bafonins kannst du das abholen?
@adamsondelacruz bitte erneut öffnen, wenn https://github.com/TheThingsNetwork/lorawan-stack/pull/1843 das Problem nicht löst.