[Fedora-suds-list] Caching Enhancements

Matt C mcauthorn at gmail.com
Wed Jan 13 14:59:42 UTC 2010


Great news, thanks Jeff. I'll start testing this later in the week and will
report back.
-Matt

On Wed, Jan 13, 2010 at 9:20 AM, Jeff Ortel <jortel at redhat.com> wrote:

> All,
>
> I finished and (committed r637) enhancements to the suds caching.  The
> previous approach added caching to the Transport layer and was causing some
> problems.  It /blindly/ cached downloaded XML documents such as WSDLs and
> imported XSD files as XML text.  The next time the document is needed (at
> the same URL), the transport returned the local (cached) copy of the XML
> file and it was SAX parsed as if it was downloaded via http.  This actually
> saved a lot of time because most servers returned these documents very
> slowly is many cases.  The problems with this approach are:
>  - Corrupt, incomplete or otherwise invalid XML document text was being
>    cached because the Transport layer was not content aware.  It simply
> cached
>    whatever it downloaded.
>  - Invalid cache files caused SAX parsing exceptions until the cache file
>    expired or the user cleared the cache.
>  - Cached files had to be SAX parsed every time the were retrieved.
>
> The approach taken by the r637 enhancement puts caching above the Transport
> layer and at the Document Processing layer.  By doing this, suds is now
> caching sax.document.Document objects using python pickle.  This ensures
> that cached XML documents are valid and allows for proper handling of
> corrept, incomplete or otherwise invalid cached files.  In the event that a
> cached file fails to load, the document processing layer simply uses the
> transport to download a good copy which is then SAX parsed and cached.
>
> I benchmarked the performance difference between sax parsing and unpickling
> a 2M XML file using cPickle.  In most cases, I observed a ~2x performance
> gain using pickle.load() over sax parsing.  Yeah, I'm a little surprised
> too.  I expected about a ~10x gain but at least it's significantly better.
>
> I tried really hard to preserve backwards compatibility but some minor
> things did have to change.  These things should not affect most users:
>  - The caching classes (Cache, FileCache, NoCache) moved from the
> suds.transport package
>    to a suds.cache.py module.
>  - All caching has been removed from the Transport classes.
>  - The get() & put() methods on the Cache interface have changed slightly
> to be
>    document oriented instead of file pointer (fp) or file-like oriented.
>  - Users disabling the cache using /NoCache/ should switch to the already
>    existing:  Client(url, cache=None) syntax.  Or, import NoCache from the
> suds.cache.
>  - Users implementing their own caches need to adapt to the changes to the
>    Cache interface.
>
> I plan to continue toward caching the entire WSDL (wsdl.Definitions) object
> but this is a good interim step and solves most of the caching problems for
> now.
>
> This has been released in 0.3.9 beta which I believe to be very stable.
>
> Hope this helps.
>
> Regards,
>
> Jeff
>
>
> _______________________________________________
> suds mailing list
> suds at lists.fedoraproject.org
> https://admin.fedoraproject.org/mailman/listinfo/suds
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.fedoraproject.org/pipermail/suds/attachments/20100113/0a458f4a/attachment-0001.html 


More information about the suds mailing list