Project activity #30747
closed
Multiple bestandsdelen support DRC 1.1
Added by Tahir Malik 4 months ago.
Updated 3 months ago.
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
- Description updated (diff)
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
- Estimated time deleted (
120.00 h)
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
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.
- 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
- Parent task set to #30786
- Status changed from Backlog to In Progress
- 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.
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
- 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
- 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
- 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.
- 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.
- Status changed from Feedback to Resolved
Status naar resolved, is in release meegenomen
Also available in: Atom
PDF