El crash de esta madrugada ha sido un asunto interno nuestro, tan solo agravado un poco por la velocidad de respuesta. El validador nuevo se quedaba calado y aunque el cron lo relanza cada cinco minutos eso solo servia para revisar unas pocas workunits antes de cascar de nuevo. El motivo: un acceso a puntero nulo.
Fragmento de codigo:
retval = get_output_file_paths(result, output_file_names);
int noutputs = output_file_names.size();
fprintf(stderr, "Hay %d outputsn",noutputs);
fprintf(stderr, "Accedo al primer fichero---------------------------n");
if (retval) return retval;
fprintf(stderr, "Accediendo al fichero %sn",output_file_names[0].c_str());
... = try_fopen(output_file_names[0].c_str(), f, "r");
¿Lo veis? cuando no hay ficheros en el resultado, retval no devuelve error, y simplemente noutputs vale 0. Pero claro, como solo nos preocupamos de retval nos vamos a la lineas siguientes y voila, intentamos leer un campo de output_file_names[0], que por supuesto no existe. De hecho, el sistema se queda colgado antes de try_fopen, en el fprintf del log.
Luego un poco mas adelante el problema se repite, cuando analizamos el siquiente fichero de la respuesta sin asegurarnos de que noutputs > 1:
fprintf(stderr, "Accediendo al fichero %sn",output_file_names[1].c_str());
retval = try_fopen(output_file_names[1].c_str(), f2, "r");
El problema de fondo ha sido que en el diseño de este nuevo validator ya nos conociamos BOINC lo suficiente, creiamos, para estar seguros de que si todos los ficheros obligatorios no estaban presentes el resultado nunca seria "Success" y por tanto no entraria ni siquiera a validacion. Y hemos visto ahora que no, que en algunos casos (un centenar teniamos ahora en la base de datos) se nos entrega solo un fichero o ninguno, con los datos incompletos, y que a pesar de eso el client state afirma ser "Success". Por cierto que estos casos tienen una pequeña interseccion con otros de los que se quejaba J, aquellos de CPU cero o muy corta. Asi que en quitando el bug y verificando no solo la existencia del primer fichero sino tambien de los restantes es bastante posible que estemos matando dos pajaros de un tiro.
![]()
Autor: Fran
Fecha: 27/04/2007 20:58.
Autor: cherinolero
Fecha: 29/04/2007 18:25.
![]()
Autor: Razorblade
Fecha: 30/04/2007 00:19.