Blogg

Alfresco och ECM

Fixa Epost-transformations och indexeringsbugg i 5.0

feb 23 2015

Kategorier : Anteckningar

En av Loftux klienter fick nyligen prestandaproblem. Det startade efter en uppgradering till 5.0.c Community. När vi tog tag i problemet noterade vi följande

  • De använder Imap frekvent för att överföra epostmeddelanden till Alfresco. De har bara 3 mappar exponerade till imap, när epostmeddelandena väl är inne i Alfresco så slutklassificeras de via en användardialog, och flyttas till slutlagring.
  • Antalet epostmeddelanden har blivit 150.000+ vilket är ett stort antal meddelande. Men de lagrars inte i imap mappen permanent då de flyttas efter slutklassificering.
  • Indexer storlek p disken växte exponentiellt så att det var flera gånger större än aktuell storlek för Alfresco content stor. Hur vi än försökte skapa mer utrymme på disk så räckte det aldrig.

Användare kunde mer eller mindre ange slumpmässig kombination på 3-5 tecken och få en träff när de gjorde sökningar. Det sade oss att det måste vara något fel med transformeringen av eml filer (RFC822 epostmeddelanden). Och mycket riktigt, EMLTransformer returnerade alltid hela texten även för multi-part meddelanden. Eftersom vår klient använder MS Exchange så är det även en bilaga som heter winmail.dat och som är base64 enkodad. Du ser något som liknar texten nedan när du transformerar till text. Texten nedan skall bara returnera "Ett meddelande i texten", men all text kommer med.

------=_NextPart_000_046B_01D029C3.6802CD40
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: 8bit

Ett meddelande i texten
------=_NextPart_000_046B_01D029C3.6802CD40
Content-Type: application/ms-tnef;
name="winmail.dat"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="winmail.dat"

eJ8+IgMOAQaQCAAEAAAAAAABAAEAAQeQBgAIAAAA5AQAAAAAAADoAAEIgAcAGAAAAElQTS5NaWNy
b3NvZnQgTWFpbC5Ob3RlADEIAQgABQAEAAAAAAAAAAAAAQkABAACAAAAAAAAAAEDkAYA1BkAAF4A
AAALAAIAAQAAAAMAJgAAAAAACwApAAAAAAALACsAAAAAAAMALgAAAAAAQABIABLOPvy6KdABAgFM

Om du vill se om du påverkas, skapa en regel på en mapp för att transformera epost till text och ladd upp en eml fil till mappen. Om du ser något som motsvarar (den interna epost-strukturen) till texten ovan, så har ditt system samma problem. Om inte så betyder det att ditt epostmeddelande inte är multi-part (har både text och html version eller bilaga). Det återstår att verifiera om det finns situationer där multipart transformering fungerar, det kan vara så att det fungerar med vissa typer av meddelanden eller om andra inställningar för landskod och språk.

Problemet för vår klient var inte bara att indexeringen blev fel, förhandsgranskningen blev också ett problem. När de gör den slutliga klassificeringen så visas en dialog med metadata och en förhandsvisning av dokumentet. Med 5.0 så är det via HTML5 viewern. Då texten efter transformeringen inte bara innehåll epost-texten, utan även den base64 enkodade versionen av bilagor med mera så kunde dokumentet i förhandsvisningen blir 300-500 sidor lång. Oftast fanns den text man ville ha redan på första sidan. Du kan säkert förstå vilken belastning det lade på servern när ett stort antal epostmeddelanden klassificeras per dag.

Loftux underhållet en version av Alfresco Community för våra kunder som är mer uppdaterad och där vi lägger till fixar för våra klienter. I detta fall så fixade vi EMLTransformer.java, det huvudsakliga felet var att dessa rader skrev över multi-part encoding och att meddelande tolkades som att innehålla endast text.

if (charset != null)
{
mimeMessage.setHeader("Content-Type", "text/plain; charset=" + charset.name());
mimeMessage.setHeader("Content-Transfer-Encoding", "quoted-printable");
}


Genom att ta bort raderna så fungerade det igen. De är mest troligen en kvarleva efter att email-library uppdaterats, det behövdes troligen någon gång men förstör transformeringen i nuvarande version.
När vi ändå höll på så uppdaterade vi så att även eml filer kan transformeras till html när html-version finns med i epostmeddelandet. Du kan hitta alla ändringar i Alfresco Loftux community versionen https://github.com/loftuxab/alfresco-community-loftux. Ytterligare detaljer finns via ärendet https://github.com/loftuxab/alfresco-community-loftux/issues/22. När detta skrivs finns det bara tillgängligt i snapshot branch.

Om du vill dra fördel av en supportad version av Alfresco Community och bli kund till Loftux kontakta os via kontaktformuläret eller skicka epost till info@loftux.se.