Когда вы удаляете шлюз, а затем добавляете новый с тем же 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, что и у удаленного шлюза.
Связано с https://github.com/TheThingsNetwork/lorawan-stack/issues/604 (выпуск идентификаторов/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 , ты можешь забрать это?
@adamsondelacruz, пожалуйста, снова откройте, если https://github.com/TheThingsNetwork/lorawan-stack/pull/1843 не решит проблему.