]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Pull back for now on switch of PEAR error mode to exceptions; seems to trigger out...
authorBrion Vibber <brion@pobox.com>
Tue, 16 Mar 2010 23:23:19 +0000 (16:23 -0700)
committerBrion Vibber <brion@pobox.com>
Tue, 16 Mar 2010 23:32:25 +0000 (16:32 -0700)
For instance this was throwing an exception for DB_DataObject::staticGet when there's no match... definitely not what we want when all our code expects to get a nice null.
Example of this causing trouble: http://gitorious.org/statusnet/mainline/merge_requests/131

Revert "Don't attempt to retrieve the current user from the DB while processing a DB error"

This reverts commit 68347691b0c7fb3f81415abd7fcdc5aec85cc554.

Revert "Use PHP exceptions for PEAR error handling."

This reverts commit d8212977ce7f911d4f9bd6e55f94aea059a86782.

index.php
lib/common.php

index 65f251bcce6144db63bf3e6870fbda4d311da0fb..36ba3a0d2163915fa700ef0373b5ee65fa317c63 100644 (file)
--- a/index.php
+++ b/index.php
@@ -37,6 +37,8 @@ define('INSTALLDIR', dirname(__FILE__));
 define('STATUSNET', true);
 define('LACONICA', true); // compatibility
 
+require_once INSTALLDIR . '/lib/common.php';
+
 $user = null;
 $action = null;
 
@@ -66,69 +68,52 @@ function getPath($req)
  */
 function handleError($error)
 {
-    try {
-
-        if ($error->getCode() == DB_DATAOBJECT_ERROR_NODATA) {
-            return;
-        }
+    if ($error->getCode() == DB_DATAOBJECT_ERROR_NODATA) {
+        return;
+    }
 
-        $logmsg = "PEAR error: " . $error->getMessage();
-        if ($error instanceof PEAR_Exception && common_config('site', 'logdebug')) {
-            $logmsg .= " : ". $error->toText();
-        }
-        // DB queries often end up with a lot of newlines; merge to a single line
-        // for easier grepability...
-        $logmsg = str_replace("\n", " ", $logmsg);
-        common_log(LOG_ERR, $logmsg);
-
-        // @fixme backtrace output should be consistent with exception handling
-        if (common_config('site', 'logdebug')) {
-            $bt = $error->getTrace();
-            foreach ($bt as $n => $line) {
-                common_log(LOG_ERR, formatBacktraceLine($n, $line));
-            }
-        }
-        if ($error instanceof DB_DataObject_Error
-            || $error instanceof DB_Error
-            || ($error instanceof PEAR_Exception && $error->getCode() == -24)
-        ) {
-            //If we run into a DB error, assume we can't connect to the DB at all
-            //so set the current user to null, so we don't try to access the DB
-            //while rendering the error page.
-            global $_cur;
-            $_cur = null;
-
-            $msg = sprintf(
-                _(
-                    'The database for %s isn\'t responding correctly, '.
-                    'so the site won\'t work properly. '.
-                    'The site admins probably know about the problem, '.
-                    'but you can contact them at %s to make sure. '.
-                    'Otherwise, wait a few minutes and try again.'
-                ),
-                common_config('site', 'name'),
-                common_config('site', 'email')
-            );
-        } else {
-            $msg = _(
-                'An important error occured, probably related to email setup. '.
-                'Check logfiles for more info..'
-            );
+    $logmsg = "PEAR error: " . $error->getMessage();
+    if (common_config('site', 'logdebug')) {
+        $logmsg .= " : ". $error->getDebugInfo();
+    }
+    // DB queries often end up with a lot of newlines; merge to a single line
+    // for easier grepability...
+    $logmsg = str_replace("\n", " ", $logmsg);
+    common_log(LOG_ERR, $logmsg);
+
+    // @fixme backtrace output should be consistent with exception handling
+    if (common_config('site', 'logdebug')) {
+        $bt = $error->getBacktrace();
+        foreach ($bt as $n => $line) {
+            common_log(LOG_ERR, formatBacktraceLine($n, $line));
         }
-
-        $dac = new DBErrorAction($msg, 500);
-        $dac->showPage();
-
-    } catch (Exception $e) {
-        echo _('An error occurred.');
     }
+    if ($error instanceof DB_DataObject_Error
+        || $error instanceof DB_Error
+    ) {
+        $msg = sprintf(
+            _(
+                'The database for %s isn\'t responding correctly, '.
+                'so the site won\'t work properly. '.
+                'The site admins probably know about the problem, '.
+                'but you can contact them at %s to make sure. '.
+                'Otherwise, wait a few minutes and try again.'
+            ),
+            common_config('site', 'name'),
+            common_config('site', 'email')
+        );
+    } else {
+        $msg = _(
+            'An important error occured, probably related to email setup. '.
+            'Check logfiles for more info..'
+        );
+    }
+
+    $dac = new DBErrorAction($msg, 500);
+    $dac->showPage();
     exit(-1);
 }
 
-set_exception_handler('handleError');
-
-require_once INSTALLDIR . '/lib/common.php';
-
 /**
  * Format a backtrace line for debug output roughly like debug_print_backtrace() does.
  * Exceptions already have this built in, but PEAR error objects just give us the array.
@@ -253,6 +238,10 @@ function main()
         return;
     }
 
+    // For database errors
+
+    PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'handleError');
+
     // Make sure RW database is setup
 
     setupRW();
index 047dc5a7bc3a3a2f9944961f663744f3efa2f740..5d53270e30b85ac97682d1e0a5438ca43891ecf9 100644 (file)
@@ -71,7 +71,6 @@ if (!function_exists('dl')) {
 # global configuration object
 
 require_once('PEAR.php');
-require_once('PEAR/Exception.php');
 require_once('DB/DataObject.php');
 require_once('DB/DataObject/Cast.php'); # for dates
 
@@ -129,17 +128,6 @@ require_once INSTALLDIR.'/lib/activity.php';
 require_once INSTALLDIR.'/lib/clientexception.php';
 require_once INSTALLDIR.'/lib/serverexception.php';
 
-
-//set PEAR error handling to use regular PHP exceptions
-function PEAR_ErrorToPEAR_Exception($err)
-{
-    if ($err->getCode()) {
-        throw new PEAR_Exception($err->getMessage(), $err->getCode());
-    }
-    throw new PEAR_Exception($err->getMessage());
-}
-PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'PEAR_ErrorToPEAR_Exception');
-
 try {
     StatusNet::init(@$server, @$path, @$conffile);
 } catch (NoConfigException $e) {