Tags:
create new tag
, view all tags

Stage de Grégory Adam - IUT Illkirch - [08/04/20 au 23/06/20]

Important : cette page est réservée au suivi du stage, merci de ne pas la modifier

Informations générales pour les stagiaires

Pour toute information concernant ce stage : contacter Grégory

Sujet

  • Titre:
Développement d'un VOSpace : accès et partage de fichiers de données astronomiques

  • Description:
Le contexte est l'Observatoire Virtuel International (http://ivoa.net/). Il s'agit d'un consortium définissant des standards et protocoles ("à la W3C") d'interopérabilité pour les services et les données astronomiques.

Le stage porte sur l'implémentation du standard VOSpace. Pour simplifier, c'est un protocole d'accès à un espace de stockage. Ce n'est pas une technologie en soit, on peut par exemple l'utiliser autant en surcouche d'un cloud que d'un simple système de fichiers local ou distant.

  • Objectifs et finalités attendus du stage :
Développer une API Java permettant d'implémenter le protocole VOSpace "par dessus" un système de stockage existant quelqu'il soit (les utilisateurs de cette API devront évidemment faire le lien avec leur propre solution de stockage).

Dans le cadre des tests, l'étudiant fera le lien entre cette API et un simple "filesystem", donc un répertoire. Aucune authentification de la part des utilisateurs ne sera nécessaire pour le prototype.

Stage (Avril - Juin 2020)

Avril

  • 22, arrivée

  • 27/04/2020 :
    - Ajout des tests unitaires pour l'UriManager et DatabaseManager afin de vérifier leur bon fonctionnement.
    - Ajout de log sur DatabaseManager pour afficher les accès à la base de données et si elles ont réussi ou non.
    - Ajout de la conversion des noeuds en XML contenant les metadata ce qui permettra de transmettre ces metadata lors d'une requête.
    - Correction d'une erreur sur la base de données : ajout d'un clé étrangère sur la target d'un linknode.
  • 28/04/2020 :
    - Mise en place des router vertx afin de pouvoir faire des requêtes pour récupérer les XML (getNode).
    - Test pour la récupération d'un fichier upload sur le serveur avec vertx et début de la conversion des XML envoyés pour pouvoir mettre à jour le noeud demandé (setNode).
    - Log pour le RoutManager lors d'une requête.
  • 29/04/2020 :
    - Ajout d'une base de données dans test-ressources pour les tests unitaires notamment.
    - Accès aux nodes via la route /vospace/nodes/[path] au lieu de /vospace/[path].
    - Correction de l'xml et suppression des balises des attributs qui sont vides (attribut property par exemple).
    - Mise à jour du fichier build.gradle : Ajout des plugins : application, eclipse, com.github.johnrengelman.shadow et suppression des plugins : war, eclipse-wtp. Changement compile en implementation pour garder la compatibilité avec gradle 7.0.
    - Organisation des packages
    - Changement du fichier config en xml en fichier properties.
    - Utilisation d'un try-with-resources pour éviter de ne pas fermer certaine connection s'il y a une erreur.
    - Passage des ArrayLists en arrays pour réduire l'utilisation mémoire.
    - Mise à jour du REAMDE.md.
  • 30/04/20 :
    - Implémentation d'exceptions spécifiques à VOSpace.
    - Ajout de nouvelles propriétés dans la base.
    - Modification des tests unitaires du DatabaseManager : génération d'une base au début des tests et destruction à la fin.
    - Ajout de la javaDoc sur toutes les classes.
    - Début génération des xml pour getproperties, getViews, getProtocols.

Mai

  • 04/05/20:
    - Implémentation de getProtocols.
    - Implémentation de getProperties.
    - Ajout des routes /vospace/protocols et /vospace/properties.
  • 05/05/20:
    - Ajout d'un XmlParser à la place de la méthode toXml() pour les noeuds.
    - Ajout d'un JsonParser pour pouvoir transmettre les noeuds sous la forme d'un json.
    - Il est maintenant possible de récupérer les noeuds à la racine en utilisant la route : "/vospace/nodes/".
    - Ajout du format json pour getProtocols et getProperties.
    - Pour récupérer les données au format json il faut préciser le format json dans accept dans le header ("accept : application/json"), de base le format xml est choisi.
  • 06/05/20:
    - Ajout de PreparedStatement notamment dans getNode afin d'éviter des injections sql.
    - Ajout de getViews (avec format json et xml).
    - Mise à jour du MCD de la base de données.
    - Mise à jour de l'UML de l'application.
  • 07/05/02:
    - Utilisation de dom pour générer les xmls au lieu de la concaténation de chaîne.
    - Utilisation de JsonObject pour générer les jsons.
    - Découpage du main en plus petites fonctions.
  • 11/05/2020:
    - Gestion de setNode côté base de données.
    - Exception setNode pour : un parent inconnu, un noeud inconnu, permission lire seulement.
    - Implémentation d'une fabrique pour les nodes.
    - Ajout de nouveau test unitaire pour DatabaseManager.
  • 12/05/2020:
    - Ajout d'un dataType afin de faire des vérification sur les valeurs des propriétés.
    - Implémentation d'une conversion d'un xml vers un noeud.
    - Mise en place de la route de setNode.
    - Ajout des tests unitaires concernant setNode.
  • 13/05/20:
    - Implémentation de la suppression d'un noeud (requête delete en précisant le chemin du noeud à supprimer).
    - vérification des valeurs des propriétés.
    - Suppression d'un propriété en utilisant l'attribut xsi:nil="true" dans le xml de setNode.
    - Ajout de tests unitaires pour setNode et deleteNode.
  • 14/05/20:
    - Ajout d'un fichier de configuration pour logback.
    - Implémentation de createNode côté base de données.
    - Exception pour createNode.
  • 15/05/20:
    - Gestion des exceptions de createNode + route pour createNode.
    - Ajout des formats jsons pour les retours de setNode et createNode.
    - .auto en fin d'uri afin de générer un uri unique automatiquement.
    - Ajout du paramètre detail=min pour getNode.
  • 18/05/20:
    - Ajout des paramètres detail=max et detail=properties pour getNode.
    - Ajout paramètre uri et offset pour getNode.
    - Mise à jour de la propriété ctime lors de la modification des metadata.
    - Implémentation de moveNode côté base de données.
    - Base de la gestion des fichiers/dossiers.
  • 19/05/20:
    - Implémentation du stockage des données sous forme d'un système de fichier.
    - CreateNode crée désormais aussi un fichier/dossier lors de son utilisation.
    - DeleteNode supprime aussi le fichier correspondant au noeud.
  • 20/05/20:
    - MoveNode permet maintenant de déplacer/renommer un fichier/dossier.
    - Implémentation de copyNode côté base de données.
    - Gestion de la copie du fichier/dossier (les sous fichiers/dossiers d'un dossier sont copiés récursivement).
  • 25/05/2020:
    - Ajout d'une vérification pour ne pas créer un fichier pour un linkNode.
    - Ajout d'une erreur si un linkNode n'a pas de cible lors de la création d'un noeud.
    - Mise en place d'une classe Transfer et une méthode pour convertir un xml en Transfer : cette classe permettra de récupérer les informations d'un transfer comme par exemple la cible, la destination, ect.
    - Début de la mise en place des jobThreads.
  • 26/05/2020:
    - Changement de la méthode pour déplacer/copier des fichiers/dossiers afin que ces transferts puissent être interrompus. La copie se fait maintenant bloc par bloc. Le déplacement consiste en une copie puis une suppression (sauf si le fichier est juste renommé)
    - Ajout de nouveaux exemple dans le readme.
  • 27/05/2020:
    - Mise en place de TransferJob.
    - instanciation de TransferJob dans la fabrique UWS.
    - Il est maintenant possible d'utiliser les méthodes moveNode et copyNode.
  • 28/05/2020:
    - Correction de l'erreur s'il n'y a pas de propriété lors de la création d'un noeud.
    - Gestion des préfixes pour la lecture des xmls.
    - Correction bug pour la création d'un linkNode qui causé qu'un linknode n'ait jamais de cible.
    - Ajout de .auto pour générer automatiquement un uri lors d'un transfert moveNode ou copyNode.

Juin

  • 02/06/2020:
    - Mise en place de l'envoi de donnée vers VoSpace côté base de données et système de données.
    - Génération des url permettant au client d'envoyer des données.
  • 03/06/2020:
    - Ajout de la route permettant d'envoyer des données
    - Ajout des exceptions concernant pushToVospace.
    - Implémentation de .auto pour pushToVospace permettant la génération automatique d'un uri unique.
    - Calcule et mise à jour de la propriété taille (length) quand il y a une modification.
    - Génération des url permettant au client de recevoir des données.

Liens

  • H2 : Gestion de la base de données.
  • Gradle.
  • Logback : Gestion des logs de l'application.
  • Vertx : Bibliotèque pour le côté api
  • VOSpace.

Versions testables

  • ...

Documentation

Liste des améliorations à envisager

  • ...

Bugs connus

  • ...
Topic attachments
I Attachment Action Size Date Who Comment
PDFpdf presentationVOSpace.pdf manage 953.7 K 2020-06-23 - 15:02 UnknownUser  
PDFpdf rapportStage_20200701_1440_final.pdf manage 1592.9 K 2021-06-10 - 10:42 GregoryMantelet  
Topic revision: r26 - 2021-06-10 - GregoryMantelet
 
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback