Pular para o conteúdo
ColliePWA

07/Documentation

Solução de problemas de um durable agent

Um durable agent que não aparece ou diz Unreachable: as primeiras verificações, cada motivo e como corrigir, as linhas do doctor e os casos comuns

Experimental. O protocolo de rede, o SDK e esta página podem mudar, ou o recurso pode ser removido, em uma versão secundária posterior. Durable agents explica o que decide sua permanência.

Um durable agent que não aparece, exibe Unreachable ou não responde a um toque: três comandos encontram a causa, e uma tabela de motivos com uma lista de casos fornece a solução. Solução de problemas cobre o Collie como um todo.

Primeiras verificações

Execute estes três, nesta ordem:

collie durable list
collie doctor
collie logs
comandoo que ele mostra para um durable agent
collie durable listUma linha por entrada de sources.json, com o estado atribuído pela bridge em execução: loaded, not loaded (restart to apply), refused (<status>) ou bridge not answering. loaded significa que a bridge carregou a entrada. Não significa que o durable agent responde. Um not loaded também aparece quando a bridge responde HTTP 400 para o nome
collie doctorConsulta o próprio durable agent. Ele imprime as linhas de Linhas do doctor para durable agents e indica a verificação com falha junto com uma solução
collie logsA linha de inicialização de cada durable agent, [bridge] program "desk": durable, private socket /run/user/1000/desk/app.sock, e seu motivo quando uma configuração viola uma regra. Um sources.json inválido imprime [bridge] FATAL:. Uma falha de leitura imprime [state] poll failed, marking disconnected: <reason> uma vez por interrupção. Linhas que começam com [durable] indicam recusa de versão, um lead desatualizado, itens descartados e um log excluído

O telefone mostra menos informações. A linha de um durable agent exibe Starting ou Unreachable e não fornece nenhum motivo. Uma recusa de versão de protocolo tem uma mensagem própria, Version mismatch, e uma caixa de aviso na página inicial do durable agent. Um token recusado tem sua própria mensagem na barra de conexão. collie doctor e collie logs indicam todos os outros motivos.

A tabela de motivos

Quando o Collie não consegue alcançar um agente durável, o restante do Collie inicia mesmo assim, e o agente durável aparece como inacessível com um motivo.

Um motivo indica o nome da variável de ambiente mesmo quando o agente durável é uma entrada de sources.json. Leia COLLIE_DURABLE_SOCKET como o socket da entrada, COLLIE_DURABLE_URL como seu url e COLLIE_DURABLE_TOKEN como seu token. A correção para uma entrada fica em sources.json. A correção para o formato exclusivo para duráveis fica em .env, depois collie restart.

A configuração viola uma regra

O Collie relata estes erros sem discar para o agente durável. Regras presentes em entradas de sources.json também são recusadas no início da bridge (Um erro de digitação em sources.json).

motivoo que significa e a correção
COLLIE_DURABLE_SOCKET is not setO formato exclusivo para duráveis não tem um caminho de socket. Defina-o, ou defina a URL com seu token
COLLIE_DURABLE_SOCKET must be an absolute pathInforme o caminho completo, começando com /
COLLIE_DURABLE_SOCKET is longer than 103 bytesEncurte o caminho. Mantenha-o abaixo de $XDG_RUNTIME_DIR
the private socket transport is not available on Windows; set COLLIE_DURABLE_URL and COLLIE_DURABLE_TOKEN insteadO Windows não tem transporte por socket. Use uma URL e um token
COLLIE_DURABLE_SOCKET and COLLIE_DURABLE_URL are both set; set the socket, or the URL with its token, not bothO formato exclusivo para duráveis recebeu ambos. Mantenha apenas um transporte
COLLIE_DURABLE_URL is set without COLLIE_DURABLE_TOKEN; the durable agent refuses a caller with no tokenO formato exclusivo para duráveis recebeu uma URL e nenhum token. Defina o token
COLLIE_DURABLE_TOKEN is set without COLLIE_DURABLE_URL; a token is only sent to a URLO formato exclusivo para duráveis recebeu um token e nenhuma URL. Defina a URL ou remova o token
COLLIE_DURABLE_URL is longer than 2048 bytesEncurte a URL para o endereço base do agente durável
COLLIE_DURABLE_URL is not a URLEscreva como https://host
COLLIE_DURABLE_URL must start with https://Qualquer esquema além de https:// é recusado. Um http:// simples tem sua própria linha abaixo
COLLIE_DURABLE_URL uses plain http to <host>, so the token would cross the network unencrypted; use https://, or http://127.0.0.1:<port> for wrangler devUse https://. http simples é para 127.0.0.1 ou localhost com uma porta
COLLIE_DURABLE_URL uses plain http on loopback without a port; name the port, for example http://127.0.0.1:8801Adicione a porta
COLLIE_DURABLE_URL must not carry a user name or password; the token goes in COLLIE_DURABLE_TOKENRemova o nome de usuário e a senha da URL
COLLIE_DURABLE_URL must not carry a query or a fragmentRemova a parte ? e a parte # da URL
COLLIE_DURABLE_URL names the durable agent's base only; leave out /session/v1, the adapter adds itCorte o /session/v1 do caminho
COLLIE_DURABLE_TOKEN is <n> bytes; it must be at least 32 bytes, for example 64 hex characters from openssl rand -hex 32Gere um token mais longo e forneça o mesmo ao agente durável
COLLIE_DURABLE_TOKEN must be printable ASCII with no spacesRemova espaços e outros caracteres do token
COLLIE_DURABLE_TOKEN is longer than 4096 bytesUm cabeçalho desse tamanho é um erro. Use um token mais curto

O agente durável não responde, ou responde incorretamente

motivoo que significa e a correção
no socket at <path>Não há nada no caminho ainda. Inicie o agente durável ou corrija o caminho
cannot check <path>: <message>O Collie não conseguiu ler o caminho. Torne-o legível para o seu usuário
socket-not-private: <check>A navegação pelo caminho falhou, e o texto após os dois-pontos indica a parte. A verificação de privacidade falhou contém as ocorrências comuns
connection refusedNada escuta. Um agente durável que travou pode deixar seu arquivo de socket para trás: Um arquivo de socket órfão. Em https, nada escuta na URL
no answer within <n>msO agente durável trava ou está frio. O Collie espera 1000 ms em um socket e 5000 ms em https
tls refused: <message>O certificado da URL foi recusado. O Collie não tem opção para ignorar a verificação
the host name does not resolveO nome do host na URL está errado, ou sua rede não consegue alcançá-lo
token-refused: the durable agent answered 401 ou 403O agente durável recusou o token. O agente durável recusou o token
too-largeO agente durável respondeu com mais do que o Collie lê: 16 KiB para hello, 4 MiB para um snapshot. Reduza o tamanho da resposta
incompatible: the durable agent speaks 2..3, this Collie speaks 1..1Os intervalos de versão não são compatíveis. Atualize o lado mais antigo. collie doctor mostra ambos os intervalos e o log recebe uma linha por intervalo
incompatible: not a durable agentOutra coisa responde nesse caminho ou URL. Aponte a entrada para o agente durável
incompatible: the durable agent asks for a tokenUm agente durável em um socket exige um token, que um socket nunca transmite. Atualize o lado mais antigo ou acesse-o por URL com um token
unreadable hello: <detail> ou unreadable snapshot: <detail>O agente durável enviou um documento que o protocolo de comunicação não permite. Leia o log do próprio agente durável
the durable agent answered <status> ou the durable agent answered 409 <code>O agente durável respondeu com um status que o protocolo de comunicação não usa aqui. Leia o log do próprio agente durável
startingO agente durável está ativo e informa que não está pronto, ou responde com 503. O Collie tenta novamente na próxima sondagem

Linhas do doctor para durable agents

collie doctor faz a cada agente durável as mesmas perguntas que o bridge faz, na ordem em que o bridge as faz. Ele não envia nada além de hello.

Cada entrada de sources.json recebe um bloco de seis linhas, escrito durable-socket:desk para um agente durável chamado desk. Uma linha sources antes dos blocos verifica o arquivo, e uma linha durable-lead os segue. Um Collie exclusivo para duráveis imprime as mesmas seis linhas sem sufixo, e sua linha mux exibe durable, see the durable-* lines.

linhaverdeaviso ou vermelho
sources2 durable agents in <path>, mode 0600Vermelho quando o arquivo não pode ser analisado. Sua correção informa que o bridge não inicia enquanto estiver errado. Vermelho quando o grupo ou outros podem ler o arquivo, com chmod 600 como correção, pois uma entrada pode conter um token
durable-envtransport: private socket com o caminho, ou transport: https with a bearer tokenVermelho quando a configuração viola uma regra de a tabela de motivos
durable-socketO caminho é um socket, seu, modo 0600, em uma pasta sua com modo 0700, sem link no caminhoVermelho, e a linha indica a verificação com falha: nada lá, ilegível, não é um socket, um symlink, não é uma pasta, uma pasta de outro proprietário, uma pasta com o modo errado, uma pasta acima que outros podem gravar, um socket de outro proprietário ou um socket com modo aberto. Ignorado em um agente durável atrás de https
durable-urlO endereço, https ou http de loopback, e seu tamanho em bytesVermelho quando a URL viola uma regra. Ignorado em um socket
durable-tokenset, <n> bytes. O Collie nunca imprime o valorVermelho quando o token viola uma regra. Ignorado em um socket
durable-helloO agente durável respondeu. Ambos os intervalos, a versão em que concordamVermelho com a causa: o token foi recusado, nada respondeu, algo que não é um durable agent respondeu, o durable agent pede um token em um socket, um hello ilegível ou intervalos que não se cruzam. Uma divergência de intervalo mostra ambos os intervalos
durable-readyready, o nome de host do durable agent e sua épocaUm aviso quando o durable agent informa que ainda não está pronto
durable-leadO lead é novo o suficiente para exibir o card de perguntaConsulte Em uma crew

Uma linha com falha interrompe as linhas seguintes. Elas são exibidas como ignoradas com o motivo fix the row above first, porque o Collie nunca faz requisições a um durable agent por um socket que falhe na verificação de privacidade ou com um token que viole sua regra. Uma linha ignorada não é uma falha.

Casos

Cada caso informa o que você vê, o motivo e a correção.

Um erro de digitação em sources.json

Você vê o Collie fora do ar, e não apenas um durable agent: o celular não consegue se conectar. collie logs termina com [bridge] FATAL:, o caminho do arquivo, a entrada e o campo.

A bridge lê sources.json na inicialização e para em um campo desconhecido, um kind que não seja durable, um nome que viole a regra, um nome duplicado, socket e url juntos, nenhum dos dois, um url sem token ou um token com um socket. Corrija o arquivo e execute collie restart. O collie doctor mostra a mesma mensagem na linha sources.

Quando a bridge não consegue nomear a entrada (ela não é um objeto, tem um campo desconhecido ou o nome viola a regra), ela conta a partir de 0 e grava entry 1 para a segunda entrada. O collie durable attach conta a partir de 1 e grava entry 2 para a mesma entrada. Ambos indicam qual é o campo. Quando o nome for válido, a bridge grava o nome: entry "desk".

attach e detach se recusam a gravar um arquivo que não conseguem ler, portanto um erro de digitação nunca afeta suas outras entradas. Eles param com o código de saída 1.

Um durable agent não aparece após o attach

Você não vê nenhum durable agent no celular, e collie durable list indica not loaded (restart to apply).

attach e detach apenas gravam sources.json. A bridge o lê na inicialização. Execute collie restart ou adicione --restart ao verbo da próxima vez. Quando not loaded persistir após uma reinicialização, leia collie logs: list formula um HTTP 400 da bridge da mesma forma que um 404.

A verificação de privacidade falhou

Você vê socket-not-private: the socket's folder /tmp/hello has mode 0755, not 0700, e a linha do doctor durable-socket está vermelha.

O Collie só se conecta a um socket se o caminho inteiro for privado. As causas comuns são uma pasta com modo 0755, um socket diretamente em /tmp ou em outra pasta compartilhada e um link simbólico no caminho. É fácil não notar um link simbólico: /var/run aponta para /run em muitos hosts Linux, então um caminho que começa com /var/run/ falha com /var/run is a symlink. Use o caminho real.

Execute chmod 700 na própria pasta do socket ou mova o socket para $XDG_RUNTIME_DIR. As regras estão em Segurança de um durable agent. Um durable agent criado com o SDK se recusa a iniciar em uma pasta existente cujo modo não seja 0700, e avisa isso por conta própria.

Um arquivo de socket órfão

Você vê connection refused em um socket, e o arquivo existe.

Um durable agent que travou deixa seu arquivo de socket para trás, e nada escuta nele. Inicie o durable agent novamente. O SDK remove um arquivo de socket inativo antes de escutar e para com another instance is already listening quando o socket estiver ativo. Exclua o arquivo manualmente apenas se o durable agent não limpá-lo.

Um nome que também é uma sessão de terminal

Você vê a bridge parar na inicialização com the name is the terminal session's own; pick another, ou uma sessão de terminal ausente no celular.

Um durable agent não pode ter o mesmo nome do terminal a partir do qual o Collie é executado. Esse nome é default na maioria das instalações e, em um Collie apenas com durable agents, default é o do seu durable agent. A bridge para na inicialização e nomeia a entrada. Uma sessão do Herdr com o mesmo nome de um durable agent é outro caso: o durable agent mantém o nome, o celular não mostra essa sessão e o log avisa isso uma vez. Renomeie um deles.

Um aviso de durable-ready que persiste

Você vê durable-ready como um aviso em cada execução de collie doctor.

O durable agent responde com hello e informa ready: false. O celular o mostra como Starting. Um durable agent só informa que está pronto depois de estruturar suas conversas e reabrir suas perguntas em aberto. Leia o próprio log do durable agent para saber o que ele está aguardando.

O durable agent para na inicialização na verificação de descendentes

Você vê o durable agent parar na inicialização com the descendant check needs Bun on Linux to read the peer of a socket; pass callerCheck: "off" to run without it.

A verificação requer o Bun no Linux. No macOS, execute o durable agent com Node ou passe callerCheck: "off" para openCollie e leia o que a verificação protege primeiro. O erro se origina no durable agent. O Collie não está envolvido.

Uma pergunta volta após uma reinicialização

Você vê uma pergunta novamente após a reinicialização do durable agent, ou um card informando que ela já foi respondida.

Uma resposta a uma pergunta de antes da reinicialização recebe too-late, e o card mostra isso e desaparece. Um durable agent que deriva o id da pergunta a partir da chamada de ferramenta faz a mesma pergunta novamente, de modo que uma resposta enviada durante a reinicialização chega e a ferramenta roda uma vez. Um durable agent que gera um novo id a cada vez faz uma nova pergunta para a mesma chamada de ferramenta. O card a exibe, e o Collie não envia um segundo push, pois a proteção de push usa a chamada de ferramenta como chave. A proteção também permite 3 pushes por conversa por minuto, 10 por host por minuto e 30 por host por hora. O push que seria o 31º em uma hora se torna um único push de resumo para aquele host, e o host não envia mais nada até uma hora depois dele. Um card é sempre exibido.

403 caller-refused

Você vê o celular informar que a resposta ou a mensagem foi recusada, e o motivo do durable agent é 403 caller-refused.

A verificação de descendentes do durable agent recusou o chamador. Ela recusa o próprio durable agent, qualquer processo iniciado pelo durable agent e qualquer chamador que ela não consiga distinguir deles. O Collie cai do lado do durable agent quando o durable agent, ou uma ferramenta executada por ele, iniciou o processo do Collie e o processo ainda é seu filho. Inicie o Collie a partir de fora do durable agent e tente novamente.

Tentar novamente e uma resposta que pode ser aplicada

Você vê "Not sure the answer arrived" com um botão Tentar novamente e, após o toque, "May already be applied. Check the chat."

Um timeout, uma conexão perdida ou um 5xx após o envio da resposta significa que ela pode ter chegado. Tentar novamente envia o mesmo id de requisição, de modo que o durable agent responde replayed e nunca resolve a pergunta duas vezes. Quando a pergunta já está fechada, a primeira tentativa pode tê-la fechado, então o celular diz para verificar o chat. Um envio, uma parada e um toque de botão dizem o mesmo com palavras próprias.

O agente durável recusou o token

Você vê a barra de conexão dizer "The durable agent refused the token. Check COLLIE_DURABLE_TOKEN on this peer.", e o motivo é token-refused.

O durable agent respondeu 401 ou 403 para o token. A causa mais comum é uma rotação em que um lado mudou primeiro. As palavras no celular mencionam COLLIE_DURABLE_TOKEN mesmo para uma entrada de sources.json: leia isso como o token da entrada. Forneça o novo token ao durable agent antes de reiniciar o Collie. Tokens contém as etapas de rotação. Um 403 também pode vir de um proxy de acesso na frente do durable agent.

Uma mudança para Unreachable que leva duas leituras

Você vê um durable agent permanecer Ready por uma leitura com falha e depois mudar para Unreachable.

Uma leitura com falha após uma bem-sucedida mantém o último layout para essa sondagem. A segunda falha consecutiva muda o estado do durable agent. Um token recusado segue a mesma regra. Um caminho de socket que falha na verificação de privacidade é a única exceção: ele é exibido imediatamente.

Via https, um durable agent que está fora do ar ou recusa o token é consultado no máximo uma vez a cada 10 s, porque cada tentativa é uma requisição cobrada. Via socket, o menor intervalo entre duas leituras de um durable agent fora do ar é de 250 ms.

Em uma crew

Um durable agent em um membro de uma crew aparece no celular do lead, então o lead precisa saber o que é um durable agent.

Um lead anterior a 1.21.0 lista as conversas do durable agent sem o card de pergunta, e sua aba Terminal sonda uma conversa que não tem terminal. Nada no membro corrige isso. O membro avisa por si mesmo: collie doctor alerta em durable-lead, e o log recebe uma linha, [durable] the lead is 1.20.1; it shows durable panes without the question card and its Terminal tab polls; update the lead, uma vez para cada versão identificada. Atualize o lead.

durable-leado que ele diz
ignorado, sem crewEsta máquina não está em uma crew, portanto não há lead
ignorado, leadEsta máquina é o lead e mostra seus próprios painéis
ignorado, sem versãoO lead não informou uma versão: uma compilação de desenvolvimento, uma atualização em andamento ou nenhuma chamada desde que a bridge iniciou
avisoO lead executa uma versão anterior a 1.21.0
verdeO lead é 1.21.0 ou posterior

Um membro que é mais antigo que o lead tem a falha oposta. O celular diz "This machine runs an older Collie and cannot take answers here. Update it, or answer in the durable agent." Atualize esse membro.

Editar esta página no GitHub

The rest of the documentation