[Résolu] Plantage de liveCollab à cause de socket.js

Bonjour,

Je migre mon serveur de production scenari 4.2.106 en 4.2.107, en suivant la documentation que j’ai validé lors de la migration d’un serveur d’intégration.

Scenari fonctionne parfaitement, sauf le module liveCollab pour une raison que je n’explique pas. En particulier parce que liveCollab fonctionne parfaitement en 4.2.106 sur mes serveurs de production et d’intégration et la migration du serveur d’intégration n’a eu aucun problème.

Log du serveur : 2019-01-10.scenari.log (4,6 Ko)

La commande /data/sc42test/system/nativlib/node --version renvoie v0.8.0.

Si je cherche à lancer le service liveCollab à la main avec la commande suivante :
# /data/sc42test/system/nativlib/node /data/sc42test/system/nodejslib /scLiveCollab/liveCollabServer.js --port 58121 --connectUrl ws://10.13.254.72:58121/ws --logPath /var/log/sc42test/[date].liveCollab.log

Voici l’erreur qui remonte : liveCollab.log (977 Octets)

/data/sc42test/system/nodejslib/socket.io/lib/socket.js:339
Socket.prototype.$emit = EventEmitter.prototype.emit;
^
TypeError: Cannot read property ‹ emit › of undefined
at Object. (/data/sc42test/system/nodejslib/socket.io/lib/socket.js:339:48)
at Module._compile (module.js:449:26)
at Object.Module._extensions…js (module.js:467:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:362:17)
at require (module.js:378:17)
at Object. (/data/sc42test/system/nodejslib/socket.io/lib/manager.js:20:14)
at Module._compile (module.js:449:26)
at Object.Module._extensions…js (module.js:467:10)

Quelqu’un a-t-il rencontré un problème similaire ?

Maj : en fait, par un vilain hasard, le problème ne venait pas de la version de nodejs, mais de l’emploi d’un port déjà utilisé par un autre processus.

Mise à jour du fil parce que la situation n’est pas satisfaisante comme je le croyais précédemment.

1. Contexte

  • OS : Linux CentOs 7.2
  • Moteur d’application : Jetty 9.4
  • Scenari chain-serveur : passage de 4.2.1.06 à 4.2.1.07, la webapp se nomme sc42.
  • Serveurs : les deux serveurs, intégration et documentation, sont au même niveau système

2. Commande de lancement du module collab

Le module collab est initié par le process sc42 avec la commande suivante :

Starting local collab server with command: /data/sc42/system/nativlib/node, /data/sc42/system/nodejslib/scLiveCollab/liveCollabServer.js, --port, 58120, --systemClientPort, 45408, --connectUrl, ws://localhost:58120/ws, --logPath, /var/log/sc42/liveCollab.log] and NODE_PATH=/data/sc42/system/nodejslib

En dehors du paramètre systemClientPort qui est dépendant de l’exécution de sc42, les autres paramètres sont spécifiés dans le fichier de configuration principal paramétré avant la compilation de la webapp sc42.war.

3. Versions de l’exécutable node

  • version native (0.8.0), disponible dans le répertoire /data/sc42/system/nativlib/.
  • version installée (15.10.0 LTS), disponible dans le répertoire /app/nodejs/bin/.

4. Serveur d’intrégration

  • chain-serveur en 4.2.1.06 utilise l’exécutable node natif (0.8.0) : le module collab fonctionne parfaitement. Aucune erreur lors du lancement.
  • chain-serveur en 4.2.1.07 doit utiliser l’exécutable node installé (15.10.0 LTS) pour lancer le module collab. L’exécutable node natif (0.8.0) soulève systématiquement une exception dans le log de sc42 (Fail to connect to the NodeJS server).

5. Serveur de production

  • chain-serveur en 4.2.1.06 utilise l’exécutable node natif (0.8.0) : le module collab fonctionne parfaitement. Aucune erreur lors du lancement.
  • chain-serveur en 4.2.1.07, que ce soit avec l’exécutable node natif ou installé, le module collab est systématiquement en erreur quand il est initié par sc42.
    Cependant, quand on lance le serveur collab manuellement, j’obtiens un comportement différent avec le node installé. Si j’utilise la valeur du paramètre systemClientPort tel qu’il apparait dans mon log sc42, alors le script liveCollabServer.js fonctionne :

info: socket.io started

Ne pas préciser ce paramètre ou prendre n’importe quelle valeur au hasard amène à un refus de connexion, donc à une exception.

6. Étude du script liveCollabServer.js

En étudiant le contenu du script, on trouve le test suivant :

if (!vParams.port || (!vParams.systemClientPort && (!vParams.systemServerPort))) {
		usage();
		process.exit(1);
}

Si les paramètres [ port OU (systemServerPort ET systemClientPort) ] ne sont pas définis, alors on lève une exception.

Mon analyse des dysfonctionnements que je subis semble être dans le traitement qui défini la valeur du paramètre systemClientPort, visiblement géré par la webapp chain-server.

Comment est déterminé ce systemClientPort ?
Qu’est-ce qui pourrait expliquer qu’en utilisant manuellement la valeur de ce paramètre, j’arrive à un résultat différent de la même commande qui est initiée par la webapp sc42 ?

Bonjour,
Je n’ai pas la réponse à votre question, mais je voulais vous apporter une précision :
Cette implémentation de « websocket » en exploitant nodeJs a été abandonnée dans le futur SCENARI5.0, au profit d’une implémentation native de webSocket apportée par Java 8.
Cdt
Antoine
Kelis

Bonjour,

Merci pour l’info.
J’ai réussi à me sortir de cette situation pour finaliser la migration vers Dokiel 4.4.
Je cumulais plusieurs incohérences qui indépendamment étaient sans effet visible, mais qui se sont révélées lors de cette montée de version.
La solution a été de tout reposer à plat et refaire une installation propre.

Les annonces de la v5 sont prévues pour l’été ?

Cordialement

Les annonces de la v5 sont prévues pour l’été ?

oui, lors des rencontres Scenari 2019 (@see Rencontres Scenari 2019)