Lorawan-stack: Reutilizando EUIs de Gateways Excluídos

Criado em 7 ago. 2019  ·  7Comentários  ·  Fonte: TheThingsNetwork/lorawan-stack

Resumo

Quando você exclui um gateway e depois adiciona um novo com o mesmo EUI, se falha porque reclama que o gateway já existe.

Passos para reproduzir

  1. Remover um gateway existente
  2. Adicione-o usando a CLI ou
  3. Adicione-o usando a API

O que você vê agora?

{
    "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"
        }
    ]
}

O que você quer ver em vez disso?


Crie com sucesso o novo gateway

Ambiente

amazon linux usando TTN CLI e Postman usando API Call

Como você se propõe a implementar isso?

Quando o usuário tentar inserir um gateway excluído, atualize o sinalizador excluído para falso

Você pode fazer isso sozinho e enviar um Pull Request?

...

identity server in progress

Todos 7 comentários

Atualizei um pouco esse problema para ter um escopo um pouco diferente do #1121, que podemos fazer mais sobre a restauração de entidades excluídas em geral (em vez de apenas aplicativos).

Na edição atual, vamos nos concentrar mais na adição de novos gateways com o mesmo EUI de um gateway excluído.

@htdvisser mesmo tendo https://github.com/TheThingsNetwork/lorawan-stack/issues/1703 (agora em Next Up) não está cobrindo inteiramente o caso de uso comum de poder criar um gateway com um EUI que foi usado antes . Fazer um loop em um administrador para limpar uma entidade não é uma boa experiência para o usuário, além disso, limpar uma entidade é mais destrutivo do que simplesmente liberar o EUI.

Afaik, não temos problemas de segurança com a liberação do EUI ao excluir o gateway. Já é opcional. Obviamente, tornaria a recuperação parcial, ou seja, o EUI se foi, mas acho que isso é aceitável e também se alinha com a forma como os EUIs do dispositivo são liberados na exclusão imediatamente.

Podemos fechar esse problema simplesmente liberando o EUI na exclusão do gateway? Se não, por que não?

Sim, podemos atualizar o campo Gateway EUI para nil/NULL na exclusão. Deve ser tão simples quanto adicionar um

// 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
}

em pkg/identityserver/store/hooks.go .

@bafonins você pode pegar isso?

@adamsondelacruz reabra se https://github.com/TheThingsNetwork/lorawan-stack/pull/1843 não resolver o problema.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

johanstokking picture johanstokking  ·  8Comentários

htdvisser picture htdvisser  ·  9Comentários

ecities picture ecities  ·  5Comentários

bafonins picture bafonins  ·  5Comentários

adriansmares picture adriansmares  ·  8Comentários