[Fedora-suds-list] Caching Enhancements

Bruce Edge bruce.edge at gmail.com
Wed Jan 13 15:59:36 UTC 2010


Would it be possible (or does this exist already?) to have an optional
parameter to bypassed the cache? This would help with development
environments where the server is changing rapidly.

I appreciate the work you have done on this project. It is clearly the first
choice of python SOAP client libraries now.

Thanks

-Bruce

On Wed, Jan 13, 2010 at 6: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/bc62e823/attachment.html 


More information about the suds mailing list