Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Récupération média et DB lors de la création XSAF #30

Closed
mitsukarenai opened this issue Apr 30, 2013 · 11 comments
Closed

Récupération média et DB lors de la création XSAF #30

mitsukarenai opened this issue Apr 30, 2013 · 11 comments
Milestone

Comments

@mitsukarenai
Copy link
Owner

3u64og

Mmmh 😄

Proposition d'une méthode: si l'import de DB et/ou media est autorisé par la ferme XSAF distante, XSAF prépare le dossier avec les références, normal, mais se contente de placer un fichier genre "import.json" dans le dossier. Ce fichier c'est en fait le "/?media" distant.

autoblog.php vérifie la présence d'un fichier "import.json". S'il y a, il entre en mode "import".

  • récupère la DB distante si "articles.db" inexistant
  • (éventuel contrôle d'intégrité en comparant filesize() avec le header "Content-Length" distant)
  • compte le nombre d’éléments "files" dans le JSON
  • retourne à l'utilisateur: "encore X fichiers média à importer" (la page incluant un rafraichissement avec la balise HTML "refresh"); exit
  • rafraichissement oblige, le navigateur de l'internaute recharge la page, ce qui relance l'exécution de autoblog.php
  • autoblog.php télécharge X fichiers media (ou télécharge ce qu'il peut durant un temps imparti genre 5 secondes)
  • autoblog.php enlève du fichier "import.json" les fichiers téléchargés
  • autoblog.php retourne à l'utilisateur "encore X fichiers média à importer"

et ainsi de suite, jusqu'à ce que "import.json" soit vidé: autoblog.php le supprime alors et retourne à l'utilisateur que l'import est fini, et le rafraichissement suivant affiche l'autoblog normalement.

Cette méthode doit pouvoir répondre à l'import progressif d'autoblogs avec de (très) nombreux fichiers média, ou des fichiers média lourds, qui serait impossible à récupérer en un seul max_execution_time ou sans bande passante débridée.

Questions, commentaires et codes bienvenus.

@ArthurHoaro
Copy link
Collaborator

Globallement le workflow me convient bien. Ca devrait rouler.

Juste quelques remarques, dans le désordre : (les smileys sont chiants avec la ponctuation française !)

si l'import de DB et/ou media est autorisé par la ferme XSAF distante, XSAF prépare...

Je précise que l'import media/DB devrait être autorisé par la ferme distante ET locale.

  • autoblog.php télécharge X fichiers media (ou télécharge ce qu'il peut durant un temps imparti genre 5 secondes)
  • autoblog.php enlève du fichier "import.json" les fichiers téléchargés

Si on veut assurer une cohérence entre le fichier JSON et les medias réels, je pense qu'on est obligé de les télécharger + supprimer du JSON un à un.

Et enfin, le refresh HTML, je suis moyennement convaincu : si le système est lent pour un raison X et que la page se recharge pendant l'import de la DB ou du JSON, tout l'autoblog est corrompu.

@mitsukarenai
Copy link
Owner Author

Au sujet du refresh, n'ai crainte c'est autoblog.php qui l'envoie quand il a terminé un "batch" de fichiers.

  • GET
  • (autoblog.php travaille)
  • réponse en HTML avec meta refresh

Et d'ailleurs autoblog.php peut déposer un lockfile avant de travailler sur les fichiers, de sorte que le rafraichissement manuel (touche F5) ne conduit pas à un processus multiple.

@mitsukarenai
Copy link
Owner Author

D'autres remarques à soulever, ou on attaque la bête ? 😄

@mitsukarenai
Copy link
Owner Author

beta ajoutée à MASTER. Tout feedback apprécié.

@ArthurHoaro
Copy link
Collaborator

a840a71

@ArthurHoaro
Copy link
Collaborator

Bon je galère un peu à tester... Je vais creuser ça, mais en attendant, deux remarques sur le code :

  • $maxtime et la fréquence de rechargement de la page ne devraient ils pas être les même ?
  • L586 tu essaies d'afficher le nombre de médias restant à partir du fichier qui vient d'être supprimé.

@mitsukarenai
Copy link
Owner Author

$maxtime et délai de rafraichissement: non ils peuvent ne pas être les mêmes. En fait ils ne DOIVENT PAS être les mêmes: c'est le premier hit après l'import du dernier média qui provoque le "nettoyage", il n'y a pas lieu d'attendre ni faire patienter l'utilisateur (ou les 10 autres utilisateurs qui pourraient hitter en même temps).

L586: non, regarde mieux :)
import.json existe; import.lock existe pas (lancement d'import): $count est mis dans import.lock, $count est défini et utilisé tel quel
import.json existe; import.lock existe (import déjà en cours): $count pas défini, le count est lu à partir de import.lock
à la fin de l'import premier hit: import.lock est supprimé mais $count est encore défini, donc import.lock n'est pas lu 😄
à la fin de l'import hits suivants: import.json n'existe pas, fonctionnement normal.

... aspirine ? 😸

@ArthurHoaro
Copy link
Collaborator

Oulah, tu as raison, je suis passé à côté du if... Il est temps que je fasse une pause !

@ArthurHoaro
Copy link
Collaborator

Après test en production, je confirme le bon fonctionnement de la fonctionnalité.
Typiquement, un blog qui n'existe plus a bien été importé.

@mitsukarenai
Copy link
Owner Author

Good :) Des idées pour #31 ?

@ArthurHoaro
Copy link
Collaborator

Oui, le lien que j'ai mis l'autre jour, mais je n'ai pas eu le temps de creuser.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants