Gli "Ospiti" della Sala Macchine


Home Page | Commenti | Articoli | Faq | Documenti | Ricerca | Archivio | Storie dalla Sala Macchine | Contribuire | Imposta lingua:en it | Login/Register


Nota: i miei commenti (quando ci sono) sono in italico

Un Lavoretto semplice: installare un Forum!

Mi capitava di lavorare, saltuariamente, per un mio amico che vende e-commerce ed affini. La maggior parte delle volte si trattava di semplici modifiche in codice ASP per personalizzare, che so, il calcolo delle spese di spedizione degli articoli, piuttosto che implementare qualche semplice javascript al volo. Capitava altre volte che, essendo lui un OTTIMO commerciale ma solo un discreto conoscitore delle tecnologie con cui ha a che fare, io fossi il suo riferimento tecnico. O anche operaio a basso costo, ma in fondo stiamo la. E paga, quindi va bene cosi'. Questa storia tratta appunto di quest'ultimo caso.

Premessa: per questo amico lavoro solo i week-ends e raramente le sere. Ci sono quindi parecchi fast forward alle settimane successive.

Uno dei suoi clienti, proprietario del forum di $ciPiaccionoIRadiomodelli, dopo una mail che descriveva alcune funzionalita' as-so-lu-ta-men-te indispensabili per il suo forum (i compleanni degli utenti, le cartoline virtuali, le stelline sotto l'avatar dell'utente ed altre amenita' assolutamente indispensabili al buon funzionamento del forum) e' stato rigirato a me.

Dovevo quindi integrare queste mer(d)avigliose migliorie nel suo forum attuale, che le gestiva come plugin addizionali. Capitava anche che nello stesso periodo uscisse la versione successiva di suddetto forum che integrava tutte queste fetecchie ed anche di piu', quindi il mio amico disse: "montagli direttamente la nuova versione, importa i post dalla versione vecchia e ti sei messo in tasca $cifretta euro per una mezz'ora di lavoro". Versione non a pagamento, ma scaricabile dopo una "donazione". Evabbe', spiccioli e non pago io. $cifrina per il forum, 2x$cifrina per avere anche l'assistenza. Non e' il caso che io dica altro, vero?

Siccome in ufficio ancora non mi stavano massacrando (al punto che per tre mesi non ho piu' avuto alcuna vita sociale), mi dissi "ma si, che problema vuoi che ci sia?" ed accettai.

Mi misi quindi di buona lena: backup del db (access, ovviamente), backup del sorgente del forum, rinomino la cartella vecchia (che va a fare compagnia ad altre 4 di altrettante versioni precedenti), scompatto la nuova, importo gli utenti, i dati etc. Il tutto in due orette di lavoro era finito. Fu allora che cominciarono i problemi.

Io: Dammi una mano a testare, che se e' tutto a posto lo chiami pure.
Mio amico: ok, via. Proviamo...
I: errori vari. Forse non e' stata un'idea tanto brillante non metterlo nella cartella "forum", qua si devono cambiare tutti i path.
M: si ma la cartella forum contiene gia' una vecchia versione.
I: e quindi buttiamola, che te la stipi a fare? Per ricordo?
M: ma no.. senti, facciamo cosi'. A giorni mi attivano per il cliente il server dedicato, montiamo tutto la sopra e via.

Fast forward ad una settimana dopo.

Ok, il db e' online ed aggiornato coi dati inseriti sul vecchio forum fino ad ora, facciamo una prova! Che diavolo sono questi errori ASP? Manca una funzione?

Mi attacco al manuale e me lo rileggo per bene:
Vuoi migrare da una vecchia versione?
Creare tabelle -> ok
Creare cartelle -> ok
Complimenti, tutto funziona! -> non sembra

L'occhio allora mi cade su una cartella "file da inserire alla fine". Mea culpa? Pare di si, ma allora perche' non e' scritto nel manuale? Vabe', installo i files mancanti e proviamo.

I: perfetto, con $volpe riesco ad accedere, fa il login e sembra funzionare
M: a me con $exploder invece no! Premo "login" ma non mi entra!

So che il saggio dice "se e' successo e' possibile" e che una nota marca aveva "impossible is nothing" tuttavia questa parola mi scappo' comunque dalle labbra.

I: Impossibile!
M: prova tu stesso!
I: $bruttaParola! E' vero! Che diavolo e' successo?
M: ed io che ne so? Sei qui apposta!
I: pork, pure tu c'hai ragione. Sai che faccio? Puo' essere che nell'aggiungere le tabelle del forum nuovo sul vecchio qualcosa non gli sia piaciuta. Parto dal forum vuoto suo e reimporto tutti i dati.

Fast forward una settimana e 40 tabelle importate (a mano) dopo.

Io: Ok, il db e' online ed aggiornato coi dati inseriti sul vecchio forum fino ad ora, funge sia con $volpe che con $exploder direi che e' fatta.
M: pare anche a me. Ora lo chiamo e gli dico di girare per una settimana, che se ci son problemi li risolviamo.

Fast forward ad una settimana di smanettamento degli utenti dopo. Elenco i problemi:
La pagina di ricerca non tira fuori niente, si blocca tutto.
La freccina che ti porta all'ultimo messaggio inserito funziona male.
Problemi di configurazione vari & eventuali che se avesse perso 5 minuti nel pannello di amministrazione avrebbe risolto da se.

Sistemate le configurazioni, scopro che il nuovo e bellissimo forum calcola male il numero di post/pagina e quindi spara un link totalmente errato. Il problema e' che la funzioncina matematica e' corretta (cacchio, una divisione la sanno fare, almeno!). Pero' i risultati dell'approssimazione della divisione sono TOTALMENTE RANDOMICI! Logica vorrebbe che per un numero di post/pagina non intero, si passi all'intero immediatamente successivo. Ma a quanto pare non e' cosi'. Vabe', messa la pezza e si va avanti. Apro la query della ricerca. A momenti svengo.

E' una query che mette IN CARTESIANO tutte le tabelle di post, intestazioni, risposte e spera che il risultato sia filtrabile per i criteri di ricerca immessi. Un po' troppo ottimistico, ed infatti si schianta anche sulla copia in locale del file access, figuriamoci sul server.

Il fatto che io non abbia alcuna voglia di sistemare questo mostro e' totalmente ininfluente sul fatto che lo debba fare, quindi mi armo di santa pazienza e mi metto al lavoro. Fast forward a tre settimane dopo (sono stato strapreso dal lavoro in ufficio).

M: molla tutto! Non funziona piu' niente!
I: ok, che ha fatto? (conosco il pollo)
M: niente! E' questa la tragedia!
I: vabe', vediamo.

Login da remoto sul server che risponde con la prontezza di un levriero spalmato da un tir sull'autostrada. Smanetta e smandruppa: spazio sul disco insufficiente. E scopro che questa grande fetecchia di forum logga pure quando la nonna dello sviluppatore si allaccia le scarpe la mattina. Vabbe', bruciamo i log, una riavviata al server ingolfato e funziona tutto.

Il problema spazio, pero', in breve tempo diventa critico. Il server lo esaurisce troppo in fretta, ogni 4/5 giorni devono essere puliti i log ma e' un'operazione che non sembra bastare piu'. La causa e' il maledetto file access del db. Sta crescendo ad una velocita' mostruosa. Nel giro dei giorni che separano il w.e. della crisi spazio a quello successivo dove posso lavorarci di nuovo raggiunge le MOSTRUOSE dimensioni di 500 mega. In crescita. Ed il problema non e' solo questo! Si aggiunge anche una estrema lentezza di risposta del forum. Ovvio, dovendo fare query su tabelle enormi, e' il minimo che ci si possa aspettare.

500 mega ed il server e' pieno? Ho piu' spazio io sul telefonino!

Decidiamo quindi di portare il tutto (si, scemi noi che abbiamo pensato ad una soluzione piuttosto che ad individuare la causa prima del male) sul DB MySql del server dedicato. Mi attrezzo in locale, faccio due prove, trovo un comodo tool che fa l'import e mi dedico alla tediosa operazione di travaso. Nel frattempo il DB era cresciuto alla mastodontica dimensione di 1.3Gb per 35 milioni di record da importare.

Ho sempre piu' spazio io sul telefonino eh...

Avvio la procedura, vado a dormire e la mattina dopo trovo una bella sorpresa: il server ha nuovamente esaurito lo spazio, non potendo coesistere i due db contemporaneamente.

Fast forward ad una settimana dopo. E' stato acquistato altro spazio ed il travaso ha avuto luogo. Completo le ultime configurazioni per il cambio di connessione e finalmente l'origine dati e' MySql. Ed e' ANCORA PIU' LENTO.

Preso dalla disperazione inizio a ravanare tra le impostazioni del pannello admin di MySql e solo allora scopro la causa prima di tutti i casini! C'è un indice di dimensioni ASSURDE.

Il forum ha la possibilita' di mandare agli utenti degli "ammonimenti" se, per esempio, non hanno settato il compleanno o similia. Quante volte l'ammonimento viene visualizzato da un utente, finisce in una tabella del db. Per motivi a me ignoti (la query sembrava scritta giusta) risultava pero' che NON venissero estratti record, quindi il forum andava di insert invece che di update. Morale? I trentacinque milioni di righe di troppo erano tutti in questa maledetta tabella. Tabella che veniva interrogata praticamente ad ogni azione sulle pagine! La spiano con rabbia, riavvio il server per buona misura e finalmente vedo la luce!! Il forum va una scheggia! Grida di giubilo da parte degli utonti e tanti ringraziamenti allo "staff". Amen!

Se per caso vi state chiedendo se ho dimenticato qualcosa, la risposta e' si.

Ti sei dimenticato che quella tabella verra' ricreata ogni volta e quindi devi schedularne la cancellazione periodica?

No, non ho dimenticato che la ricerca ancora non andava. Mentre io lavoravo, M tentava di tener buono il patron di $ciPiaccionoIRadiomodelli. Quest'ultimo, in un raptus di intelligente follia, decide di rivolgersi sul forum degli sviluppatori... del forum!

Dopo aver versato l'obolo, ovviamente, puo' porre le sue domande confidando nella loro sapienza per risolvere tutti i suoi problemi. Dopo un po' di botta e risposta, uno di questi gli chiede accesso totale sul server per tentare di risolvere la cosa. Guardo male M quando mi comunica la notizia.

I: ma e' pazzo?
M: (sorrisone) guarda qua!

Mi mostra un foglio che in breve dice "io ti do gli accessi, che in fondo sono roba tua visto che li hai pagati, ma se il tizio trasforma il server in una piattaforma per il cybercrimine sono C@##I TUOI! Io me ne chiamo fuori. Con affetto, M"

M: noterai la sua firma sotto.
I: sei un grande. E sai cosa? Meglio perderlo che trovarlo, uno cosi'.

Nota: al momento che scrivo son passati un paio di mesi da quest'ultimo evento. Ed ancora la ricerca non funziona! E beh...

GattoNero
31/07/2009 21:09

Precedente elenco Successivo

le storie degli ospiti sono in ordine sparso, quindi 'precedente' e 'successiva' possono portare su storie di altri autori

I commenti sono aggiunti quando e soprattutto se ho il tempo di guardarli (io o l'autore della storia) e dopo aver eliminato le cagate, spam, tentativi di phishing et similia. Quindi non trattenete il respiro.

In aggiunta: se il vostro commento non viene pubblicato non scrivetemi al riguardo, evidentemente non era degno di pubblicazione.

4 messaggi this document does not accept new posts

Riccardo Cagnasso

Il dannato prodotto catesiano Di Riccardo Cagnasso postato il 01/08/2009 01:49

>E' una query che mette IN CARTESIANO tutte le tabelle di post, intestazioni, risposte e spera che il risultato sia filtrabile per i criteri di ricerca immessi. Un po' troppo ottimistico, ed infatti si schianta anche sulla copia in locale del file access, figuriamoci sul server.

E' capitata anche a me sta cosa XD mi han dato da debuggare uno script di generazione di statistiche che era "troppo lento" e ho trovato una query che metteva in prodotto cartesiano 10 tabelle (di cui 5 inutili). Zappato via tutto e riscritto coi join, mi sono chiesto che avesse al posto del cervello il programmatore. -- Riccardo Cagnasso

argaar

e non è che Di argaar postato il 03/08/2009 10:39

..c'è qualche indizio al forum in questione eh? che magari prima di usarlo si prova se ste cose si son risolte... -- argaar

soichiro

e quando per un baco ............. Di soichiro postato il 11/08/2009 23:11

l'installazione di forum è stata per un paio di anni il mio incubo peggiore :|.
tutto risale agli inizi dei miei esordi nella difficile arte del webcosing, un cliente chiede forum gratis (in PHPorcapaletta) ed tutto fiducioso scarico $notoforumfreeinphpcolabrodo, faccio un pò di prove offline epoi mi lancio nel primo setup ed "Il Momento 'OhCa$$o' " è servito.

Causa congiunzione vecchie versioni di PHPorcapaletta e mysql zac mi rade al suolo un db di produzione con i dati di vari siti(non chiedetemi perchè più siti su un unico db non ero io il titolare dell'azienda..) e dalla fretta non avevo fatto backup e neppure l'hoster visto che non faceva backup dei db o_O .

Per mia fortuna avevo un backup fatto 2 giorni prima, ma è stata dura fare la supercazzola $numeromedio di clienti per giustificare 2 giorni di inserimenti perduti). Dalla volta prima di fare qualsiasi modifica o installazione al db faccio un sano backup e ho cambiato forum :P . -- Non e' importante che tu sia informatico, Power user, user o utonto, l'importante e' che tu sappia ridere dei tuoi errori!

Anonymous coward

panda non volpe Di Anonymous coward postato il 28/09/2009 12:13

$volpe andrebbe sostituito con $pandarosso :D -- Anonymous coward

Precedente elenco Successivo


Il presente sito e' frutto del sudore della mia fronte (e delle mie dita), se siete interessati a ripubblicare uno degli articoli, documenti o qualunque altra cosa presente in questo sito per cortesia datemene comunicazione (o all'autore dell'articolo se non sono io), cosi' il giorno che faccio delle aggiunte potro' avvisarvi e magari mandarvi il testo aggiornato.


Questo sito era composto con VIM, ora e' composto con VIM ed il famosissimo CMS FdT.

Questo sito non e' ottimizzato per la visione con nessun browser particolare, ne' richiede l'uso di font particolari o risoluzioni speciali. Siete liberi di vederlo come vi pare e piace, o come disse qualcuno: "Finalmente uno dei POCHI siti che ancora funzionano con IE5 dentro Windows 3.1".

Web Interoperability Pleadge Support This Project
Powered By Gojira