]> git.mjollnir.org Git - moodle.git/commitdiff
major upgrade logging speed improvement - write buffer implemented
authorskodak <skodak>
Thu, 17 Aug 2006 23:50:18 +0000 (23:50 +0000)
committerskodak <skodak>
Thu, 17 Aug 2006 23:50:18 +0000 (23:50 +0000)
lib/adminlib.php

index d44226d1dfb8013b2d3d238baf5dd2ba84f0c728..c3208bc4288b5771976a043a85b8e0ee57d2853a 100644 (file)
@@ -403,7 +403,10 @@ function print_progress($done, $total, $updatetime=5, $sleeptime=1, $donetext=''
 ////////////////////////////////////////////////
 
 $upgradeloghandle = false;
-global $upgradeloghandle;  // needed for access from callback funtion
+$upgradelogbuffer = '';
+// I did not find out how to use static variable in callback function,
+// the problem was that I could not flush the static buffer :-(
+global $upgradeloghandle, $upgradelogbuffer;
 
 /**
  * Check if upgrade is already running.
@@ -454,14 +457,19 @@ function upgrade_log_start() {
  * This function may be called repeatedly.
  */
 function upgrade_log_finish() {
-    global $upgradeloghandle;
+    global $upgradeloghandle, $upgradelogbuffer;
 
     if (empty($_SESSION['upgraderunning'])) {
         return; // logging already terminated
     }
 
     @ob_end_flush();
-    @fclose($upgradeloghandle);
+    if ($upgradelogbuffer !== '') {
+        @fwrite($upgradeloghandle, $upgradelogbuffer);
+    }
+    if ($upgradeloghandle and ($upgradeloghandle !== 'error')) {
+        @fclose($upgradeloghandle);
+    }
     @session_start();                // ignore header errors, we only need to reopen session
     $_SESSION['upgraderunning'] = 0; // clear upgrade indicator
     if (connection_aborted()) {
@@ -477,11 +485,15 @@ function upgrade_log_finish() {
  * This function must not output any characters or throw warnigns and errors!
  */
 function upgrade_log_callback($string) {
-    global $CFG, $upgradeloghandle;
+    global $CFG, $upgradeloghandle, $upgradelogbuffer;
 
     if (empty($CFG->disableupgradelogging) and ($string != '') and ($upgradeloghandle !== 'error')) {
         if ($upgradeloghandle or ($upgradeloghandle = @fopen($CFG->dataroot.'/upgradelogs/upg_'.date('Ymd-Hi').'.html', 'a'))) {
-            @fwrite($upgradeloghandle, $string);
+            $upgradelogbuffer .= $string;
+            if (strlen($upgradelogbuffer) > 2048) { // 2kB write buffer
+                @fwrite($upgradeloghandle, $upgradelogbuffer);
+                $upgradelogbuffer = '';
+            }
         } else {
             $upgradeloghandle = 'error';
         }