|

楼主 |
发表于 2010-5-3 20:38:50
|
显示全部楼层
2010 年 5 月 3 日
¿Quién está incrementado el min_quorum?
Un usuario (gracias Fernando) nos indica que tiene ciertos problemas con workunits de materiales64 que tienen min_quorum= 2. ¿Cómo es esto posible si al crear las workunits de materiales64 decimos que explícitamente tengan min_quorum=1?.
Miro la base de datos, y...efectivamente, hay workunits de materiales64 con min_quorum=2.
Para entender bien este problema, es importante saber de la existencia de estas dos tablas en la base de datos:
app: Guarda la información de cada una de las aplicaciones de ibercivis, en el caso de materiales64 el campo target_nresults=2.
workunit: Guarda la información de cada una de las workuntits creadas, en el caso de materiales64, las workuntis se crean con target_nresults=1 y min_quorum=1.
Bueno, la solución está aquí, en este trozo de sched_send.cpp:
....
if (wu.target_nresults == 1 && app->target_nresults > 1) {
if (g_wreq->trust) {
if (config.debug_send) {
log_messages.printf(MSG_NORMAL,
"[send] [WU#%d] sending to trusted host, not replicatingn", wu.id
);
}
} else {
DB_WORKUNIT dbwu;
char buf[256];
sprintf(buf,
"target_nresults=%d, min_quorum=%d, transition_time=%ld",
app->target_nresults, app->target_nresults, time(0)
);
dbwu.id = wu.id;
if (config.debug_send) {
log_messages.printf(MSG_NORMAL,
"[send] [WU#%d] sending to untrusted host, replicatingn", wu.id
);
}
retval = dbwu.update_field(buf);
if (retval) {
log_messages.printf(MSG_CRITICAL,
"WU update failed: %d", retval
);
}
}
}
.....
es decir, si la workunit tiene target_nresults=1 y app tiene target_nresults>1 (el caso de materiales64), si el host no es trust (ha alcanzado cierta tasa de errores), al mandar el scheduler el result correspondiente a la workunit se hace un update en la tabla workunit, poniendo a target_nresults y a min_quorum el valor de target_nresults de la tabla app, misterio resuelto. |
评分
-
查看全部评分
|