From: Reini U. <ru...@us...> - 2004-06-29 08:52:39
|
Update of /cvsroot/phpwiki/phpwiki/lib In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27639 Modified Files: ArchiveCleaner.php IniConfig.php WikiDB.php stdlib.php Log Message: Use ...version() $need_content argument in WikiDB also: To reduce the memory footprint for larger sets of pagelists, we don't cache the content (only true or false) and we purge the pagedata (_cached_html) also. _cached_html is only cached for the current pagename. => Vastly improved page existance check, ACL check, ... Now only PagedList info=content or size needs the whole content, esp. if sortable. Index: ArchiveCleaner.php =================================================================== RCS file: /cvsroot/phpwiki/phpwiki/lib/ArchiveCleaner.php,v retrieving revision 1.3 retrieving revision 1.4 diff -u -2 -b -p -d -r1.3 -r1.4 --- ArchiveCleaner.php 29 Apr 2004 20:41:03 -0000 1.3 +++ ArchiveCleaner.php 29 Jun 2004 08:52:22 -0000 1.4 @@ -34,9 +34,9 @@ class ArchiveCleaner $authors_seen = array(); - $current = $page->getCurrentRevision(); + $current = $page->getCurrentRevision(false); - for ( $revision = $page->getRevisionBefore($current); + for ( $revision = $page->getRevisionBefore($current,false); $revision->getVersion() > 0; - $revision = $page->getRevisionBefore($revision) ) { + $revision = $page->getRevisionBefore($revision,false) ) { if ($revision->get('is_minor_edit')) Index: IniConfig.php =================================================================== RCS file: /cvsroot/phpwiki/phpwiki/lib/IniConfig.php,v retrieving revision 1.43 retrieving revision 1.44 diff -u -2 -b -p -d -r1.43 -r1.44 --- IniConfig.php 29 Jun 2004 06:48:02 -0000 1.43 +++ IniConfig.php 29 Jun 2004 08:52:22 -0000 1.44 @@ -301,4 +301,5 @@ function IniConfig($file) { // Another "too-tricky" redefine global $KeywordLinkRegexp; + if (!isset($rs['KEYWORDS'])) $rs['KEYWORDS'] = @$rsdef['KEYWORDS']; if (!isset($rs['KEYWORDS'])) $rs['KEYWORDS'] = "Category:Topic"; $keywords = preg_split('/\s*:\s*/', $rs['KEYWORDS']); @@ -611,4 +612,14 @@ function fix_configs() { // $Log$ +// Revision 1.44 2004/06/29 08:52:22 rurban +// Use ...version() $need_content argument in WikiDB also: +// To reduce the memory footprint for larger sets of pagelists, +// we don't cache the content (only true or false) and +// we purge the pagedata (_cached_html) also. +// _cached_html is only cached for the current pagename. +// => Vastly improved page existance check, ACL check, ... +// +// Now only PagedList info=content or size needs the whole content, esp. if sortable. +// // Revision 1.43 2004/06/29 06:48:02 rurban // Improve LDAP auth and GROUP_LDAP membership: Index: WikiDB.php =================================================================== RCS file: /cvsroot/phpwiki/phpwiki/lib/WikiDB.php,v retrieving revision 1.72 retrieving revision 1.73 diff -u -2 -b -p -d -r1.72 -r1.73 --- WikiDB.php 25 Jun 2004 14:15:08 -0000 1.72 +++ WikiDB.php 29 Jun 2004 08:52:22 -0000 1.73 @@ -208,6 +208,5 @@ class WikiDB { function isWikiPage ($pagename) { $page = $this->getPage($pagename); - $current = $page->getCurrentRevision(); - return ! $current->hasDefaultContents(); + return $page->exists(); } @@ -409,5 +408,5 @@ class WikiDB { $page->save($current->getPackedContent(), $version + 1, $meta); } - } elseif (!$oldpage->getCurrentRevision() and !$newpage->exists()) { + } elseif (!$oldpage->getCurrentRevision(false) and !$newpage->exists()) { // if a version 0 exists try it also. $result = $this->_backend->rename_page($from, $to); @@ -583,7 +582,13 @@ class WikiDB_Page } + // To reduce the memory footprint for larger sets of pagelists, + // we don't cache the content (only true or false) and + // we purge the pagedata (_cached_html) also function exists() { - $current = $this->getCurrentRevision(); - return ! $current->hasDefaultContents(); + $current = $this->getCurrentRevision(false); + unset($current->_wikidb->_cache->_pagedata_cache[$this->_pagename]); + $exists = ! $current->hasDefaultContents(); + unset($current->_data->{'%pagedata'}); + return $exists; } @@ -922,5 +927,5 @@ class WikiDB_Page * @return WikiDB_PageRevision The current WikiDB_PageRevision object. */ - function getCurrentRevision() { + function getCurrentRevision($need_content = true) { $backend = &$this->_wikidb->_backend; $cache = &$this->_wikidb->_cache; @@ -934,5 +939,6 @@ class WikiDB_Page //$backend->lock(); $version = $cache->get_latest_version($pagename); - $revision = $this->getRevision($version); + // getRevision gets the content also! + $revision = $this->getRevision($version, $need_content); //$backend->unlock(); assert($revision); @@ -951,5 +957,5 @@ class WikiDB_Page * Note that version zero of any page always exists. */ - function getRevision($version) { + function getRevision($version, $need_content=true) { $cache = &$this->_wikidb->_cache; $pagename = &$this->_pagename; @@ -959,5 +965,5 @@ class WikiDB_Page assert($version > 0); - $vdata = $cache->get_versiondata($pagename, $version); + $vdata = $cache->get_versiondata($pagename, $version, $need_content); if (!$vdata) return false; @@ -982,5 +988,5 @@ class WikiDB_Page * the default revision) will always be found. */ - function getRevisionBefore($version) { + function getRevisionBefore($version, $need_content=true) { $backend = &$this->_wikidb->_backend; $pagename = &$this->_pagename; @@ -992,5 +998,5 @@ class WikiDB_Page //$backend->lock(); $previous = $backend->get_previous_version($pagename, $version); - $revision = $this->getRevision($previous); + $revision = $this->getRevision($previous, $need_content); //$backend->unlock(); assert($revision); @@ -1176,5 +1182,5 @@ class WikiDB_Page function isUserPage ($include_empty = true) { if ($include_empty) { - $current = $this->getCurrentRevision(); + $current = $this->getCurrentRevision(false); if ($current->hasDefaultContents()) { return false; @@ -1209,5 +1215,5 @@ class WikiDB_Page // The authenticated author of the current revision. function getAuthor() { - if ($current = $this->getCurrentRevision()) return $current->get('author_id'); + if ($current = $this->getCurrentRevision(false)) return $current->get('author_id'); else return ''; } @@ -1310,5 +1316,5 @@ class WikiDB_PageRevision if (!isset($this->_iscurrent)) { $page = $this->getPage(); - $current = $page->getCurrentRevision(); + $current = $page->getCurrentRevision(false); $this->_iscurrent = $this->getVersion() == $current->getVersion(); } @@ -1808,5 +1814,5 @@ class WikiDB_cache // there is a bug here somewhere which results in an assertion failure at line 105 // of ArchiveCleaner.php It goes away if we use the next line. - $need_content = true; + //$need_content = true; $nc = $need_content ? '1':'0'; $cache = &$this->_versiondata_cache; @@ -1817,5 +1823,5 @@ class WikiDB_cache // If we have retrieved all data, we may as well set the cache for $need_content = false if ($need_content){ - $cache[$pagename][$version]['0'] = $cache[$pagename][$version]['1']; + $cache[$pagename][$version]['0'] =& $cache[$pagename][$version]['1']; } } @@ -1825,6 +1831,17 @@ class WikiDB_cache } // FIXME: ugly - if ($vdata && !empty($vdata['%pagedata'])) + if ($vdata && !empty($vdata['%pagedata'])) { $this->_pagedata_cache[$pagename] = $vdata['%pagedata']; + // only store _cached_html for the requested page + if (defined('USECACHE') and USECACHE + and isset($vdata['%pagedata']['_cached_html']) + and $pagename != $GLOBALS['request']->getArg('pagename')) + { + unset($this->_pagedata_cache[$pagename]['_cached_html']); + unset($cache[$pagename][$version][$nc]['%pagedata']['_cached_html']); + if ($need_content) + unset($cache[$pagename][$version][0]['%pagedata']['_cached_html']); + } + } return $vdata; } @@ -1875,4 +1892,14 @@ class WikiDB_cache // $Log$ +// Revision 1.73 2004/06/29 08:52:22 rurban +// Use ...version() $need_content argument in WikiDB also: +// To reduce the memory footprint for larger sets of pagelists, +// we don't cache the content (only true or false) and +// we purge the pagedata (_cached_html) also. +// _cached_html is only cached for the current pagename. +// => Vastly improved page existance check, ACL check, ... +// +// Now only PagedList info=content or size needs the whole content, esp. if sortable. +// // Revision 1.72 2004/06/25 14:15:08 rurban // reduce memory footprint by caching only requested pagedate content (improving most page iterators) Index: stdlib.php =================================================================== RCS file: /cvsroot/phpwiki/phpwiki/lib/stdlib.php,v retrieving revision 1.194 retrieving revision 1.195 diff -u -2 -b -p -d -r1.194 -r1.195 --- stdlib.php 29 Jun 2004 06:48:04 -0000 1.194 +++ stdlib.php 29 Jun 2004 08:52:22 -0000 1.195 @@ -668,5 +668,6 @@ function ConvertOldMarkup ($text, $marku $bang_esc[] = "(?:" . ALLOWED_PROTOCOLS . "):[^\s<>\[\]\"'()]*[^\s<>\[\]\"'(),.?]"; $map = getInterwikiMap(); - $bang_esc[] = $map->getRegexp() . ":[^\\s.,;?()]+"; // FIXME: is this really needed? + if ($map_regex = $map->getRegexp()) + $bang_esc[] = $map_regex . ":[^\\s.,;?()]+"; // FIXME: is this really needed? $bang_esc[] = $WikiNameRegexp; $orig[] = '/!((?:' . join(')|(', $bang_esc) . '))/'; @@ -1616,4 +1617,14 @@ function url_get_contents( $uri ) { // $Log$ +// Revision 1.195 2004/06/29 08:52:22 rurban +// Use ...version() $need_content argument in WikiDB also: +// To reduce the memory footprint for larger sets of pagelists, +// we don't cache the content (only true or false) and +// we purge the pagedata (_cached_html) also. +// _cached_html is only cached for the current pagename. +// => Vastly improved page existance check, ACL check, ... +// +// Now only PagedList info=content or size needs the whole content, esp. if sortable. +// // Revision 1.194 2004/06/29 06:48:04 rurban // Improve LDAP auth and GROUP_LDAP membership: |