TrogloGeek / prestashop-tggatos-module

TggAtos Module for Prestashop (1.4 to 1.7), ATOS SIPS 6xx payment gateway
61 stars 34 forks source link

Problème avec MariaDB #84

Closed ZeNairolf closed 6 years ago

ZeNairolf commented 6 years ago

Bonjour,

Voilà j'ai besoin d'avoir la table ps_tggatos_transactions_today en InnoDB, et donc avec un seul champ qui sert d'index. Le soucis c'est que c'est impossible, vu que date et transaction_id ne sont jamais unique, vu que même si transaction_id est en AUTO_INCREMENT, il est réinitialisé tout les jours (d'ailleurs je trouve ce fonctionnement étrange).

Comment je peux convertir la table, et aurais-je des choses à changer dans le code ?

Après je pourrais le faire de mon côté, mais si je modifie le code, je vais devoir vérifier la compatibilité à chaque mise à jour.

Merci.

TrogloGeek commented 6 years ago

La table n'a pas été crée explicitement en MyISAM par hasard, InnoDB ne permet pas l'utilisation d'un AUTO_INCREMENT sur clef composite, ce qui est nécessaire pour utiliser une table en tant que générateur d'identifiant unique sur la journée calendaire et thread safe sans avoir à utiliser des transactions. Je n'ai pas regardé les specs du nouveau moteur Aria mais MyISAM est toujours disponible sur MariaDB. On peut se passer d'une telle table en utilisant un service externe à déployer mais la table MyISAM est je pense l'option qui ouvre l'accès au module au plus grand nombre surtout chez les moins techs. Offrir un système de paiement stable même en environnement fortement multithreadé et compatible avec un environnement multi-serveur était un des axiomes de base pour le module à sa conception.

La table n'est plus utile si vous désactivez le générateur (je n'ai plus le nom en tête mais c'est une option de l'onglet options avancées) vous laissez SIPS générer l'identifiant (à base d'heure au format HMS, autant dire que sur des boutiques avec un peu de traffique cela mène rapidement à des collisions d'identifiants et donc des pages d'erreur SIPS à l'envoi de l'utilisateur sur le serveur de paiement. La génération automatique SIPS a été conçue dans les années 90 il me semble, quand avoir à envoyer plus d'un utilisateur en paiement à la même seconde était quand même assez exceptionnel.

Pour ce qui est de la modification de code, git permet de faciliter la fusion avec d'éventuelles prochaines version, une autre méthode est simplement d'envoyer une pull request, si l'amélioration est généralisable je suis très enclin à prendre un peu de temps pour merger quitte à prendre le temps de mieux intégrer le concept à l'architecture du module.

TrogloGeek commented 6 years ago

Fermé pour absence de réponse, le ticket peut être réouvert si de nouvelles informations sont apportées.