Augmentation taille des sauvegardes depuis v4.4.7

Bonjour,
Suite à la mise à jour 4.4.7, la taille des sauvegardes a pris un bon coup de gras. Je suis passé de 210Mo à 257Mo :

Après rapide check, il se trouve que certains plugins (rflink, daikinRCCloud, zigbee2mqtt, mqtt2…) comportent maintenant le node_modules dans leur dossier « ressources » respectifs :

Cela entraine non seulement une augmentation de la taille de la sauvegarde, mais aussi un temps très rallongé de la création de l’archive de sauvegarde (car tous les devs qui ont touchés à nodejs savent que le node_modules comportent plusieurs dizaines de milliers de fichiers, très gourmands en ressources à archiver…).

Est-ce un comportement normal auquel il faudra s’habituer ? Une véritable régression ou bien effet de bord ?

Merci d’avance pour votre aide

1 « J'aime »

Ok j’aurais du lire le changelog plus attentivement, c’est écrit en noir sur blanc

Désole pour le topic inutile…

Au contraire, je ne pense pas que cette correction soit un détail !

je pensais hier que ça allait être à la marge, mais on est sur du quasi x2 pour rien.
Je suis passé de 170Mb de sauvegarde, ce qui est déjà de mon point de vue déjà conséquent à gérer, à presque 300Mb.
Avec une sauvegarde par jour et par update, j’ai réduit ma capacité de sauvegarde par 3.

En effet, je la critique aussi car ça ne doit pas être sauvegardé, je l’avais moi même mis dans le core comme exclusion à l’époque, c’est au plugin à vérifier que ses libs sont la et pas que le dossier node_modules. Outre le fait que ça augmente la taille de sauvegarde.

Le problème c’est que des modules npm ne sont pas fait pour être copiés à un replacement (dans le cas d’un restore) mais doivent être réinstallés (ce qui était le cas avant la modif de Loic)

2 « J'aime »

Bonjour,

La taille de mes sauvegardes est passées de 147Mo à 264Mo. C’est presque le double et je ne sais pas si c’est normal. Quelqu’un a-il une idée sur ce point ?
Merci d’avance de votre réponse

Bonjour, oui les messages au dessus du votre disent pourquoi et expliquent.

2 « J'aime »

Bonjour,
Nous sommes bien conscient de l’impact et du faite que cette solution est nul mais nous n’avons pas le choix pour corriger le soucis de base. Il y a une issue sur notre git pour revenir sur ce point et faire une vrai gestion.

1 « J'aime »

Quelle est cette issue, est-il possible d’avoir son id ? je ne la trouve pas :neutral_face:

Et je ne vois pas non plus de mention dans la correction d’origine qu’elle est inadaptée, avec le renvoi vers une correction adaptée.

Pour moi la solution actuelle est probablement pire que le mal.
Il aurait suffit de faire sauter le répertoire dans le backup. Quel est le but de sauvegarder internet dans un backup jeedom, ça pollue les sauvegardes de tous les clients.

J’ai personnellement modifié le code en local sur mon système, en l’état ce n’est pas gérable.

Bonjour
Le lien de l’issue est dans le changelog c’est en test depuis plusieurs semaine si vraiment ça vous allez pas fallait vous manifester avant. La vos remarque sont prises en compte.

Non, je parle de:

Il y a une issue sur notre git pour revenir sur ce point et faire une vrai gestion.

Et j’ai répondu je ne sais pas quoi te dire de plus tu vas sur le change log tu as la ligne du changement et si tu clics sur lien tu tombe sur l’issue. La à part le faire à ta place je vois pas comment plus t’aider.

Ca ?

J’ai déjà donné ce lien dans ce thread. Cette issue est cloturée, donc je ne vois pas ce que je peux suivre pour voir le retour à la normale.
Je ne vois pas de lien qui parle d’une issue ouverte qui va revenir sur la correction et l’améliorer dans le changelog, juste ce qui a été corrigé. C’est déjà pas mal, mais c’est pas ce que je cherche.

Pour l’autre je peux pas te dire ce n’est plus moi qui suis en charge de ca. Tout ce que je peux dire c’est que j’ai remonté le point en réunion les difficulté de gérer ca proprement ont été abordé mais j’en sais pas plus.

Voici comment je gère dans mes plugins :

public static function dependancy_info() {
		$return = [];
		$return['log'] = __CLASS__ . '_dep';
		$return['progress_file'] = jeedom::getTmpFolder('unifi') . '/dependance';
		$return['state'] = 'nok';
		
		// Check if NodeJS exists
		$nodeJSError=null;
		$out=null;
		exec('type node',$out,$nodeJSError);
		$nodeInstalled=($nodeJSError == 0);
		if(!$nodeInstalled) {		
			return $return;
		}
		
		// Get package.json
		$packageRequiredVers = file_get_contents(dirname(__FILE__) . '/../../resources/package.json');
		$packageRequiredVers = json_decode($packageRequiredVers,true);
		
		// Check if NodeJS version is greater or equal the required version
		$nodeVer=trim(shell_exec('node -v'),"v\n\r");
		if(!$nodeVer) {$nodeVer='';}
		preg_match('/(>=|<=|>|<|=)?(\d+(\.\d+){0,2})/', $packageRequiredVers['engines']['node'], $matches);
		$nodeOperator = $matches[1] ?: '==';
		$nodeVersion = $matches[2];
		
		$nodeVersionOK=version_compare($nodeVer,$nodeVersion,$nodeOperator);
		if(!$nodeVersionOK) {
			return $return;
		}
		
		// Check if NPM version is greater or equal the required version
		$npmVer=trim(shell_exec('npm -v'),"\n\r");
		if(!$npmVer) {$npmVer='';}
		preg_match('/(>=|<=|>|<|=)?(\d+(\.\d+){0,2})/', $packageRequiredVers['engines']['npm'], $matches);
		$npmOperator = $matches[1] ?: '==';
		$npmVersion = $matches[2];
		
		$npmVersionOK=version_compare($npmVer,$npmVersion,$npmOperator);
		if(!$npmVersionOK) {
			return $return;
		}
		
		// Check if jeedom connect class is present
		if(!file_exists(dirname(__FILE__) . '/../../resources/utils/jeedom.js')) {
			return $return;
		}
		
		// Check if all dependancies of hap-controller are installed and have the required version
		foreach($packageRequiredVers['dependencies'] as $dep => $requiredVersionSpec) {
		    $depPackageJson = file_get_contents(dirname(__FILE__) . '/../../resources/node_modules/' . $dep . '/package.json');
		    if (!$depPackageJson) {
		        return $return;
		    }
		
		    $depDetails = json_decode($depPackageJson, true);
		    $installedVersion = $depDetails['version'];
		
		    preg_match('/(>=|<=|>|<|=)?(\d+(\.\d+){0,2})/', $requiredVersionSpec, $matches);
		    $requiredOperator = $matches[1] ?: '==';
		    $requiredVersion = $matches[2];
		
		    if (!version_compare($installedVersion, $requiredVersion, $requiredOperator)) {
		        return $return;
		    }
		}

		$return['state'] = 'ok';
		return $return;
	}
2 « J'aime »

Bonsoir,

Je ne comprends comment le répertoire node_modules peut être créé suite à un restore de backup.
Il n’est pas contenu dans les tar.gz de la version4.4.6.
En faisant tar tzvf fichier_backup.tar.gz | grep node_modules il n’y a aucun résultat.
Idem en ouvrant le backup avec Winrar:
image

J’ai raté un truc ?

Ben il y est pourtant sinon je me serais pas embêté à faire cette modification

1 « J'aime »

Bonjour,
C’est autrement plus complet que ce que l’on trouve dans les plugins officiels qui nécessitent le backup de node_modules et l’explosion des tailles des sauvegardes.

Ex: zwaveJS: presque uniquement basé sur la présence du répertoire node_modules

Hello franchement je comprends rien du pourquoi du comment, :slight_smile:

Ce que je vois c’est que ma sauvegarde a fait presque x3 juste pour ce dossier qui se trouve dans le plugin officiel open-zwave que sauf erreur de ma part ce dernier n’utilise pas, il n’y était pas avant? un petit upgrade sur ce dernier pour enlever ça ? comme le fait @nebz peut etre ?

De plus est-ce que tout est ok vraiment en restauration l’extract sur Windows me dit ça (peut etre rien):


J’ai regardz ces fichiers ne sont pas des liens symbolic sur linux…

Bonjour,
Regarde la changelog c’est bien annoncé dedans et tout a fait prévu et normal

En effet, ca n’a pas vraiment de sens de sauvegarder node_modules, mais Loic a résolu le problème dans 4.4.8 donc les sauvegardes redeviendront à une taille « normale » quand elle sera sortie en stable.

4 « J'aime »