Project

General

Profile

Project activity #30747

closed

Multiple bestandsdelen support DRC 1.1

Added by Tahir Malik 4 months ago. Updated 3 months ago.

Status:
Resolved
Priority:
P4 Normal
Assignee:
Target version:
-
Start date:
12/11/2024
Due date:
% Done:

0%

Estimated time:

Description

Het moet mogelijk zijn meerdere bestandsdelen te uploaden i.p.v. 1 multi-part bestand.

Voorbeeld:

Hoe openzaak dit bijvoorbeeld opgelost heeft in hun implementatie is het zetten van een configuratiewaarde voor een "max grootte bestandsdeel", die kan arbitrair bijvoorbeeld ook prima gezet worden op 50 of 100mb wmb
Daarbij wordt alles wat niet in hele bestandsdelen past in het laatste bestandsdeel gezet. dus bij een max van 5 mb en een documentgrootte van 12,4 mb krijg je dan 3 bestandsdelen (2 van 5mb en 1 van 2,4 mb)

Huidige werkwijze:
  • POST DRC zonder inhoud, maar wel met grootte
    • Response 1 bestandsdelen url
  • PUT Multi-Part upload bestand conform grootte
  • POST unlock DRC document
Nieuwe werkwijze:
  • alfresco-global.properties drc.bestandsdelen.grootte=1024 (KB)
  • POST DRC zonder inhoud, maar wel met grootte bijv. 5MB
    • Response 5 bestandsdelen url's
  • PUT Multi-Part upload bestand conform grootte van 1MB per stuk (5x)
  • POST unlock DRC document
    • Wordt samengevoegd met volgnummer tot 1 bestanddeel van de oorspronkelijke UUID
Actions #2

Updated by Tahir Malik 4 months ago

Graag doorgaan in branch: https://git.contezza.nl/community/alfresco-documenten-api/-/blob/feature/upgrade_refactor/%2327974/pom.xml?ref_type=heads
  • Hiervan een branch maken t.b.v. feature/bestandsdelen/#30747
  • Dan mergen met main
    • Wordt een 2.0 versie gemaakt voor Alfresco 23.x
  • Dan een branch maken vanuit main
    • Downgraden naar Alfresco 7.3.x
    • Downgraden naar Log4j1 of een mechaniek bedenken met bijv. een profiel dat in 1 project beiden LOG4j's kunnen zitten
Actions #4

Updated by Tahir Malik 4 months ago

  • Description updated (diff)
Actions #5

Updated by Erik Hoogland 4 months ago

Eerste aanpassingen zijn gedaan in nieuwe branch vanaf branch 'feature/upgrade_refactor/#2327974'

Al gedaan:
  • afhankelijk of bestandsomvang groter is dan de max, worden er meerdere bestandsdelen gemaakt
    • Dit zijn aparte nodes, met enkel de bestandsomvang van dat deel als parameter
    • de max toegestane grote is nu nog een statische variabele in de class zelf
  • De lock van het document vindt nu plaats na de creatie van bestandsdelen
  • Bij PUT van bestandsdeel wordt het bestandsdeel unlocked
TODO:
  • Toevoegen extra metadata aan bestandsdelen (volgnummer, voltooid enz.)
  • Correcte plaatsing van bestandsdelen
    • Dit is nu nog de standaard lokatie voor documenten
  • Samenvoegen van bestandsdelen bij unlock
Actions #6

Updated by Tahir Malik 4 months ago

  • Estimated time deleted (120.00 h)
Actions #7

Updated by Erik Hoogland 4 months ago · Edited

Toegevoegd/Aangepast:
  • Aspect voor bestandsdelen aan RGBZ model
  • Bestandsdelen worden nu in dezelfde folders als document opgeslagen
  • Functies voor zoeken bestandsdelen a.d.v. NodeRef parent
  • Bij Unlock een check of alle bestandsdelen voltooid zijn
  • Samenvoegen en opslaan bij document bij unlock
  • JavaDoc bijgewerkt
  • Property 'drc.maxChunkSize' toegevoegd aan 'alfresco-global.properties', in bytes. Momenteel 10 kb voor testen
TODO:
  • Bekijken of de huidige manier van bestandsdelen linken aan document wenselijk is, en of deze verwijderd moeten worden na samenvoeging.
  • Testen bijwerken/beoordelen
    • Momenteel falen 11 van de 92 test cases, allemaal bij de upload. Er moet worden bekeken of de tests nu incorrect zijn, of dat nog niet alle senario's gedekt zijn.
  • Nieuwe tests aanmaken
  • Documentatie beoordelen/bijwerken
Actions #8

Updated by Tahir Malik 4 months ago

Erik Hoogland wrote:

  • Bekijken of de huidige manier van bestandsdelen linken aan document wenselijk is, en of deze verwijderd moeten worden na samenvoeging.
Na succesvolle samenvoeging mogen de bestandsdelen verwijderd worden.
  • Eerst ASPECT sys:temporary toevoegen
  • Dan verwijderen

Als je klaar bent met de rest van de TODO's moet ook de API spec gebumped worden naar 1.5, hiervoor maak ik een separate ticket aan.

Actions #9

Updated by Erik Hoogland 4 months ago

  • Bestandsdelen worden nu ook verwijderd na succesvol samenvoegen, met aspect 'sys:temporary'
  • property met referentie naar hoofdobject is nu 'rgbz:bestandsdeelParent'
  • De PATCH functie geeft nu ook correct de bestandsdelen terug
  • Test zijn bijgewerkt om overeen te komen met de nieuwe situatie en compliant met de VNG implementatie te zijn.
    • Alle bestaande testen slagen nu, voor zowel Alfresco als VNG
  • Extra test geschreven voor dekking nieuwe functie
    • Deze faalt nu nog bij de VNG test, omdat daar de maximale grote van een bestandsdeel hoger is dan bij de Alfresco test
  • Maximale grote van een bestandsdeel is default op 2 MB gezet
  • Documentatie is bijgewerkt, met aspect en nieuwe alfresco-global parameter
Actions #10

Updated by Tahir Malik 4 months ago

  • Parent task set to #30786
Actions #11

Updated by Erik Hoogland 4 months ago

  • Status changed from Backlog to In Progress
Actions #13

Updated by Erik Hoogland 4 months ago

  • Status changed from In Progress to Feedback
  • Assignee changed from Erik Hoogland to Rick de Rooij

@Rick de Rooij Ik heb hiervoor een merge request klaar staan: https://git.contezza.nl/community/alfresco-documenten-api/-/merge_requests/1

Dit moet uiteindelijk ook naar main, maar ik zal eerst een branch hiervan gaan maken, die werkt op alfresco 7.3.
Er staat nog één testissue open, maar dat is in mijn ogen niet blocking. De test faalt tegen VNG, omdat deze een grotere max heeft voor bestandsdelen dan bij de test van Alfresco, en we hebben nog niet kunnen vinden hoe dit aangepast kan worden.
Dus bij onze test komen er twee bestandsdelen, omdat we de max op 50 Bytes zetten voor de test. Bij VNG is dat standaard 6 MB. Dus komt er daar maar 1 bestandsdeel terug met ons test bestand van 79 Bytes.

Ik heb deze code nog niet in de Tezza Workspace kunnen testen, omdat deze achterloopt op basis van de autorisatie structuur.

In overleg met Tahir maak ik vanuit deze branch ook een nieuwe branch op basis van Alfresco 7.3, om de wijzigingen daarin mee te nemen.

Actions #14

Updated by Erik Hoogland 4 months ago

In overleg met Rick:
  • Vanaf deze branch een nieuwe branch aangemaakt op Alfresco 7.3
    • Deze heeft versie 1.2.8-SNAPSHOT, en zal het main worden gemerged na review van beide branches
    • Alle testen geven hetzelfde resultaat als de 23.x branch
  • De huidige branch wordt met de refactor branch gemerged als versie 2.0.0, en zal een eigen release pipeline krijgen
  • Er missen nog een aantal standaard testen van VNG voor bestandsdelen, deze moeten worden toegevoegd zover mogelijk
    • Al toegevoegd en werkend tegen Alfresco en VNG:
      • test_create_eio_full_process
    • Nog toe te voegen:
      • test_upload_part_twice_correct
      • test_update_metadata_after_unfinished_upload
Actions #15

Updated by Erik Hoogland 4 months ago

  • Tests 'test_upload_part_twice_correct' en 'test_update_metadata_after_unfinished_upload' zijn toegevoegd
  • Gedrag rondom bestandsdelen aangepast om aan de test te voldoen.

@Rick de Rooij Ik kwam nog wel het volgende issue tegen in 'test_update_metadata_after_unfinished_upload' (https://github.com/VNG-Realisatie/documenten-api/blob/1.3.0/src/drc/tests/test_upload.py#L812)

In de test staat het volgende:

Test the update process of the document metadata with some of part files uploaded
Input:
* updated fields don't include bestandsomvang and inhoud

Expected result:
* bestandsdelen objects are regenerated
* all uploaded part files are lost

IK lees dit als verwijderen van bestandsdelen en nieuwe aanmaken. Dit is ook wat ik gedaan heb. Als ik echter check of het lock van een nieuw bestandsdeel anders is dan het oude lock. Dat is het geval bij Alfresco, maar bij VNG blijft het lockId hetzelfde. Deze check is geen officieel onderdeel van de test dus ik heb het uitgecommentarieerd. de test gaat zo goed bij alfresco en vng, maar ik vindt dat hier nog wel naar gekeken moet worden.

Ik heb de aanpassingen ook in de 7.3 branch doorgevoerd. Volgens mij hebben we hiermee alle tests van UploadTest

Actions #16

Updated by Rick de Rooij 4 months ago

  • Assignee changed from Rick de Rooij to Erik Hoogland

Samen review gedaan, aantal verbeteringen:

  • system.out weghalen
  • default chunck size naar 100MB (in module)
  • aanmaken file parts aanpassen naar child refs van bestand, zie audit log als referentie om bestandsdelen file parts op te slaan.
  • drc.local env variable testen met CHUNK_SIZE
Actions #17

Updated by Erik Hoogland 4 months ago

  • Assignee changed from Erik Hoogland to Rick de Rooij

De aanpassingen zijn gedaan in beide branches, m.u.v. CHUNK_SIZE bij de drc. Deze aanpassing had geen effect op de tests.
Alle Alfresco testen gaan goed na de aanpassingen.

Actions #18

Updated by Rick de Rooij 3 months ago

  • Assignee changed from Rick de Rooij to Erik Hoogland

alfresco-dcoumenten-api 1.3.0 (7.x) en 2.0.0 (23.x) zijn gereleased.

Actions #19

Updated by Erik Hoogland 3 months ago

  • Status changed from Feedback to Resolved

Status naar resolved, is in release meegenomen

Also available in: Atom PDF