diff options
| author | Victor Shyba <victor.shyba@gmail.com> | 2015-08-21 12:52:12 -0300 | 
|---|---|---|
| committer | Victor Shyba <victor.shyba@gmail.com> | 2015-08-26 17:20:22 -0300 | 
| commit | 23ea0193a521a1f5cb539a342be594b7b7acedcf (patch) | |
| tree | 9b13ff068df7601de6947a8f28808c9b7f67ee85 | |
| parent | de73fc6969433a69ec6ba12ec508c3c93b83fcc6 (diff) | |
[bug] reduce memory usage by consuming single doc
Preparing many docs is useful for batching only. As we are sendind one
by one I will leave prepare_one_doc method to do the encrypt as the docs
goes to upload.
Also fixes method name as kaliy suggested.
| -rw-r--r-- | client/src/leap/soledad/client/http_target/send.py | 25 | ||||
| -rw-r--r-- | client/src/leap/soledad/client/http_target/support.py | 4 | 
2 files changed, 13 insertions, 16 deletions
diff --git a/client/src/leap/soledad/client/http_target/send.py b/client/src/leap/soledad/client/http_target/send.py index fe3a753f..72c33c6c 100644 --- a/client/src/leap/soledad/client/http_target/send.py +++ b/client/src/leap/soledad/client/http_target/send.py @@ -37,20 +37,19 @@ class HTTPDocSender(object):              defer.returnValue([None, None])          # add remote replica metadata to the request -        metadata = RequestBody( +        body = RequestBody(              last_known_generation=last_known_generation,              last_known_trans_id=last_known_trans_id,              sync_id=sync_id,              ensure=self._ensure_callback is not None)          total = len(docs_by_generation) -        entries = yield self._entries_from_docs(metadata, docs_by_generation) -        while len(entries): +        for idx, entry in enumerate(docs_by_generation, 1): +            yield self._prepare_one_doc(entry, body, idx, total)              result = yield self._http_request(                  self._url,                  method='POST', -                body=entries.remove(1), +                body=body.pop(1),                  content_type='application/x-soledad-sync-put') -            idx = total - len(entries)              if self._defer_encryption:                  self._delete_sent(idx, docs_by_generation)              _emit_send_status(idx, total) @@ -65,15 +64,13 @@ class HTTPDocSender(object):              doc.doc_id, doc.rev)      @defer.inlineCallbacks -    def _entries_from_docs(self, initial_body, docs_by_generation): -        number_of_docs = len(docs_by_generation) -        for idx, (doc, gen, trans_id) in enumerate(docs_by_generation, 1): -            content = yield self._encrypt_doc(doc) -            initial_body.insert_info( -                id=doc.doc_id, rev=doc.rev, content=content, gen=gen, -                trans_id=trans_id, number_of_docs=number_of_docs, -                doc_idx=idx) -        defer.returnValue(initial_body) +    def _prepare_one_doc(self, entry, body, idx, total): +        doc, gen, trans_id = entry +        content = yield self._encrypt_doc(doc) +        body.insert_info( +            id=doc.doc_id, rev=doc.rev, content=content, gen=gen, +            trans_id=trans_id, number_of_docs=total, +            doc_idx=idx)      def _encrypt_doc(self, doc):          d = None diff --git a/client/src/leap/soledad/client/http_target/support.py b/client/src/leap/soledad/client/http_target/support.py index 5daabb61..44cd7089 100644 --- a/client/src/leap/soledad/client/http_target/support.py +++ b/client/src/leap/soledad/client/http_target/support.py @@ -167,12 +167,12 @@ class RequestBody(object):          self.entries.append(entry)          return len(entry) -    def remove(self, number=1): +    def pop(self, number=1):          """          Removes an amount of entries and returns it formatted and ready          to be sent. -        :param number: number of entries to remove and format +        :param number: number of entries to pop and format          :type number: int          :return: formatted body ready to be sent  | 
