miércoles, 7 de julio de 2010

News: Los misterios del Servidor

 

 

Servidores

 

Cloong!Cloong!!

Hace 4 semanas tuvimos problemas con el servidor. El Servidor compilaba las ISOS, pero cuando ejecutaba los tests(más de 9 millones de tests) la máquina se colgaba con un error bastante extraño.

 

Durante una semana nuestros desarrolladores estuvieron analizando el DebugLog de la maquina virtual del Servidor. Lo curioso de la situación era que si compilábamos la ISO en nuestros ordenadores con RosBE y ejecutábamos la ISO en nuestros ordenadores, todo parecía funcionar perfectamente.Incluso los tests funcionaban!!

Varios testeadores y desarrolladores compilaron las ISOS en sus PCs y las probaron, efectivamente, todo funcionaba perfectamente. Pero el Servidor seguía dando una y otra vez el mismo error al testear la ISO en su máquina virtual.

Entonces comenzamos a aplicar el “Método Científico” para resolver este misterio…

 

Analizar la situación

 

lupa

 

Observar.Observa.Y comparar. ¿Cuáles son las diferencias entre compilar, ejecutar y testear ReactOS en el Servidor y en nuestros PCs?¿Por qué en uno funciona y en otro no?

 

La principal diferencia es que el servidor corre una máquina virtual QEMU. Nosotros estábamos probando máquinas virtuales VBOX(por lo general) en nuestros PCs.

La segunda diferencia es el compilador. El servidor no utiliza RosBE (aunque sí sus herramientas) mientras que en los PCs utilizamos RosBE. ¿Tendría esto algo que ver?

 

 

 

Hipotesis #1: QEMU vs VBOX

 

virtualbox-picture

Esta hipótesis era la más factible.

Cada virtualizador “virtualiza” un Hardware distinto. Existía la posibilidad de que el último commit hubiera roto la compatibilidad con el Hardware que virtualizaba Qemu mientras que el hardware de Vbox siguiera siendo compatible.

 

Lo extraño es que el último commit no tenía porqué perder compatibilidad alguna respecto al hardware.

Para eliminar o confirmar esta posibilidad instalamos QEMU en nuestros PCs y ejecutamos la ISO compilada por nosotros mismos. La ISO funcionaba perfectamente. Los tests tambien eran correctamente ejecutados.

Descartada esta opción nos quedaba la segunda diferencia.

 

 

 

 

Hipotesis #2: Buildbot vs RosBE

 

En el servidor el encargado de compilar ReactOS es un Buildbot mientras que en los PCs se usa RosBE. Siempre pedimos que los testeadores prueben las ISOs creadas por el Buildbot y que eviten testear ISOs creadas por RosBE. Queremos a RosBE,pero a veces existen pequeñas diferencias en la compilación, introducidas por ser dos entornos distintos y para que todos testeen realmente la misma ISO.(Unos podrían estar ejecutando RosBE 1.4.4 y otros RosBE 1.5)

Para ello Caemyr nos ofreció su buildbot. Caemyr creó hace varias semanas un builbot para trastear con él y aprender su funcionamiento. El Buildbot hace uso de las mismas herramientas que el buildbot oficial.

Caemyr ordenó a su buildbot compilar y testear la ISO,esperábamos que fallara,sin embargo todo fue correcto.

Esto nos abría otro mar de dudas,¿Cómo es posible que dos buildbots iguales en servidores distintos fallaran?

 

 

 

 

Sin pistas…

 

Mientras tanto, nuestros desarrolladores seguían añadiendo DPRINTS y buscando información en los DebugLogs, intentando encontrar la pista definitiva. Una semana totalmente perdida.

 

EL mismo buildbot en dos servidores distintos fallaban.

…Dos servidores distintos…

La unica posibilidad estaba en la palabra “distintos”. Sin embargo, las maquinas virtuales tienen por objetivo “engañar” a ReactOS ya que ellas virtualizan un mismo hardware. Para la ISO de ReactOS los servidores son idénticamente iguales si se ejecutan en la misma versión de QEMU. Y ambas eran la misma versión.

 

Y mientras que seguíamos pegándonos cabezazos apareció la solución de mano de Collibri. Collibrí llego diciendo que había resuelto el problema.

¿Cómo?,le preguntamos. Añadiendo más disco duro, respondió.

 

Habíamos ocupado toda la memoria disponible.El servidor tenía toda la memoria ocupada. La máquina virtual no podía hacer uso de más memoria y había instalado ReactOS a medias. Por mucho que digamos a una máquina virtual que use 10 GB de HDD, si solo tenemos 100MB disponibles en el DiscoDuro, poco puede hacer. Instalación incompleta.

Los cabezazos fueron múltiples y repetidos.

 

Aún resuenan los Cloooong! contra la pared.

10 comentarios:

  1. jejejej, asi es la informatica, yo como subri en cobol (brrrrrrrrr) cuando se me olvidaba poner un punto (mas de 100 errores).

    ResponderEliminar
  2. Por fortuna ya hemos aprendido.
    Por desgracia volverá a ocurrirnos.
    Esa es la belleza de la informática :)
    Seguro que tras tu experiencia en cobol jamás olvidaste poner un punto al final de una frase. :)
    Yo pongo varios, para asegurar...

    ResponderEliminar
  3. ¿ Cuando tendremos las nueva versión para la plebe ?

    ResponderEliminar
  4. La versión 0.3.12 comenzará su testeo masivo a partir de la semana que viene. Hay varias regresiones para resolver.Espero que al menos podáis sentir las notables mejoras tras 5 meses de desarrollo ;)

    ResponderEliminar
  5. Hace muchisimos años que no toco cobol y creo que no me quedaron ganas, lo aprendi en la escuela, por ahora estoy en java, un poco de c y el clasico vb, saludos, esperamos ver pronto 0.3.12

    ResponderEliminar
  6. Ansiosos estamos, de verdad.

    ResponderEliminar
  7. Una pregunta, la versión 0.3.12 saldrá de los bootcd que se compilan a diario y vemos en el servidor de reactos?, o es un codigo aparte?, saludos.

    ResponderEliminar
  8. La versión 0.3.12, como todas las releases de ReactOS, nacen de los bootcds diarios que también podéis descargar. Las releases son más estables pues añadimos ciertos hacks y eliminamos expresamente las regresiones para mejorar la usabilidad.
    Actualmente estamos sincronizando los archivos con Wine, y estamos teniendo varios problemas, lo que está retrasando dicho lanzamiento.

    ResponderEliminar
  9. ¿Podrías decir en qué modo estáis incorporando Wine? Saludos.

    ResponderEliminar
  10. Muy buenas Raknae.
    ReactOS lleva incorporando Wine desde el principio :). La arquitectura NT está dividida entre Modo Usuario y Modo Administrador. En el modo usuario es donde se encuentran las APIS del Sistema Operativo(en los ficheros DLLs). Wine básicamente implementa las APIS de Windows.Por lo que cogemos dichas APIs y las incorporamos a ReactOS. Sin embargo, no es tán facil. Existen APIs de Wine que no podemos usar(pues en Linux corren en modo usuario pero en Windows lo hacen en modo administrador, como por ejemplo la parte gráfica) o APIs de Wine que "llaman" a APIs homólogas de Linux para realizar la tarea.
    :)

    ResponderEliminar