[ mailman-Bugs-730769 ] template access hierarchy is broken

SourceForge.net noreply at sourceforge.net
Mon May 12 09:20:35 EDT 2003


Bugs item #730769, was opened at 2003-05-01 09:24
Message generated for change (Comment added) made by bwarsaw
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=100103&aid=730769&group_id=103

Category: Pipermail
Group: 2.1 (stable)
>Status: Closed
>Resolution: Accepted
Priority: 8
Submitted By: Richard Barrett (ppsys)
Assigned to: Nobody/Anonymous (nobody)
Summary: template access hierarchy is broken

Initial Comment:
The quick_maketext()function in HyperArch.py uses a 
caching scheme for templates extracted from one of the 
four possible sources of templates, i.e. general, site, 
domain and list specific templates.

The caching scheme is broken because the key to the 
cache only uses the name of the template file and the 
language. Thus once a a file for a given langauge has 
been cached, regardless of which of the sources it was 
obtained from, it is that template that is used by all lists, 
regardless of the existence of a template in a preferred 
source for that particular list.

The attached patch fixes this problem.

Apply the patch with the MM build directory as current 
working directory using the command:

patch -p1 < path-to-patch-file


----------------------------------------------------------------------

>Comment By: Barry A. Warsaw (bwarsaw)
Date: 2003-05-12 11:20

Message:
Logged In: YES 
user_id=12800

Accepted, with minor stylistic modifications.  Thanks!


----------------------------------------------------------------------

Comment By: Richard Barrett (ppsys)
Date: 2003-05-12 10:11

Message:
Logged In: YES 
user_id=75166

My first reaction to fixing the problem was as bwarsaw 
suggests, just add the list name to the cache key.

On consideration I decided the use of a two level cache is a 
justified and trivial complication.

The top level cache maps (filename, lang, listname) -> 
filepath, potentially a many -> one mapping.

The second level cache maps filepath -> filecontent, always a 
one -> one mapping.

A single level cache would map (filename, lang, listname) -> 
filecontent, always a one -> one mapping, which would lead 
to multiple copies of the same template file content data 
being held in memory when multiple lists use the same 
template; arguably the norm on Mailman installations. Take 
my case of 460 lists using the same default English language 
templates.

This waste of storage is trivially avoidable with the second 
cache dictionary.

I have updated the patch to tcache-2.1.2-0.3.patch, which 
introduces the change in function name from 
Utils.real_maketext to Utils.findtext and propagates that 
change as necessary. 

Footnotes:

The approach adopted is safe as HyperArch.quick_maketext
() always calls Utils.findtext() with dict=None so that 
Utils.findtext() does no characterisation of the template 
content; this being deferred until HyperArch.quick_maketext() 
acts on the cache content.

When multiple lists use the same template file, its contents 
will be re-acquired the first time each list first seeks to use it. 
This latter is a relatively minor inefficency which I thought 
preferable to more radical changes in the original 
Utils.maketext function to separate the path determination 
and file content acquisition aspects of its behaviour into 
different functions.


----------------------------------------------------------------------

Comment By: Barry A. Warsaw (bwarsaw)
Date: 2003-05-12 00:08

Message:
Logged In: YES 
user_id=12800

Do we need two caches?  Isn't the important point here that
the listname be included in the cache key?  If so, maybe we
just need one cache that maps (templatefile, lang, listname)
to the template text.  

If you agree, please rework the patch accordingly.  Also,
rename Utils.real_maketext() to Utils.findtext() and change
call sites accordingly. 


----------------------------------------------------------------------

Comment By: Richard Barrett (ppsys)
Date: 2003-05-01 11:09

Message:
Logged In: YES 
user_id=75166

After doing some furehtr (proper) testing I hope version 2 of 
the patch will solve the problem

----------------------------------------------------------------------

Comment By: Richard Barrett (ppsys)
Date: 2003-05-01 10:00

Message:
Logged In: YES 
user_id=75166

And do not forget to mailmanctl restart after applying the 
patch!

----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=100103&aid=730769&group_id=103



More information about the Mailman-coders mailing list