lockwiki changes
authorJoey Hess <joey@kodama.kitenet.net>
Tue, 11 Nov 2008 20:54:52 +0000 (15:54 -0500)
committerJoey Hess <joey@kodama.kitenet.net>
Tue, 11 Nov 2008 20:54:52 +0000 (15:54 -0500)
* Stop busy-waiting in lockwiki, as this could delay ikiwiki from waking up
  for up to one second. The bailout code is no longer needed.
* Remove support for unused optional wait parameter from lockwiki.

IkiWiki.pm
debian/changelog
doc/todo/avoid_thrashing.mdwn
po/ikiwiki.pot

index dc9b66344ae8529b24aec6b993e09f951f267b2b..d949566d834fb1cfcc053bd48ae91398f2571e80 100644 (file)
@@ -1280,8 +1280,7 @@ sub indexlink () { #{{{
 
 my $wikilock;
 
-sub lockwiki (;$) { #{{{
-       my $wait=@_ ? shift : 1;
+sub lockwiki () { #{{{
        # Take an exclusive lock on the wiki to prevent multiple concurrent
        # run issues. The lock will be dropped on program exit.
        if (! -d $config{wikistatedir}) {
@@ -1289,20 +1288,8 @@ sub lockwiki (;$) { #{{{
        }
        open($wikilock, '>', "$config{wikistatedir}/lockfile") ||
                error ("cannot write to $config{wikistatedir}/lockfile: $!");
-       if (! flock($wikilock, 2 | 4)) { # LOCK_EX | LOCK_NB
-               if ($wait) {
-                       debug("wiki seems to be locked, waiting for lock");
-                       my $wait=600; # arbitrary, but don't hang forever to 
-                                     # prevent process pileup
-                       for (1..$wait) {
-                               return if flock($wikilock, 2 | 4);
-                               sleep 1;
-                       }
-                       error("wiki is locked; waited $wait seconds without lock being freed (possible stuck process or stale lock?)");
-               }
-               else {
-                       return 0;
-               }
+       if (! flock($wikilock, 2)) { # LOCK_EX
+               error("failed to get lock");
        }
        return 1;
 } #}}}
index dfc5de2d44dbfe58ead483423bd4809c686456da..2088b07ecf5425dce84203ea857ec9f90c39af32 100644 (file)
@@ -14,6 +14,14 @@ ikiwiki (2.69) UNRELEASED; urgency=low
   * tag: Normalize tagbase so leading/trailing slashes in it don't break
     things.
   * bzr: Fix dates for recentchanges.
+  * Avoid multiple ikiwiki cgi processes piling up, eating all memory,
+    and thrashing, by making the cgi wrapper wait on a cgilock.
+    If you had to set apache's MaxClients low to avoid ikiwiki thrashing your
+    server, you can now turn it up to a high value.
+  * Stop busy-waiting in lockwiki, as this could delay ikiwiki from waking up
+    for up to one second. The bailout code is no longer needed after above
+    change.
+  * Remove support for unused optional wait parameter from lockwiki.
 
  -- Joey Hess <joeyh@debian.org>  Thu, 06 Nov 2008 16:01:00 -0500
 
index 6c895e7c9cb0b0b91a6a19daf2c6361eb43b476a..45b11d8721afe68ac23941acaf8042c54dfc734c 100644 (file)
@@ -18,3 +18,5 @@ with no ill effects. Crank `MaxClients` up to 256? No problem..
 And there's no real reason to allow more than one ikiwiki cgi to run at a
 time. Since almost all uses of the CGI lock the index, only one can really
 be doing anything at a time. --[[Joey]]
+
+[[done]]
index 34fa5e65b1584bee9f11e63624dadf7712edaa64..8cf3853e0b199df2c41b4cad0033eaae6a94e0a7 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-11-07 12:23-0500\n"
+"POT-Creation-Date: 2008-11-11 15:36-0500\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -910,19 +910,19 @@ msgstr ""
 
 #. translators: The first parameter is a filename, and the second is
 #. translators: a (probably not translated) error message.
-#: ../IkiWiki/Wrapper.pm:79
+#: ../IkiWiki/Wrapper.pm:93
 #, perl-format
 msgid "failed to write %s: %s"
 msgstr ""
 
 #. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:135
+#: ../IkiWiki/Wrapper.pm:150
 #, perl-format
 msgid "failed to compile %s"
 msgstr ""
 
 #. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:155
+#: ../IkiWiki/Wrapper.pm:170
 #, perl-format
 msgid "successfully generated %s"
 msgstr ""
@@ -969,7 +969,7 @@ msgstr ""
 msgid "preprocessing loop detected on %s at depth %i"
 msgstr ""
 
-#: ../IkiWiki.pm:1685
+#: ../IkiWiki.pm:1672
 msgid "yes"
 msgstr ""