Resumen

  • En 9P2000, Twalk solo asocia el newfid libre con el destino cuando recorre todos los elementos del nombre. Un Rwalk parcial puede devolver los qid del prefijo resuelto, pero no modifica ninguno de los fid.
  • Topen es otra solicitud: pide un modo de acceso, hace que el servidor compruebe permisos y prepara el fid para operaciones posteriores. Ropen no demuestra que se haya leído o escrito ningún dato.
  • La aportación de Rob Pike forma parte de una obra colectiva: Ken Thompson inició el protocolo, Pike integró el sistema de nombres, Dave Presotto construyó la red y los artículos y dialectos posteriores conservan autorías propias.

Pensemos en un orquestador de copias que registra «ruta localizada» y, en la línea siguiente, «acceso denegado». Si ambos estados se etiquetan como disponibilidad del archivo, el panel parece incoherente. Si se leen como walk y open, cuentan una secuencia normal.

Twalk parte de un fid válido, propone un newfid y envía una lista ordenada de nombres. El nuevo identificador debe estar libre, salvo que el cliente decida usar el mismo número que el fid inicial. El servidor avanza elemento a elemento y exige permiso de búsqueda en cada directorio. Cuando todos pasan, Rwalk devuelve un qid por elemento y newfid representa el resultado.

La respuesta acredita una resolución concreta: este servidor, esta conexión, este punto de partida y este orden de nombres. No acredita una apertura. La introducción de 9P define los fid como identificadores de 32 bits elegidos por el cliente para archivos actuales, estén abiertos o no, y compartidos dentro de la conexión. Una nueva negociación de versión reinicia la sesión y cancela trabajo pendiente. El fid no es una identidad durable fuera de ese contexto.

La respuesta parcial evita conclusiones cómodas. Si falla el primer elemento, llega un error. Si falla uno posterior, Rwalk puede incluir los qid del prefijo. Sin embargo, 9P2000 no cambia el fid inicial ni newfid mientras la lista completa no tenga éxito. Convertir «se resolvieron seis de ocho» en un handle operativo añade un estado que el servidor no concedió.

Una Twalk sin nombres clona el fid en newfid, sin recorrer ruta alguna. El máximo de dieciséis elementos por mensaje, MAXWELEM, tampoco limita la profundidad lógica: el cliente puede encadenar más walks. Estas excepciones son esenciales cuando un registro de red se transforma en una historia operacional.

Topen marca la siguiente frontera. Solicita lectura, escritura, lectura-escritura o ejecución sobre el archivo que ya representa el fid, con las banderas que corresponden a 9P2000. El servidor comprueba permiso y prepara el identificador para E/S. Ropen entrega qid e iounit. La evidencia de datos solo llegará después, con Tread o Twrite y sus respuestas.

Los permisos también tienen tiempo. El manual indica que se revisan al abrir y que un cambio posterior no quita el acceso a un archivo ya abierto. El permiso de búsqueda usado durante walk no garantiza el modo pedido por open. Un walk completo seguido de una denegación puede reflejar un modo distinto, una política nueva o un cambio del archivo. Del mismo modo, un fid abierto antes de una revocación puede conservar capacidad. Registrar solo el último color del panel borra la causalidad.

El qid identifica un archivo dentro de la misma jerarquía del servidor y su componente path debería cambiar cuando el archivo se borra y se crea de nuevo. Es una identidad local más fuerte que el nombre visible. No es un hash de contenido, una identidad global entre servidores ni prueba de que dos montajes exponen el mismo objeto.

La localidad es el diseño. Rob Pike, Dave Presotto, Ken Thompson, Howard Trickey y Phil Winterbottom explicaron en The Use of Name Spaces in Plan 9 que cada proceso compone su espacio de nombres. Plan 9 from Bell Labs, firmado además por Sean Dorward y Bob Flandrena junto con el resto de coautores, sitúa esa composición del lado del cliente. No existe una única ruta universal que walk pueda certificar.

La atribución requiere el mismo cuidado. El prefacio de la segunda edición dice que Thompson inició el protocolo, Pike integró el sistema de nombres y Presotto desarrolló la red, y reconoce a Winterbottom y a muchos otros. La relevancia de Pike está en una integración decisiva, no en borrar a sus colaboradores.

Tampoco todas las versiones son idénticas. El prefacio de la cuarta edición relaciona el nuevo 9P principalmente con superar el antiguo límite de 27 bytes por elemento, además de mejorar eficiencia, flexibilidad y encapsulación. Linux v9fs puede negociar 9p2000, 9p2000.u y 9p2000.L. La extensión UNIX y el dialecto Linux tienen documentos propios; 9P2000.L mantiene la forma de walk, pero emplea Tlopen/Rlopen y banderas Linux. Puede compararse la separación entre resolución y apertura, no copiar campos entre dialectos.

Los modos de caché de v9fs añaden otra frontera entre lo observado por el cliente y el estado actual del servidor. Por eso una prueba completa conserva dialecto, sesión, servidor/exportación, contexto de attach, fid/qid inicial, nombres, qid devueltos, resultado completo o parcial, newfid, open y sus banderas, qid/iounit de Ropen, E/S posteriores, caché y cierre de sesión.

Con ese contexto, «walk tuvo éxito» no es una señal débil. Es una afirmación exacta sobre la resolución. Su fuerza reside en no fingir que también abrió el archivo.

Sources