Edge-home-orchestration-go: [DataStorage] não pode encontrar o dispositivo no cache

Criado em 8 jun. 2021  ·  10Comentários  ·  Fonte: lf-edge/edge-home-orchestration-go

Descreva o bug
A orquestração de borda não pode encontrar o dispositivo no cache se a orquestração de borda registrar a configuração do dispositivo para a edgex pela primeira vez. Funciona após a reinicialização.

Reproduzir

  1. Limpar banco de dados redis
  2. Execute orquestração de ponta com arquivos de configuração DataStorage
  3. Chame uma API em termos de upload de valor Int

Log da orquestração de borda

level=INFO ts=2021-06-08T11:09:41.747141457Z app=datastorage source=config.go:193 msg="Loaded configuration from ./res/configuration.toml"

level=INFO ts=2021-06-08T11:09:41.748290804Z app=datastorage source=config.go:304 msg="Using local configuration from file (0 envVars overrides applied)"
level=INFO ts=2021-06-08T11:09:41.748336679Z app=datastorage source=httpserver.go:99 msg="Web server starting (127.0.0.1:49986)"
level=INFO ts=2021-06-08T11:09:41.748393149Z app=datastorage source=init.go:144 msg="Check Metadata service's status by ping..."
level=INFO ts=2021-06-08T11:09:41.748528479Z app=datastorage source=init.go:144 msg="Check Data service's status by ping..."
level=INFO ts=2021-06-08T11:09:41.749614627Z app=datastorage source=init.go:68 msg="Service clients initialize successful."
level=INFO ts=2021-06-08T11:09:41.750747311Z app=datastorage source=service.go:207 msg="Addressable datastorage doesn't exist, creating a new one"
level=DEBUG ts=2021-06-08T11:09:41.751916563Z app=datastorage source=service.go:153 msg="Trying to find DeviceService: datastorage"
level=INFO ts=2021-06-08T11:09:41.752643978Z app=datastorage source=service.go:157 msg="DeviceService datastorage doesn't exist, creating a new one"
level=DEBUG ts=2021-06-08T11:09:41.754344754Z app=datastorage source=service.go:169 msg="New DeviceService Id: 6faac9ac-6ec1-41ee-8661-927954bb7ea1"
INFO[2021-06-08T11:09:41Z]storagedriver.go:43 Initialize [storagedriver] Device service intialize started
level=DEBUG ts=2021-06-08T11:09:41.75790956Z app=datastorage source=restrouter.go:119 route=/api/v1/resource/{deviceName}/{resourceName} methods=[POST] msg="Route added"
level=INFO ts=2021-06-08T11:09:41.757963324Z app=datastorage source=storagehandler.go:66 msg="Route /api/v1/resource/{deviceName}/{resourceName} added."
level=INFO ts=2021-06-08T11:09:41.759800964Z app=datastorage source=restrouter.go:75 msg="Registering v2 routes..."
level=DEBUG ts=2021-06-08T11:09:41.76021791Z app=datastorage source=profiles.go:47 msg="created absolute path for loading pre-defined Device Profiles: /edge-orchestration/res"
level=DEBUG ts=2021-06-08T11:09:41.76330122Z app=datastorage source=profiles.go:172 msg="Getting EnableValueDescriptorManagement configuration value from Core Metadata"
level=DEBUG ts=2021-06-08T11:09:41.763993203Z app=datastorage source=devices.go:29 msg="Loading pre-define Devices from configuration"
level=DEBUG ts=2021-06-08T11:09:41.764037017Z app=datastorage source=devices.go:35 msg="Device datastorage doesn't exist, creating a new one"
level=DEBUG ts=2021-06-08T11:09:41.764581907Z app=datastorage source=devices.go:75 msg="Adding Device: {\"origin\":1623150581764,\"description\":\"RESTful Device\",\"name\":\"datastorage\",\"adminState\":\"UNLOCKED\",\"operatingState\":\"ENABLED\",\"protocols\":{\"other\":{}},\"labels\":[\"rest\",\"json\"],\"service\":{\"origin\":1623150581751,\"id\":\"6faac9ac-6ec1-41ee-8661-927954bb7ea1\",\"name\":\"datastorage\",\"operatingState\":\"ENABLED\",\"addressable\":{\"origin\":1623150581749,\"id\":\"7b016ca7-5b53-4aa3-88e5-6f4a0b484271\",\"name\":\"datastorage\",\"protocol\":\"HTTP\",\"method\":\"POST\",\"address\":\"127.0.0.1\",\"port\":49986,\"path\":\"/api/v1/callback\",\"baseURL\":\"http://127.0.0.1:49986\",\"url\":\"http://127.0.0.1:49986/api/v1/callback\"},\"adminState\":\"UNLOCKED\"},\"profile\":{\"description\":\"REST Device\",\"id\":\"3b356db4-fe39-4dc4-bd25-8bebef5e15ce\",\"name\":\"datastorage\",\"manufacturer\":\"Home Edge\",\"model\":\"Home Edge\",\"labels\":[\"rest\",\"json\",\"numeric\",\"float\",\"int\"],\"deviceResources\":[{\"description\":\"json\",\"name\":\"json\",\"properties\":{\"value\":{\"type\":\"String\",\"readWrite\":\"RW\",\"mediaType\":\"application/json\"},\"units\":{\"type\":\"String\",\"readWrite\":\"R\"}}},{\"name\":\"int\",\"properties\":{\"value\":{\"type\":\"Int64\",\"readWrite\":\"RW\",\"mediaType\":\"text/plain\"},\"units\":{\"type\":\"String\",\"readWrite\":\"R\"}}},{\"description\":\"float\",\"name\":\"float\",\"properties\":{\"value\":{\"type\":\"Float64\",\"readWrite\":\"RW\",\"mediaType\":\"text/plain\"},\"units\":{\"type\":\"String\",\"readWrite\":\"R\"}}},{\"description\":\"jpeg\",\"name\":\"jpeg\",\"properties\":{\"value\":{\"type\":\"Binary\",\"readWrite\":\"RW\",\"mediaType\":\"image/jpeg\"},\"units\":{\"type\":\"String\",\"readWrite\":\"R\"}}},{\"description\":\"png\",\"name\":\"png\",\"properties\":{\"value\":{\"type\":\"Binary\",\"readWrite\":\"RW\",\"mediaType\":\"image/png\"},\"units\":{\"type\":\"String\",\"readWrite\":\"R\"}}},{\"description\":\"string\",\"name\":\"string\",\"properties\":{\"value\":{\"type\":\"String\",\"readWrite\":\"RW\",\"mediaType\":\"text/plain\"},\"units\":{\"type\":\"String\",\"readWrite\":\"R\"}}}]}}"
level=INFO ts=2021-06-08T11:09:41.766971106Z app=datastorage source=autodiscovery.go:32 msg="AutoDiscovery stopped: disabled by configuration"
level=INFO ts=2021-06-08T11:09:41.767031297Z app=datastorage source=autodiscovery.go:37 msg="AutoDiscovery stopped: interval error in configuration"
level=INFO ts=2021-06-08T11:09:41.76706353Z app=datastorage source=autodiscovery.go:41 msg="AutoDiscovery stopped: ProtocolDiscovery not implemented"
level=INFO ts=2021-06-08T11:09:41.767094873Z app=datastorage source=message.go:50 msg="Service dependencies resolved..."
level=INFO ts=2021-06-08T11:09:41.767156624Z app=datastorage source=message.go:51 msg="Starting datastorage to be replaced by makefile "
level=INFO ts=2021-06-08T11:09:41.767182718Z app=datastorage source=message.go:58 msg="Service started in: 20.913936ms"


level=DEBUG ts=2021-06-08T11:09:51.973581107Z app=datastorage source=storagehandler.go:84 msg="Received POST for Device=datastorage Resource=int"
level=INFO ts=2021-06-08T11:09:51.973670443Z app=datastorage source=manageddevices.go:71 msg="Device datastorage cannot be found in cache"
level=ERROR ts=2021-06-08T11:09:51.973714012Z app=datastorage source=storagehandler.go:88 msg="Incoming reading ignored. Device 'datastorage' not found"

Configuração do ambiente de teste (preencha as seguintes informações):

  • Versão do firmware: Ubuntu 20.04
  • Hardware: x86-64
  • Lançamento de orquestração de borda: coco
bug help wanted high priority

Comentários muito úteis

.search-word {
COR DE FUNDO: # ffee94
}
P {
TAMANHO DA FONTE: 10pt; MARGEM INFERIOR: 5px; FONT-FAMILY: Arial, arial; MARGIN-TOP: 5px
}
TD {
TAMANHO DA FONTE: 10pt; MARGEM INFERIOR: 5px; FONT-FAMILY: Arial, arial; MARGIN-TOP: 5px
}
LI {
TAMANHO DA FONTE: 10pt; MARGEM INFERIOR: 5px; FONT-FAMILY: Arial, arial; MARGIN-TOP: 5px
}
CORPO {
TAMANHO DA FONTE: 10pt; FONT-FAMILY: Arial, arial
}

P {
TAMANHO DA FONTE: 10pt; MARGIN-BOTTOM: 5px; FONT-FAMILY: Arial, arial; MARGIN-TOP: 5px
}


Olá Peter,

O problema não é do lado do EdgeX. Depois de discutir com Cloud Tsai, entendi que é o uso de endereço IP errado por causa do qual o coredata não foi capaz de invocar o retorno de chamada e, portanto, o cache não foi atualizado. Para a máquina local, o problema foi resolvido usando o endereço IP docker0 conforme testei.
Mas agora o problema é o cenário em que Taewan mencionou muito bem o EdgeX rodando independentemente em um dispositivo e o Edge-Orchestration rodando em outro dispositivo conectado na rede. Portanto, isso deve ser testado independentemente do problema de cache. Estou tentando fazer uma configuração semelhante. Embora eu testei um cenário semelhante com a docker de ping normal (alpine) e foi capaz de configurar a comunicação usando a rede overlay. Agora eu preciso tentar a orquestração de ponta.

Obrigado e cumprimentos
Nitu

--------- Mensagem original ---------
Remetente: Peter Moonki @ . >Data: 2021-09-07 07:46 (GMT + 5: 30)Título: Re: [lf-edge / edge-home-orchestration-go] [DataStorage] não consegue encontrar o dispositivo no cache (# 312)Para: * @ . >
CC: Nitu Sajjanlal @ . >, @ . * >

@ nitu-s-gupta O que você acha de resolver esse problema da HomeEdge em vez de solicitá-lo no EdgeX, já que me parece que a lógica de nossa solicitação está em conflito com o dispositivo-sdk-go existente no EdgeX?
—Você está recebendo isto porque foi mencionado.Responda a este e-mail diretamente, visualize-o no GitHub ou cancele a inscrição.Notificações de transporte em qualquer lugar com o GitHub Mobile para iOS ou Android.

Todos 10 comentários

Olá @ t25kim ,

Eu repliquei o bug. Isso está acontecendo sempre que tentamos adicionar um novo dispositivo também.

Exemplo :

  1. Se editarmos o nome do perfil YAML
  2. Edite o nome do dispositivo no arquivo de configuração

Este dispositivo não seria descoberto até que o construíssemos pela segunda vez. Tentei várias vezes e este problema parece ser consistente. Estou verificando se isso foi um problema com o lançamento de Hanói ou se precisa ser feito da nossa parte.

Olá @ t25kim ,

Eu repliquei o bug. Isso está acontecendo sempre que tentamos adicionar um novo dispositivo também.

Exemplo :

  1. Se editarmos o nome do perfil YAML
  2. Edite o nome do dispositivo no arquivo de configuração

Este dispositivo não seria descoberto até que o construíssemos pela segunda vez. Tentei várias vezes e este problema parece ser consistente. Estou verificando se isso foi um problema com o lançamento de Hanói ou se precisa ser feito da nossa parte.

Obrigado @ sun-sharma.
Eu tive o mesmo problema com o EdgeX v2.0.0. Teste-o com o PR # 326.

Esse problema é do lado do EdgeX. Quando o serviço é iniciado, os dispositivos já presentes nos metadados são carregados no cache. Mas os dispositivos adicionados não são adicionados ao cache. Portanto, isso não ocorre após a reinicialização. Eu tentei com device-rest.go. Observou o mesmo comportamento. Mudanças são necessárias no device-sdk da edgex foundry. Arquivos que verifiquei (/internal/provision/devices.go) do sdk do dispositivo se edgexfoundry. Isso é chamado na inicialização do dispositivo.

Esse problema é do lado do EdgeX. Quando o serviço é iniciado, os dispositivos já presentes nos metadados são carregados no cache. Mas os dispositivos adicionados não são adicionados ao cache. Portanto, isso não ocorre após a reinicialização. Eu tentei com device-rest.go. Observou o mesmo comportamento. Mudanças são necessárias no device-sdk da edgex foundry. Arquivos que verifiquei (/internal/provision/devices.go) do sdk do dispositivo se edgexfoundry. Isso é chamado na inicialização do dispositivo.

@ nitu-s-gupta Que tal abordar o EdgeX comigo e tentar resolver esse problema? 😄

Esse problema é do lado do EdgeX. Quando o serviço é iniciado, os dispositivos já presentes nos metadados são carregados no cache. Mas os dispositivos adicionados não são adicionados ao cache. Portanto, isso não ocorre após a reinicialização. Eu tentei com device-rest.go. Observou o mesmo comportamento. Mudanças são necessárias no device-sdk da edgex foundry. Arquivos que verifiquei (/internal/provision/devices.go) do sdk do dispositivo se edgexfoundry. Isso é chamado na inicialização do dispositivo.

Obrigado pelo seu esforço!
Deixe-me explicar com mais detalhes, edgex-metadata deve enviar uma solicitação (o guia está incorreto) para o serviço de atualização do cache. No entanto, edgex-metadata não faz isso.
Quando chamei aquela API REST para armazenamento de dados, o cache foi atualizado.

dados de metadados da edgex

curl http://localhost:48081/api/v1/device
[{"created":1629351516733,"modified":1629351516733,"origin":1629351516731,"description":"RESTful Device","id":"774deba4-5469-4c38-8c2a-93a0f3c08252","name":"edge-orchestration-c1b23cc6-0767-400a-9cf0-36e1b3902da2",

Pedido CURL

$ curl -X 'POST' ' http: // localhost : 49986 / api / v1 / callback' -H 'aceitar: / ' -H 'Content-Type: application / json' -d '{"type": "DEVICE "," id ":" 774deba4-5469-4c38-8c2a-93a0f3c08252 "} '

Log de orquestração de borda

INFO[2021-08-19T06:01:36Z]discovery.go:577 func1
level=INFO ts=2021-08-19T06:02:25.506828567Z app=datastorage source=device.go:72 msg="Added device: edge-orchestration-c1b23cc6-0767-400a-9cf0-36e1b3902da2"
INFO[2021-08-19T06:02:25Z]storagedriver.go:73 AddDevice [storagedriver] Device has been successfully added!!!!!! edge-orchestration-c1b23cc6-0767-400a-9cf0-36e1b3902da2
level=DEBUG ts=2021-08-19T06:02:25.50692288Z app=datastorage source=device.go:82 msg="Invoked driver.AddDevice callback for edge-orchestration-c1b23cc6-0767-400a-9cf0-36e1b3902da2"
level=DEBUG ts=2021-08-19T06:02:25.50693632Z app=datastorage source=device.go:89 msg="Handler - starting AutoEvents for device edge-orchestration-c1b23cc6-0767-400a-9cf0-36e1b3902da2"

Acho que edgex seria corrigido ou podemos adicionar algum código de solução alternativa para armazenamento de dados.
O que você prefere? (Compartilhar este problema com a edgex é bom para colaboração de código aberto

@ t25kim Que tal levantar um problema no edgex github do dispositivo sdk ?, para que ele possa ser atualizado. A solução alternativa pode ser feita como chamar a API. Mas mais uma coisa que notei é storagedriver, temos retornos de chamada, que devem ser invocados quando o dispositivo é adicionado. Mas isso também não é invocado, uma vez que as etapas de trabalho aorund seriam incluídas lá

Esse problema é do lado do EdgeX. Quando o serviço é iniciado, os dispositivos já presentes nos metadados são carregados no cache. Mas os dispositivos adicionados não são adicionados ao cache. Portanto, isso não ocorre após a reinicialização. Eu tentei com device-rest.go. Observou o mesmo comportamento. Mudanças são necessárias no device-sdk da edgex foundry. Arquivos que verifiquei (/internal/provision/devices.go) do sdk do dispositivo se edgexfoundry. Isso é chamado na inicialização do dispositivo.

Obrigado pelo seu esforço!
Deixe-me explicar com mais detalhes, edgex-metadata deve enviar uma solicitação (o guia está incorreto) para o serviço de atualização do cache. No entanto, edgex-metadata não faz isso.
Quando chamei aquela API REST para armazenamento de dados, o cache foi atualizado.

dados de metadados da edgex

curl http://localhost:48081/api/v1/device
[{"created":1629351516733,"modified":1629351516733,"origin":1629351516731,"description":"RESTful Device","id":"774deba4-5469-4c38-8c2a-93a0f3c08252","name":"edge-orchestration-c1b23cc6-0767-400a-9cf0-36e1b3902da2",

Pedido CURL

$ curl -X 'POST' ' http: // localhost : 49986 / api / v1 / callback' -H 'aceitar: _ / _' -H 'Content-Type: application / json' -d '{"type": "DISPOSITIVO", "id": "774deba4-5469-4c38-8c2a-93a0f3c08252"} '

Log de orquestração de borda

INFO[2021-08-19T06:01:36Z]discovery.go:577 func1
level=INFO ts=2021-08-19T06:02:25.506828567Z app=datastorage source=device.go:72 msg="Added device: edge-orchestration-c1b23cc6-0767-400a-9cf0-36e1b3902da2"
INFO[2021-08-19T06:02:25Z]storagedriver.go:73 AddDevice [storagedriver] Device has been successfully added!!!!!! edge-orchestration-c1b23cc6-0767-400a-9cf0-36e1b3902da2
level=DEBUG ts=2021-08-19T06:02:25.50692288Z app=datastorage source=device.go:82 msg="Invoked driver.AddDevice callback for edge-orchestration-c1b23cc6-0767-400a-9cf0-36e1b3902da2"
level=DEBUG ts=2021-08-19T06:02:25.50693632Z app=datastorage source=device.go:89 msg="Handler - starting AutoEvents for device edge-orchestration-c1b23cc6-0767-400a-9cf0-36e1b3902da2"

Acho que edgex seria corrigido ou podemos adicionar algum código de solução alternativa para armazenamento de dados.
O que você prefere? (Compartilhar este problema com a edgex é bom para colaboração de código aberto

@jpwhitemn Olá, encontramos o problema com o armazenamento de dados relacionado ao EdgeX Foundry. Você poderia nos apresentar a pessoa certa da comunidade EdgeX para discutir e / ou resolver este tópico? 😄

Que tal levantar um problema no edgex github do device sdk ?, para que ele possa ser atualizado. A solução alternativa pode ser feita como chamar a API. Mas mais uma coisa que notei é storagedriver, temos retornos de chamada, que devem ser invocados quando o dispositivo é adicionado. Mas isso também não é invocado, uma vez que as etapas de trabalho aorund seriam incluídas lá

Eu concordo em compartilhar este problema com a edgex. No entanto, se o patch não for implementado no edgex antes do lançamento do home edge d, vamos corrigi-lo no Edge Orchestration.

.search-word {
COR DE FUNDO: # ffee94
}
P {
TAMANHO DA FONTE: 10pt; MARGEM INFERIOR: 5px; FONT-FAMILY: Arial, arial; MARGIN-TOP: 5px
}
TD {
TAMANHO DA FONTE: 10pt; MARGEM INFERIOR: 5px; FONT-FAMILY: Arial, arial; MARGIN-TOP: 5px
}
LI {
TAMANHO DA FONTE: 10pt; MARGEM INFERIOR: 5px; FONT-FAMILY: Arial, arial; MARGIN-TOP: 5px
}
CORPO {
TAMANHO DA FONTE: 10pt; FONT-FAMILY: Arial, arial
}

P {
TAMANHO DA FONTE: 10pt; MARGIN-BOTTOM: 5px; FONT-FAMILY: Arial, arial; MARGIN-TOP: 5px
}


Olá Peter,

O problema não é do lado do EdgeX. Depois de discutir com Cloud Tsai, entendi que é o uso de endereço IP errado por causa do qual o coredata não foi capaz de invocar o retorno de chamada e, portanto, o cache não foi atualizado. Para a máquina local, o problema foi resolvido usando o endereço IP docker0 conforme testei.
Mas agora o problema é o cenário em que Taewan mencionou muito bem o EdgeX rodando independentemente em um dispositivo e o Edge-Orchestration rodando em outro dispositivo conectado na rede. Portanto, isso deve ser testado independentemente do problema de cache. Estou tentando fazer uma configuração semelhante. Embora eu testei um cenário semelhante com a docker de ping normal (alpine) e foi capaz de configurar a comunicação usando a rede overlay. Agora eu preciso tentar a orquestração de ponta.

Obrigado e cumprimentos
Nitu

--------- Mensagem original ---------
Remetente: Peter Moonki @ . >Data: 2021-09-07 07:46 (GMT + 5: 30)Título: Re: [lf-edge / edge-home-orchestration-go] [DataStorage] não consegue encontrar o dispositivo no cache (# 312)Para: * @ . >
CC: Nitu Sajjanlal @ . >, @ . * >

@ nitu-s-gupta O que você acha de resolver esse problema da HomeEdge em vez de solicitá-lo no EdgeX, já que me parece que a lógica de nossa solicitação está em conflito com o dispositivo-sdk-go existente no EdgeX?
—Você está recebendo isto porque foi mencionado.Responda a este e-mail diretamente, visualize-o no GitHub ou cancele a inscrição.Notificações de transporte em qualquer lugar com o GitHub Mobile para iOS ou Android.

Obrigado pelo seu tipo de esclarecimento, @ nitu-s-gupta 😄

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