Resumo

  • No 9P2000, Twalk só associa o newfid ainda livre ao destino quando todos os elementos do nome são percorridos. Um Rwalk parcial pode devolver os qids do prefixo resolvido, mas não altera nenhum dos fids.
  • Topen é uma solicitação distinta: pede um modo de acesso, leva o servidor a verificar permissões e prepara o fid para leituras ou escritas posteriores. Ropen não comprova que dados tenham sido transferidos.
  • A contribuição de Rob Pike pertence a uma história coletiva: Ken Thompson iniciou o protocolo, Pike integrou o sistema de nomes, Dave Presotto construiu a rede, e artigos e dialetos posteriores têm autores próprios.

Um sistema de build distribuído marca “caminho resolvido” e o operador conclui “artefato aberto”. Minutos depois, o primeiro read falha. O protocolo não mudou de ideia; a conclusão inicial juntou três eventos que 9P mantém separados.

Twalk começa com um fid válido, propõe um newfid e leva uma sequência ordenada de nomes. O identificador novo precisa estar livre, a menos que o cliente use de propósito o mesmo número do fid inicial. O servidor avança elemento por elemento e exige permissão de busca em cada diretório atravessado. Se a sequência inteira tiver êxito, Rwalk traz um qid por elemento e newfid passa a representar o resultado.

Isso é um recibo substancial: naquele servidor, naquela conexão, a partir daquele fid, os nomes foram resolvidos naquela ordem. Não é um open implícito. A introdução do 9P descreve fids como identificadores de 32 bits escolhidos pelo cliente para arquivos atuais, abertos ou não, num espaço compartilhado pela conexão. Uma nova negociação de versão reinicializa a sessão e aborta I/O pendente. Portanto o fid é local à sessão, não um identificador durável e universal.

O caso parcial impede uma falsa conveniência. Se o primeiro elemento falhar, o servidor responde com erro. Se a falha vier depois, Rwalk pode listar os qids do prefixo bem-sucedido. Mesmo assim, no 9P2000, o fid original e newfid não mudam sem sucesso de todos os elementos. Um coletor que transforma “cinco de sete” num novo handle utilizável registra estado que o servidor não concedeu.

Twalk com zero elementos tem outra semântica: clona o fid inicial em newfid sem percorrer nome algum. E MAXWELEM, o limite de dezesseis elementos numa mensagem, não limita o caminho lógico; vários walks podem ser encadeados. Uma trilha fiel distingue resolução, clonagem e segmentação.

Topen vem depois para responder à pergunta de acesso. Ela solicita leitura, escrita, leitura/escrita ou execução sobre o arquivo já representado pelo fid, com os sinalizadores previstos pelo 9P2000. O servidor verifica a permissão e prepara o fid para E/S. Ropen devolve qid e iounit. Somente Tread ou Twrite posteriores, com suas respostas, comprovam uma operação de dados.

Há ainda uma fronteira temporal. O manual de open afirma que permissões são verificadas no momento da abertura e que alterações posteriores não removem a capacidade sobre o arquivo já aberto. A permissão de busca usada no walk não garante o modo solicitado depois. Um walk completo seguido por open negado pode ser coerente com modo, política ou estado diferentes. No sentido oposto, um fid aberto antes de uma revogação pode continuar acessível. O evento e o horário importam tanto quanto o resultado.

qid também não deve virar identidade global. Ele identifica um arquivo na mesma hierarquia do servidor, e sua parte path deve mudar quando o arquivo é apagado e recriado. É mais forte que um nome exibido, mas não é hash de conteúdo nem prova de equivalência entre servidores ou montagens.

A localidade é intencional. Em The Use of Name Spaces in Plan 9, Rob Pike, Dave Presotto, Ken Thompson, Howard Trickey e Phil Winterbottom descrevem espaços de nomes por processo compostos por um protocolo de arquivos pequeno. Plan 9 from Bell Labs, de Pike, Presotto, Sean Dorward, Bob Flandrena, Thompson, Trickey e Winterbottom, explica que o cliente mantém essa composição. Não existe uma árvore global que o walk precise certificar.

A autoria precisa da mesma disciplina. O prefácio da segunda edição diz que Thompson iniciou o protocolo, Pike integrou o sistema de nomes e Presotto construiu a rede, além de reconhecer Winterbottom e muitos outros. Chamar tudo de “protocolo de Pike” apaga justamente a colaboração que torna sua integração importante.

Versões posteriores não podem ser achatadas. O prefácio da quarta edição associa o novo 9P principalmente à remoção do antigo limite de 27 bytes por elemento de nome e a ganhos de eficiência, flexibilidade e encapsulamento. O Linux v9fs negocia 9p2000, 9p2000.u e 9p2000.L. A extensão UNIX e o dialeto Linux têm documentos próprios; 9P2000.L conserva o formato de walk, mas usa Tlopen/Rlopen e flags Linux. A separação entre resolver e abrir permanece comparável, não os campos de cada mensagem.

Modos de cache do v9fs acrescentam distância entre a visão do cliente e o estado atual do servidor. Uma evidência adequada guarda dialeto, sessão, servidor/export, contexto de attach, fid/qid inicial, nomes ordenados, todos os qids, resultado completo ou parcial, newfid, modo e flags de open, qid/iounit de Ropen, E/S posterior, cache e término da sessão.

Com isso, “walk bem-sucedido” continua sendo uma frase forte. Ela prova a resolução no contexto certo e não precisa fingir que abriu alguma coisa.

Sources