diff options
| author | murilo ijanc | 2026-03-24 21:41:06 -0300 |
|---|---|---|
| committer | murilo ijanc | 2026-03-24 21:41:06 -0300 |
| commit | f186b71ca51e83837db60de13322394bb5e6d348 (patch) | |
| tree | cd7940eaa16b83d2cde7b18123411bfb161f7ebb /pt-br/news/cli-daemon-rpc/index.html | |
| download | website-f186b71ca51e83837db60de13322394bb5e6d348.tar.gz | |
Initial commit
Import existing tesseras.net website content.
Diffstat (limited to 'pt-br/news/cli-daemon-rpc/index.html')
| -rw-r--r-- | pt-br/news/cli-daemon-rpc/index.html | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/pt-br/news/cli-daemon-rpc/index.html b/pt-br/news/cli-daemon-rpc/index.html new file mode 100644 index 0000000..3b43961 --- /dev/null +++ b/pt-br/news/cli-daemon-rpc/index.html @@ -0,0 +1,147 @@ +<!DOCTYPE html> +<html lang="pt-br"> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <title>CLI Encontra a Rede: Comandos Publish, Fetch e Status — Tesseras</title> + <meta name="description" content="O CLI do tesseras agora pode publicar tesseras na rede, buscá-las de peers e monitorar o estado de replicação — tudo através de uma nova ponte RPC via socket Unix para o daemon."> + <!-- Open Graph --> + <meta property="og:type" content="article"> + <meta property="og:title" content="CLI Encontra a Rede: Comandos Publish, Fetch e Status"> + <meta property="og:description" content="O CLI do tesseras agora pode publicar tesseras na rede, buscá-las de peers e monitorar o estado de replicação — tudo através de uma nova ponte RPC via socket Unix para o daemon."> + <meta property="og:image" content="https://tesseras.net/images/social.jpg"> + <meta property="og:image:width" content="1200"> + <meta property="og:image:height" content="630"> + <meta property="og:site_name" content="Tesseras"> + <!-- Twitter Card --> + <meta name="twitter:card" content="summary_large_image"> + <meta name="twitter:title" content="CLI Encontra a Rede: Comandos Publish, Fetch e Status"> + <meta name="twitter:description" content="O CLI do tesseras agora pode publicar tesseras na rede, buscá-las de peers e monitorar o estado de replicação — tudo através de uma nova ponte RPC via socket Unix para o daemon."> + <meta name="twitter:image" content="https://tesseras.net/images/social.jpg"> + <link rel="stylesheet" href="https://tesseras.net/style.css?h=21f0f32121928ee5c690"> + + + <link rel="alternate" type="application/atom+xml" title="Tesseras" href="https://tesseras.net/atom.xml"> + + + <link rel="icon" type="image/png" sizes="32x32" href="https://tesseras.net/images/favicon.png?h=be4e123a23393b1a027d"> + +</head> +<body> + <header> + <h1> + <a href="https://tesseras.net/pt-br/"> + <img src="https://tesseras.net/images/logo-64.png?h=c1b8d0c4c5f93b49d40b" alt="Tesseras" width="40" height="40" class="logo"> + Tesseras + </a> + </h1> + <nav> + + <a href="https://tesseras.net/pt-br/about/">Sobre</a> + <a href="https://tesseras.net/pt-br/news/">Notícias</a> + <a href="https://tesseras.net/pt-br/releases/">Lançamentos</a> + <a href="https://tesseras.net/pt-br/faq/">FAQ</a> + <a href="https://tesseras.net/pt-br/subscriptions/">Inscrições</a> + <a href="https://tesseras.net/pt-br/contact/">Contato</a> + + </nav> + <nav class="lang-switch"> + + <a href="https://tesseras.net/news/cli-daemon-rpc/">English</a> | <strong>Português</strong> + + </nav> + </header> + + <main> + +<article> + <h2>CLI Encontra a Rede: Comandos Publish, Fetch e Status</h2> + <p class="news-date">2026-02-15</p> + <p>Até agora o CLI operava isoladamente: criar uma tessera, verificar, exportar, +listar o que você tem. Tudo ficava na sua máquina. Com esta atualização, o <code>tes</code> +ganha três comandos que fazem a ponte entre o armazenamento local e a rede P2P — +<code>publish</code>, <code>fetch</code> e <code>status</code> — comunicando-se com um <code>tesd</code> em execução através +de um socket Unix.</p> +<h2 id="o-que-foi-construido">O que foi construído</h2> +<p><strong>Crate <code>tesseras-rpc</code></strong> — Um novo crate compartilhado entre CLI e daemon. +Define o protocolo RPC usando serialização MessagePack com enquadramento +prefixado por tamanho (cabeçalho big-endian de 4 bytes, máximo de 64 MiB). Três +tipos de requisição (<code>Publish</code>, <code>Fetch</code>, <code>Status</code>) e suas respostas +correspondentes. Um <code>DaemonClient</code> síncrono gerencia a conexão do socket Unix +com timeouts configuráveis. O protocolo é deliberadamente simples — uma +requisição, uma resposta, conexão fechada — para manter a implementação +auditável.</p> +<p><strong><code>tes publish <hash></code></strong> — Publica uma tessera na rede. Aceita hashes completos +ou prefixos curtos (ex.: <code>tes publish a1b2</code>), que são resolvidos no banco de +dados local. O daemon lê todos os arquivos da tessera do armazenamento, empacota +em um único buffer MessagePack e entrega ao motor de replicação. Tesseras +pequenas (< 4 MB) são replicadas como um único fragmento; maiores passam por +codificação de apagamento Reed-Solomon. A saída mostra o hash curto e a contagem +de fragmentos:</p> +<pre><code>Published tessera 9f2c4a1b (24 fragments created) +Distribution in progress — use `tes status 9f2c4a1b` to track. +</code></pre> +<p><strong><code>tes fetch <hash></code></strong> — Busca uma tessera da rede usando o hash de conteúdo +completo. O daemon coleta fragmentos disponíveis localmente, reconstrói os dados +originais via decodificação de apagamento se necessário, desempacota os arquivos +e armazena no CAS (content-addressable store). Retorna o número de memórias e o +tamanho total buscado.</p> +<p><strong><code>tes status <hash></code></strong> — Exibe a saúde de replicação de uma tessera. A saída +mapeia diretamente o modelo interno de saúde do motor de replicação:</p> +<table><thead><tr><th>Estado</th><th>Significado</th></tr></thead><tbody> +<tr><td>Local</td><td>Ainda não publicada — existe apenas na sua máquina</td></tr> +<tr><td>Publishing</td><td>Fragmentos sendo distribuídos, redundância crítica</td></tr> +<tr><td>Replicated</td><td>Distribuída, mas abaixo da redundância alvo</td></tr> +<tr><td>Healthy</td><td>Redundância completa alcançada</td></tr> +</tbody></table> +<p><strong>Listener RPC no daemon</strong> — O daemon agora escuta em um socket Unix (padrão: +<code>$XDG_RUNTIME_DIR/tesseras/daemon.sock</code>) com permissões de diretório adequadas +(0700), limpeza de sockets obsoletos e shutdown gracioso. Cada conexão é tratada +em uma task Tokio — o listener converte o stream assíncrono para I/O síncrono +para a camada de enquadramento, despacha para o handler RPC e escreve a resposta +de volta.</p> +<p><strong>Pack/unpack no <code>tesseras-core</code></strong> — Um módulo pequeno que serializa uma lista +de entradas de arquivo (caminho + dados) em um único buffer MessagePack e +vice-versa. Esta é a ponte entre a estrutura de diretórios da tessera e os blobs +opacos do motor de replicação.</p> +<h2 id="decisoes-de-arquitetura">Decisões de arquitetura</h2> +<ul> +<li><strong>Socket Unix ao invés de TCP</strong>: a comunicação RPC entre CLI e daemon acontece +na mesma máquina. Sockets Unix são mais rápidos, não precisam de alocação de +porta, e as permissões do sistema de arquivos fornecem controle de acesso sem +TLS.</li> +<li><strong>MessagePack ao invés de JSON</strong>: o mesmo formato wire usado em todo o +Tesseras. Compacto, sem schema, e já é uma dependência do workspace. Uma +ida-e-volta típica de publish request/response ocupa menos de 200 bytes.</li> +<li><strong>Cliente síncrono, daemon assíncrono</strong>: o <code>DaemonClient</code> usa I/O bloqueante +porque o CLI não precisa de concorrência — envia uma requisição e espera. O +listener do daemon é assíncrono (Tokio) para tratar múltiplas conexões. A +camada de enquadramento funciona com qualquer impl <code>Read</code>/<code>Write</code>, conectando +ambos os mundos.</li> +<li><strong>Resolução de prefixo no lado do cliente</strong>: <code>publish</code> e <code>status</code> resolvem +prefixos curtos localmente antes de enviar o hash completo ao daemon. Isso +mantém o daemon stateless — ele não precisa acessar o banco de dados do CLI.</li> +<li><strong>Alinhamento do diretório de dados padrão</strong>: o padrão do CLI mudou de +<code>~/.tesseras</code> para <code>~/.local/share/tesseras</code> (via <code>dirs::data_dir()</code>) para +coincidir com o daemon. Um aviso de migração é exibido quando dados no caminho +antigo são detectados.</li> +</ul> +<h2 id="proximos-passos">Próximos passos</h2> +<ul> +<li><strong>Contagem de peers no DHT</strong>: o comando <code>status</code> atualmente reporta 0 peers — +conectar a contagem real do DHT é o próximo passo</li> +<li><strong><code>tes show</code></strong>: exibir o conteúdo de uma tessera (memórias, metadados) sem +exportar</li> +<li><strong>Fetch com streaming</strong>: para tesseras grandes, transmitir fragmentos conforme +chegam ao invés de esperar por todos</li> +</ul> + +</article> + + </main> + + <footer> + <p>© 2026 Tesseras Project. <a href="/atom.xml">News Feed</a> · <a href="https://git.sr.ht/~ijanc/tesseras">Source</a></p> + </footer> +</body> +</html> |