[
https://issues.apache.org/jira/browse/LIBCLOUD-254?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13492974#comment-13492974
]
Tomaz Muraus commented on LIBCLOUD-254:
---------------------------------------
I just reviewed the patch, it looks great. I plan to merge it in the next
couple of minutes. Thanks!
As far as the LazyList class goes - I would leave it there, but change it to
throw "deprecated error" when someone tries to instantiate it. The error
message should also contain a link to this ticket. This should make it a bit
more friendly and point them to the right direction so they know what to do if
they want to migrate their code to a new, better approach.
> Provide generator based iteration instead of LazyList
> -----------------------------------------------------
>
> Key: LIBCLOUD-254
> URL: https://issues.apache.org/jira/browse/LIBCLOUD-254
> Project: Libcloud
> Issue Type: Improvement
> Components: Core, Storage
> Reporter: Mahendra M
> Priority: Minor
> Attachments: libcloud-254.patch
>
>
> LazyList was implemented by issue (LIBCLOUD-78) for more efficient iteration
> over objects stored in a container (S3, CloudFiles etc. limit the maximum
> number of objects returned in a single call).
> LazyList solved this problem, but I think it might have the following issues
> while handling containers with large number of objects
> 1) It loads the entire list to memory
> 2) caller has to wait for the entire list to be loaded in memory before any
> operation can be done
> 3) The api invocation using get_more() and value_list is a bit complex
> (as-in, it can be simplified)
> By using python generators, the above problems can be alleviated. Results can
> be returned to the caller as and when it is returned from the server.
> The following changes were done to the libcloud apis
> 1) A new api called - iterate_container_objects() was introduced. The storage
> drivers need to implement this instead of list_container_objects(). This API
> now returns a generator. Usage of this API will alleviate the above three
> problems.
> 2) list_container_objects() will simply do -
> list(self.iterate_container_objects(container)) - this is maintained for
> backwards compatibility. It would be better if users can start using
> iterate_**() api instead.
> 3) The same changes have been made for the DNS base class also.
> 4) LazyList() can be removed from libcloud if it is OK with everyone.
> 5) The generator based interface can be used (WIP) for providing paginated
> access to objects - This will be useful for webpages/apps where the user has
> to paginate through the results. The same can be implemented by providing
> "start_key" and "count" parameters (similar to CouchDB) instead of generating
> the entire list and then doing an offset. This will be more
> performance/memory efficient than generating the entire list for every
> request.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira