? patch.vip3 ? patch.db25 Index: todo.jcea =================================================================== RCS file: /cvsroot/ircd/todo.jcea,v retrieving revision 1.3 retrieving revision 1.4 diff -c -r1.3 -r1.4 *** ../ircu2.10.06/todo.jcea 1999/10/08 18:07:05 1.3 --- ../ircu2.10.06+/todo.jcea 1999/10/11 18:25:38 1.4 *************** *** 1,3 **** --- 1,11 ---- + 11/Oct/99 + Tenemos problemas si una BDD se borra si ese nodo + tiene varias vias de actualizacion (HUB). Ver documentacion + online. + + El parche DB25 soluciona el problema, pero es bastante + chapucero. Hay que pensar algo mejor. + 08/Oct/99 Imprimir NOTICES a los ircops en puntos estrategicos: Borrado de la base de datos Index: ircd/s_debug.c =================================================================== RCS file: /cvsroot/ircd/ircd/s_debug.c,v retrieving revision 1.42 retrieving revision 1.43 diff -c -r1.42 -r1.43 *** ../ircu2.10.06/ircd/s_debug.c 1999/10/10 01:10:29 1.42 --- ../ircu2.10.06+/ircd/s_debug.c 1999/10/11 18:25:38 1.43 *************** *** 191,197 **** '-', #endif #endif ! 'D','B','2','4', #ifdef DB_ESNET '+', #else --- 191,197 ---- '-', #endif #endif ! 'D','B','2','5', #ifdef DB_ESNET '+', #else Index: ircd/s_serv.c =================================================================== RCS file: /cvsroot/ircd/ircd/s_serv.c,v retrieving revision 1.26 retrieving revision 1.27 diff -c -r1.26 -r1.27 *** ../ircu2.10.06/ircd/s_serv.c 1999/10/08 18:07:52 1.26 --- ../ircu2.10.06+/ircd/s_serv.c 1999/10/11 18:25:38 1.27 *************** *** 1764,1770 **** --- 1764,1797 ---- tabla_hash_lo[que_bdd]=0; } + + static void corta_si_multiples_hubs(char que_bdd) { + Dlink *lp; + int num_hubs=0; + + for(lp = me.serv->down; lp; lp = lp->next) { + if(find_conf_host(lp->value.cptr->confs, + lp->value.cptr->name,CONF_HUB)!=NULL) num_hubs++; + } + if(num_hubs>=2) { + /* + ** No podemos simplemente hace el bucle, porque + ** el "exit_client()" modifica la estructura + */ + corta: + for(lp = me.serv->down; lp; lp = lp->next) { + if(find_conf_host(lp->value.cptr->confs, + lp->value.cptr->name,CONF_HUB)!=NULL) { + exit_client(lp->value.cptr,lp->value.cptr, + &me,"BDD inconsistente. Resincronizando..."); + goto corta; + } + } + } + } + + /* * initdb * * Lee la base de datos de disco *************** *** 1810,1819 **** --- 1837,1852 ---- alarm(0); sendto_ops("Solicitando actualizacion BDD '%c' " "a los nodos vecinos.",ESNET_NICKDB); + /* + ** No deberia pedirse actualizacion + ** a nodos que no son HUBs, porque + ** sus datos no se van a aceptar. + */ for(lp = me.serv->down; lp; lp = lp->next) { sendto_one(lp->value.cptr,"%s DB %s 0 J %lu %c", NumServ(&me),lp->value.cptr->name,tabla_serie[ESNET_NICKDB],ESNET_NICKDB); } + corta_si_multiples_hubs(ESNET_NICKDB); } almacena_hash(ESNET_NICKDB); } *************** *** 1960,1965 **** --- 1993,1999 ---- borrar_db(que_bdd); sendto_one(sptr,"%s DB %s 0 E %s %c\n", NumServ(&me),sptr->name,parv[4],que_bdd); + corta_si_multiples_hubs(que_bdd); } /*