Skip to content
This repository was archived by the owner on Aug 13, 2026. It is now read-only.
This repository was archived by the owner on Aug 13, 2026. It is now read-only.

Stream keys on pbc issues, with early close of the stream [JIRA: CLIENTS-1051] #507

Open

Description

@Guibod

If you close a stream before it is finished, then it still try to drain an opened socket with incoming data.
Maybe you should close the resource instead of releasing it in such a case.

    def close(self):
        # We have to drain the socket to make sure that we don't get
        # weird responses when some other request comes after a
        # failed/prematurely-terminated one.
        try:
            while self.next():
                pass
        except StopIteration:
            pass
        self.resource.release()

Of course you cannot achieve that with the client wrapper that yields results through an iterator, and is not closeable.

Activity

  1. changed the title [-]Stream keys on pbc issues, with early close of the stream[/-] [+]Stream keys on pbc issues, with early close of the stream [JIRA: CLIENTS-1051][/+] on Nov 29, 2016
  2. Guibod commented on Nov 29, 2016

    @Guibod
    Author

    I also suggest that you update documentation. Because the stream_keys() wrapper cannot be manually closed as stated in documentation. The wrapper try/finally for us.

  3. Guibod commented on Nov 29, 2016

    @Guibod
    Author

    I've solved, by deleting my resource

       # obviously tthis is a method in a class with self.riak = client, and self.bucket, the bucket
        def stream(self, limit=10):
            i = 0
            resource = self.riak._acquire()
            transport = resource.object
            stream = transport.stream_keys(self.bucket, timeout=timeout)
            stream.attach(resource)
    
            try:
                for keylist in stream:
                    for key in keylist:
                        key = bytes_to_str(key)
                        i += 1
                        if limit and i > limit:
                            logger.debug('Stream limit reached (%d)' % limit)
                            raise StopIteration
                        yield self.bucket.get(key)
            finally:
                self.riak._choose_pool().delete_resource(stream.resource)
    
  4. self-assigned this
    on Nov 29, 2016
  5. lukebakken commented on Dec 6, 2016

    @lukebakken
    Contributor

    Hello ... I think I get what's going on, but it would be more helpful to have a complete example if possible. Can you provide one?

  6. modified the milestones: riak-python-client-2.7.0, on Dec 12, 2016
  7. modified the milestones: , riak-python-client-3.0.0 on Feb 22, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions