From: Enrico A. <an...@na...> - 2007-09-05 11:25:10
|
Ho aggiornato il cvs per un problema che si era manifestato presso il =20 Comune di Modena dove, essendoci molti iscritti, quando si eseguivano =20 certe statistiche (in particolare la statistica utenti) si verificava =20 un timeout lato server in quanto l'esecuzione in linea dello script =20 richiedeva piu' di 300 secondi (che e' il timeout di default di apache) Questo problema ne espone uno molto piu' generico che ho dovuto =20 risolvere per forza: qualsiasi operazione in Partecipa.base viene =20 eseguita in linea, e se supera il timeout di apache puo' incorrerre =20 nello stesso problema; avevo gia' riscontrato un problema simile =20 nell'invio in massa delle email per i sondaggi (ora risolto), ma in =20 quel caso ho preferito optare per una soluzione specifica perche' la =20 mail aveva bisogno di sicurezze aggiuntive e soprattutto non c'era la =20 necessita' di un feedback immediato all'utente, come nel caso delle =20 statistiche. Per questi motivi ho dovuto interrompere il resto dello sviluppo per =20 concentrarmi su questa cosa, che mi ha richiesto parecchio tempo =20 perche' comporta varie modifiche al componente principale di tutto =20 Partecipa.net, cioe' il cgi-bin unox1 (normalmente installato in =20 /var/www/cgi-bin/partecipa.base/unox1) che esegue tutte le funzioni =20 condivise dell'applicativo (template, autorizzazioni, database etc) e =20 che lancia le procedure esterne richieste (i comandi .uxu). Inoltre la soluzione doveva essere piu' generica possibile, ed =20 implementabile con le minori modifiche possibili ai moduli che via via =20 presentassero questo problema di timeout. La soluzione che ho scelto e' la seguente: implementare nel cgi-bin =20 unox1 un redirect comandato da parametri cgi, che rimadasse ad una =20 pagina intermedia di attesa, generica, che a sua volta effettuasse un =20 refresh periodico per mostrare l'avanzamento dell'elaborazione, ed =20 alla fine di questa elaborazione presentasse all'utente un link per =20 visualizzare il risultato dell'elaborazione. Inoltre a fronte di questo redirect sono stato costretto a lanciare i =20 comandi .uxu "pesanti" con un fork, in quanto senza questo espediente =20 l'elaborazione rimarrebbe in linea e si incapperebbe nello stesso =20 errore di timeout, perche' il wrapper (unox1) attende l'uscita dal =20 comando .uxu per chiudere la sessione http. L'aggiornamento che ho appena fatto sul cvs comprende appunto le =20 modifiche al cgi-bin unox1, la form di attesa, la funzione per =20 aggiornare lo stato corrente dell'elaborazione e le modifiche alla =20 form e al comando di statistiche utenti. Per ora sembra funzionare egregiamente nel mio ambiente di test; =20 lascio da parte l'implementazione di questo nuovo sistema nei restanti =20 moduli statistici per permettervi di testare questo codice in ambienti =20 diversi dal mio: se il riscontro sara' positivo, o in alternativa se =20 fra un po' di tempo non avro' nessun riscontro procedero' alla =20 modifica a tappeto di tutti i moduli statistici . I files da aggiornare tramite cvs sono: ./src/common/lib/functions/misc-utils.pl ./src/web-interfaces/pub/templates/head_refresh.template ./src/web-interfaces/pub/templates/wait_page.template ./src/web-interfaces/pub/templates/corpo_wait_page.template ./src/web-interfaces/pub/templates/top_refresh_personal.template ./src/web-interfaces/pub/unox1 ./src/web-interfaces/pub/forms/statistiche_utenti.form ./src/web-interfaces/pub/cmds/adminStatUsers.uxu Come sempre vi consiglio di non testare il codice su macchine di =20 produzione e comunque di fare un backup dei files originali in modo da =20 poter tornare indietro in caso di problemi. |