From ad89a4ce1ed6f0f17ebdd39baf6d4f9bdaba855c Mon Sep 17 00:00:00 2001
From: Fil <fil@rezo.net>
Date: Tue, 26 Apr 2005 07:59:20 +0000
Subject: [PATCH] =?UTF-8?q?gestion=20des=20erreurs=20mysql=20bizarres=20(m?=
 =?UTF-8?q?erci=20=C3=A0=20ouvaton=20pour=20les=20tests=20intensifs)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

ici en cas de timeout, au lieu de faire que chaque hit attende indéfiniment l'ereur SQL, on se base sur ecrire/data/mysql_out pour savoir tout de suite que ça ne marche pas. Ca soulage *beaucou* le serveur web, et ça donne en prime les pages du cache au visiteurs
---
 ecrire/inc_db_mysql.php3 | 18 +++++++++++++++++-
 ecrire/inc_version.php3  |  2 ++
 ecrire/install.php3      |  8 ++++----
 3 files changed, 23 insertions(+), 5 deletions(-)

diff --git a/ecrire/inc_db_mysql.php3 b/ecrire/inc_db_mysql.php3
index 0726d86d75..83d7028453 100644
--- a/ecrire/inc_db_mysql.php3
+++ b/ecrire/inc_db_mysql.php3
@@ -140,10 +140,26 @@ function traite_query($query) {
 function spip_connect_db($host, $port, $login, $pass, $db) {
 	global $spip_mysql_link, $spip_mysql_db;	// pour connexions multiples
 
+	// gerer le fichier ecrire/data/mysql_out
+	## TODO : ajouter md5(parametres de connexion)
+	if (@file_exists(_FILE_MYSQL_OUT)
+	AND (time() - @filemtime(_FILE_MYSQL_OUT) < 300)
+	AND !defined('_ECRIRE_INSTALL'))
+		return $GLOBALS['db_ok'] = false;
+
 	if ($port > 0) $host = "$host:$port";
 	$spip_mysql_link = @mysql_connect($host, $login, $pass);
 	$spip_mysql_db = $db;
-	return @mysql_select_db($db);
+	$ok = @mysql_select_db($db);
+
+	$GLOBALS['db_ok'] = $ok
+	AND !!@spip_num_rows(@spip_query_db('SELECT COUNT(*) FROM spip_meta'));
+
+	// En cas d'erreur marquer le fichier mysql_out
+	if (!$GLOBALS['db_ok']
+	AND !defined('_ECRIRE_INSTALL')) @touch(_FILE_MYSQL_OUT);
+
+	return $GLOBALS['db_ok'];
 }
 
 
diff --git a/ecrire/inc_version.php3 b/ecrire/inc_version.php3
index b86db08649..29ab7ce37c 100644
--- a/ecrire/inc_version.php3
+++ b/ecrire/inc_version.php3
@@ -577,6 +577,8 @@ function spip_query($query) {
 		return;
 
 	// Vieux format de fichier connexion
+	// Note: la version 0.1 est compatible avec la 0.2 (mais elle gere
+	// moins bien les erreurs timeout sur SQL), on ne force donc pas l'upgrade
 	if ($GLOBALS['spip_connect_version'] < 0.1) {
 		if (!_DIR_RESTREINT) {$GLOBALS['db_ok'] = false; return;}
 		@Header("Location: upgrade.php3?reinstall=oui");
diff --git a/ecrire/install.php3 b/ecrire/install.php3
index b1232108bd..c0b690449d 100644
--- a/ecrire/install.php3
+++ b/ecrire/install.php3
@@ -258,7 +258,7 @@ else if ($etape == 4) {
 
 	// Message pour spip_query : tout va bien !
 	$GLOBALS['db_ok'] = true;
-	$GLOBALS['spip_connect_version'] = 0.1; # cf. inc_version
+	$GLOBALS['spip_connect_version'] = 0.2; # cf. inc_version
 
 	// Test si SPIP deja installe
 	spip_query("SELECT COUNT(*) FROM spip_meta");
@@ -297,11 +297,11 @@ else if ($etape == 4) {
 		$conn = "<"."?php\n";
 		$conn .= "if (defined(\"_ECRIRE_INC_CONNECT\")) return;\n";
 		$conn .= "define(\"_ECRIRE_INC_CONNECT\", \"1\");\n";
-		$conn .= "\$GLOBALS['spip_connect_version'] = 0.1;\n";
+		$conn .= "\$GLOBALS['spip_connect_version'] = 0.2;\n";
 		$conn .= "include_ecrire('inc_db_mysql.php3');\n";
 		$conn .= $ligne_rappel;
-		$conn .= "@spip_connect_db('$adresse_db','','$login_db','$pass_db','$sel_db');\n";
-		$conn .= "\$GLOBALS['db_ok'] = !!@spip_num_rows(@spip_query_db('SELECT COUNT(*) FROM spip_meta'));\n";
+		$conn .= "spip_connect_db('$adresse_db','','$login_db','$pass_db','$sel_db');\n";
+#		$conn .= "\$GLOBALS['db_ok'] = !!@spip_num_rows(@spip_query_db('SELECT COUNT(*) FROM spip_meta'));\n";
 		$conn .= "?".">";
 		$myFile = fopen(_FILE_CONNECT_INS . _FILE_TMP . _EXTENSION_PHP, "wb");
 		fputs($myFile, $conn);
-- 
GitLab