Últimos Cambios |
||
Blog personal: El hilo del laberinto |
Última Actualización: 27 de Diciembre de 2001 - Viernes
Aunque el objetivo final es implementar un esquema distribuido, para acelerar el nacimiento de la red se ha empezado por utilizar un esquema centralizado empleando las facilidades proporcionadas por los servidores IRCd de Undernet.
En estos momentos los nodos de control son:
Las operaciones que cubren esos nodos son:
Configuro el sistema para que en caso de bloqueo se aborte la transacción más antigua, con la idea de que la transacción abortada se corresponda con una invocación de Olimpo que murió de forma "trágica".
Este sistema puede resultar potencialmente problemático cuando se accede a las bases de datos a través de las herramientas externas de Olimpo, ya que en ese caso no está tan claro qué transacción se va a abortar. Para evitar problemas, las herramientas externas deberían acceder a la base de datos en modo de muy baja prioridad, indicando en su gestión de la BD que el sistema debe abortarlas en cuanto se detecte cualquier tipo de conflicto. Ese es el flag "DB_TXN_NOWAIT".
A continuación se pasa al punto siguiente.
La intercomunicación módulo<->olimpo debe soportar el mayor rango de numerics permitido. Asimismo, la intercomunicación con el usuario también requiere el poder operar con numerics extendidos.
La intercomunicación con el usuario requiere el poder operar con numerics extendidos.
Hay que reconocer la posibilidad de que los servidores se identifiquen con un numeric de dos caracteres, y no solo de uno.
Idem caso anterior.
Tenemos que contemplar que nuestro uplink directo utilice numerics extendidos.
Idem caso anterior.
Esta parte es bastante truculenta, ya que hay que modificar todo el sistema de gestión de splits. Adicionalmente, hay que cambiar también el sistema de control de acceso y el sistema de gestión de estadísticas por nodo.
Los clones dinámicos siguen usando hashes de tamaño 31, ya que no se están utilizando.
Utilizamos esta funcionalidad para la actualización de los tiempos de acceso de las I-lines, que es algo en lo que la "durabilidad" no es un requisito.
Este cambio también mejora el rendimiento en el "Net Join", ya que ahora toda la base de datos de Ilines cabe en la caché.
Conjuntamente con la relajación de la propiedad de "durabilidad" de ciertas transacciones (ver versión 43), este cambio reduce considerablemente también el tráfico de escritura en disco, ya que ahora no es necesario hacer sitio en la caché enviando bloques "dirty" de la misma a la base de datos porque la caché no era lo bastante grande como para contener el "working set".
Otra ventaja del cambio es poder hacer backups "en caliente".
Tras investigar el tema con detalle, compruebo que el "flush" se produce cuando cerramos una base de datos sin hacerlo con una transacción. Estoy viendo el problema porque la herramienta "z4" que he hecho para expirar los clones caducados invoca, a su vez, a la herramienta "ilines_lista", que abre la base de datos de clones y luego la cierra sin transacciones.
Este fichero se abre y se cierra cada vez que se almacena algo dentro, para hacer frente a truncamientos del fichero, cambios de nombre, etc. Asimismo, abrimos siempre con una máscara de acceso 0644.
Si el split se produce entre Olimpo y su HUB directo, se invoca una sola vez con notifica_server_split(NULL).
Esto puede suponer una pequeña pausa, típicamente inferior a uno o dos segundos, cada vez que se hace el checkpoint, operación que es infrecuente (en estos momentos, cada hora o cuando se acumulan 500 Kbytes de log, lo que se cumpla primero).
La razón de "DB_INCOMPLETE" es no bloquear demasiadas páginas de la base de datos, y para no saturar el disco. Si se supera un umbral determinado de bloqueos, se completa un checkpoint parcial, se liberan los bloqueos y se devuelve el control. Con ello se pretende un mejor comportamiento en entornos con muchos procesos o threads utilizando la base de datos, y para no saturar el subsistema de disco. En nuestro caso, no obstante, lo que hacemos es reintentar la operación hasta completarla totalmente. Dado que cada llamada hace progresos de forma incremental, sabemos que el bucle se completa en algún momento. Todo lo más, un par de segundos.
Se detectó tras ocurrir un error interno durante el desarrollo de un módulo Python. El error abortó la ejecución del módulo, pero dejó transacciones abiertas, que fueron cerradas con posterioridad por el sistema de recogida de basuras. Tengo puesto que si una transacción se convierte en basura son haber sido comprometida, se aborte. ¡¡Qué gozada!!.
Por ello, amplío el número de bloqueos y el número de objetos bloqueados simultaneos de 1.000 a 10.000.
Más información sobre los OpenBadges
Donación BitCoin: 19niBN42ac2pqDQFx6GJZxry2JQSFvwAfS