Coda es un sistema de archivos distribuido desarrollado como un proyecto de investigación en la Universidad Carnegie Mellon desde 1987 bajo la dirección de Mahadev Satyanarayanan . Desciende directamente de una versión anterior de Andrew File System (AFS-2) y ofrece muchas características similares. El sistema de archivos InterMezzo se inspiró en Coda.
Coda tiene muchas características deseables para los sistemas de archivos de red y varias características que no se encuentran en otros lugares.
Coda utiliza una caché local para proporcionar acceso a los datos del servidor cuando se pierde la conexión de red. Durante el funcionamiento normal, un usuario lee y escribe en el sistema de archivos normalmente, mientras que el cliente recupera o "almacena" todos los datos que el usuario ha enumerado como importantes en caso de una desconexión de la red. Si se pierde la conexión de red, la caché local del cliente Coda proporciona datos de esta caché y registra todas las actualizaciones. Este estado operativo se denomina funcionamiento desconectado. Tras la reconexión de red, el cliente pasa al estado de reintegración; envía actualizaciones registradas a los servidores. A continuación, vuelve al funcionamiento normal en modo conectado.
También es diferente de AFS el método de replicación de datos de Coda. AFS utiliza una estrategia de replicación pesimista con sus archivos, permitiendo que solo un servidor de lectura/escritura reciba actualizaciones y todos los demás servidores actúen como réplicas de solo lectura. Coda permite que todos los servidores reciban actualizaciones, lo que permite una mayor disponibilidad de los datos del servidor en caso de particiones de red, un caso que AFS no puede manejar.
Estas características únicas introducen la posibilidad de que existan copias semánticamente divergentes de los mismos archivos o directorios, conocidas como "conflictos". Las actualizaciones locales de operaciones desconectadas pueden entrar en conflicto con las actualizaciones de otros usuarios conectados en los mismos objetos, impidiendo la reintegración. La replicación optimista puede causar actualizaciones simultáneas en diferentes servidores en el mismo objeto, impidiendo la replicación. El primer caso se denomina conflicto "local/global" y el segundo, conflicto "servidor/servidor". Coda cuenta con amplias herramientas de reparación, tanto manuales como automáticas, para manejar y reparar ambos tipos de conflictos.
Coda se ha desarrollado en Linux y su soporte apareció en la serie de núcleos Linux 2.1. [3] También se ha portado a FreeBSD . Posteriormente, al quedar obsoleto allí, se está intentando recuperarlo. [4] Se han hecho esfuerzos para portar Coda a Microsoft Windows , desde la era Windows 95 / Windows 98 , Windows NT [5] a Windows XP , [6] mediante proyectos de código abierto como el compilador DJGCC DOS C y Cygwin . [5]