)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"9483f0511d334e75356ec31eb03b25e682e02b68","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Since the move to using the requests library, v1 list operations keep the"},{"line_number":10,"context_line":"connection open to the glance server. This is normally closed by the garbage"},{"line_number":11,"context_line":"collector if it is not explicitly closed, however the paginate function used by"},{"line_number":12,"context_line":"the list method had a circular reference preventing it from ever being"},{"line_number":13,"context_line":"collected."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This is problematic, since it causes long running nova processes to run out of"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"ba7be1f8_0efc1d3e","line":12,"updated":"2015-02-20 11:44:52.000000000","message":"No ever, just lifetime of the process.","commit_id":"a0b3663e734d9deea52de2fb3486bc343026b5d8"}],"glanceclient/v1/images.py":[{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"dab855f389103cf8ee21d83d27cfb8507e06b0f2","unresolved":false,"context_lines":[{"line_number":212,"context_line":"            if (page_size and len(images) \u003d\u003d page_size and"},{"line_number":213,"context_line":"                    (absolute_limit is None or 0 \u003c seen \u003c absolute_limit)):"},{"line_number":214,"context_line":"                qp[\u0027marker\u0027] \u003d image.id"},{"line_number":215,"context_line":"                for image in paginate(qp, seen, return_request_id):"},{"line_number":216,"context_line":"                    yield image"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"        params \u003d {\u0027limit\u0027: kwargs.get(\u0027page_size\u0027, DEFAULT_PAGE_SIZE)}"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_bcd1b4cd","side":"PARENT","line":215,"updated":"2015-02-19 21:22:14.000000000","message":"I see that this is the recursive part, but I I\u0027m missing how this is causing a socket to not be garbage collected.","commit_id":"a3eaafefbdcec0231db33c44cca718526f9c96cc"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"9483f0511d334e75356ec31eb03b25e682e02b68","unresolved":false,"context_lines":[{"line_number":212,"context_line":"            if (page_size and len(images) \u003d\u003d page_size and"},{"line_number":213,"context_line":"                    (absolute_limit is None or 0 \u003c seen \u003c absolute_limit)):"},{"line_number":214,"context_line":"                qp[\u0027marker\u0027] \u003d image.id"},{"line_number":215,"context_line":"                for image in paginate(qp, seen, return_request_id):"},{"line_number":216,"context_line":"                    yield image"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"        params \u003d {\u0027limit\u0027: kwargs.get(\u0027page_size\u0027, DEFAULT_PAGE_SIZE)}"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba7be1f8_ae8871e8","side":"PARENT","line":215,"in_reply_to":"da86d52c_bcd1b4cd","updated":"2015-02-20 11:44:52.000000000","message":"It\u0027s not exactly the recursiveness that is causing the issue alone. The problem is circular reference to the ImageManager in the generator, which prevents the garbage collector recognizing when to collect. There is a bit of explanation for this in the comments of http://bugs.python.org/issue17468","commit_id":"a3eaafefbdcec0231db33c44cca718526f9c96cc"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"dab855f389103cf8ee21d83d27cfb8507e06b0f2","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        return utils.IterableWithLength(body, content_length)"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def _build_params(self, parameters):"},{"line_number":155,"context_line":"        dic \u003d {\u0027limit\u0027: parameters.get(\u0027page_size\u0027, DEFAULT_PAGE_SIZE)}"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        if \u0027marker\u0027 in parameters:"},{"line_number":158,"context_line":"            dic[\u0027marker\u0027] \u003d parameters[\u0027marker\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_bc0ff4de","line":155,"updated":"2015-02-19 21:22:14.000000000","message":"dic? Why not params?","commit_id":"a0b3663e734d9deea52de2fb3486bc343026b5d8"},{"author":{"_account_id":11356,"name":"Louis Taylor","email":"louis@kragniz.eu","username":"kragniz"},"change_message_id":"1eade4a9ab2716816ee0bc3dcb7397b2ee86f721","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        return utils.IterableWithLength(body, content_length)"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def _build_params(self, parameters):"},{"line_number":155,"context_line":"        dic \u003d {\u0027limit\u0027: parameters.get(\u0027page_size\u0027, DEFAULT_PAGE_SIZE)}"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        if \u0027marker\u0027 in parameters:"},{"line_number":158,"context_line":"            dic[\u0027marker\u0027] \u003d parameters[\u0027marker\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba7be1f8_1579812f","line":155,"in_reply_to":"da86d52c_bc0ff4de","updated":"2015-02-20 15:24:56.000000000","message":"Done","commit_id":"a0b3663e734d9deea52de2fb3486bc343026b5d8"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"2325e8540405d79fb8e79010086365615f4a37fd","unresolved":false,"context_lines":[{"line_number":248,"context_line":"        seen \u003d 0"},{"line_number":249,"context_line":"        more_images \u003d True"},{"line_number":250,"context_line":"        while more_images:"},{"line_number":251,"context_line":"            more_images \u003d False"},{"line_number":252,"context_line":"            images \u003d paginate(params, return_request_id)"},{"line_number":253,"context_line":"            i \u003d None"},{"line_number":254,"context_line":"            for i, image in enumerate(images):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba7be1f8_0ef17dcd","line":251,"updated":"2015-02-20 11:44:42.000000000","message":"Do we need to set more_images to False at the start of each loop?\n\nI think typically we\u0027ll iterate a few times, so would it make sense to leave this as True and just set it to False once (rather than toggling each loop)?","commit_id":"a0b3663e734d9deea52de2fb3486bc343026b5d8"},{"author":{"_account_id":11356,"name":"Louis Taylor","email":"louis@kragniz.eu","username":"kragniz"},"change_message_id":"1eade4a9ab2716816ee0bc3dcb7397b2ee86f721","unresolved":false,"context_lines":[{"line_number":248,"context_line":"        seen \u003d 0"},{"line_number":249,"context_line":"        more_images \u003d True"},{"line_number":250,"context_line":"        while more_images:"},{"line_number":251,"context_line":"            more_images \u003d False"},{"line_number":252,"context_line":"            images \u003d paginate(params, return_request_id)"},{"line_number":253,"context_line":"            i \u003d None"},{"line_number":254,"context_line":"            for i, image in enumerate(images):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba7be1f8_b7827dfe","line":251,"in_reply_to":"ba7be1f8_0ef17dcd","updated":"2015-02-20 15:24:56.000000000","message":"I was being paranoid about avoiding an infinite loop in case of some edge case. What are your reasons for preferring True by default? It might be better.","commit_id":"a0b3663e734d9deea52de2fb3486bc343026b5d8"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"2325e8540405d79fb8e79010086365615f4a37fd","unresolved":false,"context_lines":[{"line_number":250,"context_line":"        while more_images:"},{"line_number":251,"context_line":"            more_images \u003d False"},{"line_number":252,"context_line":"            images \u003d paginate(params, return_request_id)"},{"line_number":253,"context_line":"            i \u003d None"},{"line_number":254,"context_line":"            for i, image in enumerate(images):"},{"line_number":255,"context_line":"                last_image \u003d image.id"},{"line_number":256,"context_line":"                seen +\u003d 1"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba7be1f8_2e9c8169","line":253,"updated":"2015-02-20 11:44:42.000000000","message":"I hate commenting on styling stuff, but think I agree with Ian that getting rid of \u0027i\u0027 here would help the code scan more easily, eg with the \u0027page_size and i + 1 \u003d\u003d page_size\u0027  logic below.","commit_id":"a0b3663e734d9deea52de2fb3486bc343026b5d8"},{"author":{"_account_id":11356,"name":"Louis Taylor","email":"louis@kragniz.eu","username":"kragniz"},"change_message_id":"1eade4a9ab2716816ee0bc3dcb7397b2ee86f721","unresolved":false,"context_lines":[{"line_number":250,"context_line":"        while more_images:"},{"line_number":251,"context_line":"            more_images \u003d False"},{"line_number":252,"context_line":"            images \u003d paginate(params, return_request_id)"},{"line_number":253,"context_line":"            i \u003d None"},{"line_number":254,"context_line":"            for i, image in enumerate(images):"},{"line_number":255,"context_line":"                last_image \u003d image.id"},{"line_number":256,"context_line":"                seen +\u003d 1"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba7be1f8_159341a4","line":253,"in_reply_to":"ba7be1f8_2e9c8169","updated":"2015-02-20 15:24:56.000000000","message":"Done","commit_id":"a0b3663e734d9deea52de2fb3486bc343026b5d8"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"dab855f389103cf8ee21d83d27cfb8507e06b0f2","unresolved":false,"context_lines":[{"line_number":251,"context_line":"            more_images \u003d False"},{"line_number":252,"context_line":"            images \u003d paginate(params, return_request_id)"},{"line_number":253,"context_line":"            i \u003d None"},{"line_number":254,"context_line":"            for i, image in enumerate(images):"},{"line_number":255,"context_line":"                last_image \u003d image.id"},{"line_number":256,"context_line":"                seen +\u003d 1"},{"line_number":257,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_bc8374c9","line":254,"updated":"2015-02-19 21:22:14.000000000","message":"Using enumerate is clever. Probably too clever though. What if this was reworked to be:\n\n    last_seen \u003d seen\n    for image in paginate(params, return_request_id):\n        # ...\n\n    if last_seen \u003d\u003d seen:\n        break\n\n    if (page_size and seen % page_size \u003d\u003d 0 and\n            absolute_limit ....):\n        # ...\n\nIn this case i\u0027s use is a bit clearer. Technically if seen isn\u0027t a multiple of page_size, we probably haven\u0027t seen an entire page of data (which is testing the same thing as i). Alternatively, you could do (seen - last_seen + 1) if you wanted to test the number seen this time.","commit_id":"a0b3663e734d9deea52de2fb3486bc343026b5d8"},{"author":{"_account_id":11356,"name":"Louis Taylor","email":"louis@kragniz.eu","username":"kragniz"},"change_message_id":"1eade4a9ab2716816ee0bc3dcb7397b2ee86f721","unresolved":false,"context_lines":[{"line_number":251,"context_line":"            more_images \u003d False"},{"line_number":252,"context_line":"            images \u003d paginate(params, return_request_id)"},{"line_number":253,"context_line":"            i \u003d None"},{"line_number":254,"context_line":"            for i, image in enumerate(images):"},{"line_number":255,"context_line":"                last_image \u003d image.id"},{"line_number":256,"context_line":"                seen +\u003d 1"},{"line_number":257,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ba7be1f8_7582bd53","line":254,"in_reply_to":"da86d52c_bc8374c9","updated":"2015-02-20 15:24:56.000000000","message":"Good suggestion! I\u0027ve reworked it.","commit_id":"a0b3663e734d9deea52de2fb3486bc343026b5d8"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"dab855f389103cf8ee21d83d27cfb8507e06b0f2","unresolved":false,"context_lines":[{"line_number":255,"context_line":"                last_image \u003d image.id"},{"line_number":256,"context_line":"                seen +\u003d 1"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"                if (absolute_limit is not None) and (seen \u003e absolute_limit):"},{"line_number":259,"context_line":"                    # Note(kragniz) we\u0027ve seen more images than we\u0027re allowed"},{"line_number":260,"context_line":"                    break"},{"line_number":261,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_dce74810","line":258,"updated":"2015-02-19 21:22:14.000000000","message":"We just had a PS that removed a bunch of extra ()s. These are fine to me, but if we\u0027re going to be consistent, we may as well choose one or the other.","commit_id":"a0b3663e734d9deea52de2fb3486bc343026b5d8"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"9483f0511d334e75356ec31eb03b25e682e02b68","unresolved":false,"context_lines":[{"line_number":255,"context_line":"                last_image \u003d image.id"},{"line_number":256,"context_line":"                seen +\u003d 1"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"                if (absolute_limit is not None) and (seen \u003e absolute_limit):"},{"line_number":259,"context_line":"                    # Note(kragniz) we\u0027ve seen more images than we\u0027re allowed"},{"line_number":260,"context_line":"                    break"},{"line_number":261,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba7be1f8_0e77bd03","line":258,"in_reply_to":"da86d52c_dce74810","updated":"2015-02-20 11:44:52.000000000","message":"++","commit_id":"a0b3663e734d9deea52de2fb3486bc343026b5d8"},{"author":{"_account_id":11356,"name":"Louis Taylor","email":"louis@kragniz.eu","username":"kragniz"},"change_message_id":"1eade4a9ab2716816ee0bc3dcb7397b2ee86f721","unresolved":false,"context_lines":[{"line_number":255,"context_line":"                last_image \u003d image.id"},{"line_number":256,"context_line":"                seen +\u003d 1"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"                if (absolute_limit is not None) and (seen \u003e absolute_limit):"},{"line_number":259,"context_line":"                    # Note(kragniz) we\u0027ve seen more images than we\u0027re allowed"},{"line_number":260,"context_line":"                    break"},{"line_number":261,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba7be1f8_977e59e3","line":258,"in_reply_to":"da86d52c_dce74810","updated":"2015-02-20 15:24:56.000000000","message":"I personally wasn\u0027t a fan of removing parentheses marking groupings of expressions, and don\u0027t want them to be removed in that PS.","commit_id":"a0b3663e734d9deea52de2fb3486bc343026b5d8"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"9483f0511d334e75356ec31eb03b25e682e02b68","unresolved":false,"context_lines":[{"line_number":257,"context_line":""},{"line_number":258,"context_line":"                if (absolute_limit is not None) and (seen \u003e absolute_limit):"},{"line_number":259,"context_line":"                    # Note(kragniz) we\u0027ve seen more images than we\u0027re allowed"},{"line_number":260,"context_line":"                    break"},{"line_number":261,"context_line":"                else:"},{"line_number":262,"context_line":"                    yield image"},{"line_number":263,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ba7be1f8_2eee41ed","line":260,"updated":"2015-02-20 11:44:52.000000000","message":"How about raising StopIteration rather than just breaking out of the loop?","commit_id":"a0b3663e734d9deea52de2fb3486bc343026b5d8"},{"author":{"_account_id":11356,"name":"Louis Taylor","email":"louis@kragniz.eu","username":"kragniz"},"change_message_id":"1eade4a9ab2716816ee0bc3dcb7397b2ee86f721","unresolved":false,"context_lines":[{"line_number":257,"context_line":""},{"line_number":258,"context_line":"                if (absolute_limit is not None) and (seen \u003e absolute_limit):"},{"line_number":259,"context_line":"                    # Note(kragniz) we\u0027ve seen more images than we\u0027re allowed"},{"line_number":260,"context_line":"                    break"},{"line_number":261,"context_line":"                else:"},{"line_number":262,"context_line":"                    yield image"},{"line_number":263,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ba7be1f8_57eea1ed","line":260,"in_reply_to":"ba7be1f8_2eee41ed","updated":"2015-02-20 15:24:56.000000000","message":"I think return would be clearer.","commit_id":"a0b3663e734d9deea52de2fb3486bc343026b5d8"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"2325e8540405d79fb8e79010086365615f4a37fd","unresolved":false,"context_lines":[{"line_number":262,"context_line":"                    yield image"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"            if i is None:"},{"line_number":265,"context_line":"                # Note(kragniz) we didn\u0027t get any images in the last page"},{"line_number":266,"context_line":"                break"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"            if (page_size and i + 1 \u003d\u003d page_size and"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba7be1f8_0ec89d73","line":265,"updated":"2015-02-20 11:44:42.000000000","message":"if pedantic_mode is True:\n     print(\u0027\"Note(kragniz)\"-\u003e\"Note(kragniz):\"?\u0027)\n else:\n     pass","commit_id":"a0b3663e734d9deea52de2fb3486bc343026b5d8"},{"author":{"_account_id":11356,"name":"Louis Taylor","email":"louis@kragniz.eu","username":"kragniz"},"change_message_id":"1eade4a9ab2716816ee0bc3dcb7397b2ee86f721","unresolved":false,"context_lines":[{"line_number":262,"context_line":"                    yield image"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"            if i is None:"},{"line_number":265,"context_line":"                # Note(kragniz) we didn\u0027t get any images in the last page"},{"line_number":266,"context_line":"                break"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"            if (page_size and i + 1 \u003d\u003d page_size and"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba7be1f8_553139eb","line":265,"in_reply_to":"ba7be1f8_0ec89d73","updated":"2015-02-20 15:24:56.000000000","message":"Nit: that else block is redundant","commit_id":"a0b3663e734d9deea52de2fb3486bc343026b5d8"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"9483f0511d334e75356ec31eb03b25e682e02b68","unresolved":false,"context_lines":[{"line_number":263,"context_line":""},{"line_number":264,"context_line":"            if i is None:"},{"line_number":265,"context_line":"                # Note(kragniz) we didn\u0027t get any images in the last page"},{"line_number":266,"context_line":"                break"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"            if (page_size and i + 1 \u003d\u003d page_size and"},{"line_number":269,"context_line":"                    (absolute_limit is None or 0 \u003c seen \u003c absolute_limit)):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba7be1f8_eeca696d","line":266,"updated":"2015-02-20 11:44:52.000000000","message":"Ditto","commit_id":"a0b3663e734d9deea52de2fb3486bc343026b5d8"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"9483f0511d334e75356ec31eb03b25e682e02b68","unresolved":false,"context_lines":[{"line_number":265,"context_line":"                # Note(kragniz) we didn\u0027t get any images in the last page"},{"line_number":266,"context_line":"                break"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"            if (page_size and i + 1 \u003d\u003d page_size and"},{"line_number":269,"context_line":"                    (absolute_limit is None or 0 \u003c seen \u003c absolute_limit)):"},{"line_number":270,"context_line":"                # Note(kragniz) there\u0027s more images to come"},{"line_number":271,"context_line":"                params[\u0027marker\u0027] \u003d last_image"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba7be1f8_6e94b937","line":268,"updated":"2015-02-20 11:44:52.000000000","message":"We do filter the images based on owner in paginate, which might result less images returned than page_size and still have more images to go.","commit_id":"a0b3663e734d9deea52de2fb3486bc343026b5d8"},{"author":{"_account_id":11356,"name":"Louis Taylor","email":"louis@kragniz.eu","username":"kragniz"},"change_message_id":"1eade4a9ab2716816ee0bc3dcb7397b2ee86f721","unresolved":false,"context_lines":[{"line_number":265,"context_line":"                # Note(kragniz) we didn\u0027t get any images in the last page"},{"line_number":266,"context_line":"                break"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"            if (page_size and i + 1 \u003d\u003d page_size and"},{"line_number":269,"context_line":"                    (absolute_limit is None or 0 \u003c seen \u003c absolute_limit)):"},{"line_number":270,"context_line":"                # Note(kragniz) there\u0027s more images to come"},{"line_number":271,"context_line":"                params[\u0027marker\u0027] \u003d last_image"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba7be1f8_b5127560","line":268,"in_reply_to":"ba7be1f8_499b6fc9","updated":"2015-02-20 15:24:56.000000000","message":"Good catch. I\u0027ll write a test and address this in the next PS.","commit_id":"a0b3663e734d9deea52de2fb3486bc343026b5d8"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"98432e5b34fa5c7f6259140d2af4932293823d09","unresolved":false,"context_lines":[{"line_number":265,"context_line":"                # Note(kragniz) we didn\u0027t get any images in the last page"},{"line_number":266,"context_line":"                break"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"            if (page_size and i + 1 \u003d\u003d page_size and"},{"line_number":269,"context_line":"                    (absolute_limit is None or 0 \u003c seen \u003c absolute_limit)):"},{"line_number":270,"context_line":"                # Note(kragniz) there\u0027s more images to come"},{"line_number":271,"context_line":"                params[\u0027marker\u0027] \u003d last_image"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba7be1f8_499b6fc9","line":268,"in_reply_to":"ba7be1f8_6e94b937","updated":"2015-02-20 11:53:08.000000000","message":"If there\u0027s a corner case here it would be super to have a test for it.","commit_id":"a0b3663e734d9deea52de2fb3486bc343026b5d8"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"dab855f389103cf8ee21d83d27cfb8507e06b0f2","unresolved":false,"context_lines":[{"line_number":266,"context_line":"                break"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"            if (page_size and i + 1 \u003d\u003d page_size and"},{"line_number":269,"context_line":"                    (absolute_limit is None or 0 \u003c seen \u003c absolute_limit)):"},{"line_number":270,"context_line":"                # Note(kragniz) there\u0027s more images to come"},{"line_number":271,"context_line":"                params[\u0027marker\u0027] \u003d last_image"},{"line_number":272,"context_line":"                more_images \u003d True"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_dcce6882","line":269,"updated":"2015-02-19 21:22:14.000000000","message":"It also seems the parens around this line are somewhat extraneous. Would you be very bothered if we asked you to remove them?","commit_id":"a0b3663e734d9deea52de2fb3486bc343026b5d8"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"9483f0511d334e75356ec31eb03b25e682e02b68","unresolved":false,"context_lines":[{"line_number":266,"context_line":"                break"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"            if (page_size and i + 1 \u003d\u003d page_size and"},{"line_number":269,"context_line":"                    (absolute_limit is None or 0 \u003c seen \u003c absolute_limit)):"},{"line_number":270,"context_line":"                # Note(kragniz) there\u0027s more images to come"},{"line_number":271,"context_line":"                params[\u0027marker\u0027] \u003d last_image"},{"line_number":272,"context_line":"                more_images \u003d True"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba7be1f8_8e5acd81","line":269,"in_reply_to":"da86d52c_dcce6882","updated":"2015-02-20 11:44:52.000000000","message":"++","commit_id":"a0b3663e734d9deea52de2fb3486bc343026b5d8"},{"author":{"_account_id":11356,"name":"Louis Taylor","email":"louis@kragniz.eu","username":"kragniz"},"change_message_id":"1eade4a9ab2716816ee0bc3dcb7397b2ee86f721","unresolved":false,"context_lines":[{"line_number":266,"context_line":"                break"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"            if (page_size and i + 1 \u003d\u003d page_size and"},{"line_number":269,"context_line":"                    (absolute_limit is None or 0 \u003c seen \u003c absolute_limit)):"},{"line_number":270,"context_line":"                # Note(kragniz) there\u0027s more images to come"},{"line_number":271,"context_line":"                params[\u0027marker\u0027] \u003d last_image"},{"line_number":272,"context_line":"                more_images \u003d True"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba7be1f8_b56ef5c7","line":269,"in_reply_to":"da86d52c_dcce6882","updated":"2015-02-20 15:24:56.000000000","message":"Done","commit_id":"a0b3663e734d9deea52de2fb3486bc343026b5d8"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"2325e8540405d79fb8e79010086365615f4a37fd","unresolved":false,"context_lines":[{"line_number":267,"context_line":""},{"line_number":268,"context_line":"            if (page_size and i + 1 \u003d\u003d page_size and"},{"line_number":269,"context_line":"                    (absolute_limit is None or 0 \u003c seen \u003c absolute_limit)):"},{"line_number":270,"context_line":"                # Note(kragniz) there\u0027s more images to come"},{"line_number":271,"context_line":"                params[\u0027marker\u0027] \u003d last_image"},{"line_number":272,"context_line":"                more_images \u003d True"},{"line_number":273,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ba7be1f8_8ed1edcf","line":270,"updated":"2015-02-20 11:44:42.000000000","message":"\u0027there are\u0027","commit_id":"a0b3663e734d9deea52de2fb3486bc343026b5d8"},{"author":{"_account_id":11356,"name":"Louis Taylor","email":"louis@kragniz.eu","username":"kragniz"},"change_message_id":"1eade4a9ab2716816ee0bc3dcb7397b2ee86f721","unresolved":false,"context_lines":[{"line_number":267,"context_line":""},{"line_number":268,"context_line":"            if (page_size and i + 1 \u003d\u003d page_size and"},{"line_number":269,"context_line":"                    (absolute_limit is None or 0 \u003c seen \u003c absolute_limit)):"},{"line_number":270,"context_line":"                # Note(kragniz) there\u0027s more images to come"},{"line_number":271,"context_line":"                params[\u0027marker\u0027] \u003d last_image"},{"line_number":272,"context_line":"                more_images \u003d True"},{"line_number":273,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ba7be1f8_759b9dc9","line":270,"in_reply_to":"ba7be1f8_8ed1edcf","updated":"2015-02-20 15:24:56.000000000","message":"Done","commit_id":"a0b3663e734d9deea52de2fb3486bc343026b5d8"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"10a3010760711f210062e51b1df07f1b0c478e59","unresolved":false,"context_lines":[{"line_number":254,"context_line":"                    continue"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"                seen +\u003d 1"},{"line_number":257,"context_line":"                if (absolute_limit is not None) and (seen \u003e absolute_limit):"},{"line_number":258,"context_line":"                    # Note(kragniz): we\u0027ve seen more images than we\u0027re allowed"},{"line_number":259,"context_line":"                    return"},{"line_number":260,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_45c5af3b","line":257,"updated":"2015-03-02 18:01:03.000000000","message":"minor: do we need the brackets?\n if absolute_limit and seen \u003e absolute_limit:\n\nprior art:\n\nglanceclient/v2/shell.py:    if image and image.status \u003d\u003d \"deleted\":","commit_id":"b36bfb23ce7c27d36e14c50ee837d37c1d909e3a"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"5cfb17786bc00f92521d7d322b6fa6e95e18b00a","unresolved":false,"context_lines":[{"line_number":254,"context_line":"                    continue"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"                seen +\u003d 1"},{"line_number":257,"context_line":"                if (absolute_limit is not None) and (seen \u003e absolute_limit):"},{"line_number":258,"context_line":"                    # Note(kragniz): we\u0027ve seen more images than we\u0027re allowed"},{"line_number":259,"context_line":"                    return"},{"line_number":260,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_6c4613c2","line":257,"in_reply_to":"ba7be1f8_45c5af3b","updated":"2015-03-02 22:54:20.000000000","message":"FWIW, I prefer\n\n    absolute_limit is not None\n\nto the implicit form","commit_id":"b36bfb23ce7c27d36e14c50ee837d37c1d909e3a"},{"author":{"_account_id":11356,"name":"Louis Taylor","email":"louis@kragniz.eu","username":"kragniz"},"change_message_id":"f612b46b2a34b380a06052737006602932dd8b86","unresolved":false,"context_lines":[{"line_number":254,"context_line":"                    continue"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"                seen +\u003d 1"},{"line_number":257,"context_line":"                if (absolute_limit is not None) and (seen \u003e absolute_limit):"},{"line_number":258,"context_line":"                    # Note(kragniz): we\u0027ve seen more images than we\u0027re allowed"},{"line_number":259,"context_line":"                    return"},{"line_number":260,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_ec8263ff","line":257,"in_reply_to":"ba7be1f8_6c4613c2","updated":"2015-03-04 20:12:09.000000000","message":"Sort of done. Since it\u0027s now on two lines, I removed the parens.","commit_id":"b36bfb23ce7c27d36e14c50ee837d37c1d909e3a"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"10a3010760711f210062e51b1df07f1b0c478e59","unresolved":false,"context_lines":[{"line_number":255,"context_line":""},{"line_number":256,"context_line":"                seen +\u003d 1"},{"line_number":257,"context_line":"                if (absolute_limit is not None) and (seen \u003e absolute_limit):"},{"line_number":258,"context_line":"                    # Note(kragniz): we\u0027ve seen more images than we\u0027re allowed"},{"line_number":259,"context_line":"                    return"},{"line_number":260,"context_line":"                else:"},{"line_number":261,"context_line":"                    yield image"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_288972ca","line":258,"updated":"2015-03-02 18:01:03.000000000","message":"nit: \u0027we\u0027ve seen more images than we\u0027re allowed\u0027\n\nWe\u0027re incrementing \u0027seen\u0027 just before this comment, so it\u0027s not strictly true that \u0027more than the allowed (ie limit) images\u0027 have been seen (yielded).","commit_id":"b36bfb23ce7c27d36e14c50ee837d37c1d909e3a"},{"author":{"_account_id":11356,"name":"Louis Taylor","email":"louis@kragniz.eu","username":"kragniz"},"change_message_id":"f612b46b2a34b380a06052737006602932dd8b86","unresolved":false,"context_lines":[{"line_number":255,"context_line":""},{"line_number":256,"context_line":"                seen +\u003d 1"},{"line_number":257,"context_line":"                if (absolute_limit is not None) and (seen \u003e absolute_limit):"},{"line_number":258,"context_line":"                    # Note(kragniz): we\u0027ve seen more images than we\u0027re allowed"},{"line_number":259,"context_line":"                    return"},{"line_number":260,"context_line":"                else:"},{"line_number":261,"context_line":"                    yield image"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_4ce44f0d","line":258,"in_reply_to":"ba7be1f8_288972ca","updated":"2015-03-04 20:12:09.000000000","message":"Done","commit_id":"b36bfb23ce7c27d36e14c50ee837d37c1d909e3a"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"10a3010760711f210062e51b1df07f1b0c478e59","unresolved":false,"context_lines":[{"line_number":265,"context_line":"                return"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"            if (page_size and seen % page_size \u003d\u003d 0 and"},{"line_number":268,"context_line":"                    not filtered and"},{"line_number":269,"context_line":"                    (absolute_limit is None or 0 \u003c seen \u003c absolute_limit)):"},{"line_number":270,"context_line":"                # Note(kragniz): there are more images to come"},{"line_number":271,"context_line":"                params[\u0027marker\u0027] \u003d last_image"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_3ed608c4","line":268,"updated":"2015-03-02 18:01:03.000000000","message":"Is this filtered logic correct?\n\nFunctionally testing seems to show a problem, with this patch, as admin:\n\n $ ./tools/with_venv.sh glance image-list --owner e30399c2175c4a4ba5d1d76dbea6d15d | grep active |wc     \n     18     227    1962  \n\nwhereas the master branch shows:\n\n $ ./tools/with_venv.sh glance image-list --owner e30399c2175c4a4ba5d1d76dbea6d15d | grep active |wc  \n     55     708    6215\n\n\u002755\u0027 matches what the user itself sees with a plain \u0027glance image-list\u0027.","commit_id":"b36bfb23ce7c27d36e14c50ee837d37c1d909e3a"},{"author":{"_account_id":11356,"name":"Louis Taylor","email":"louis@kragniz.eu","username":"kragniz"},"change_message_id":"f612b46b2a34b380a06052737006602932dd8b86","unresolved":false,"context_lines":[{"line_number":265,"context_line":"                return"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"            if (page_size and seen % page_size \u003d\u003d 0 and"},{"line_number":268,"context_line":"                    not filtered and"},{"line_number":269,"context_line":"                    (absolute_limit is None or 0 \u003c seen \u003c absolute_limit)):"},{"line_number":270,"context_line":"                # Note(kragniz): there are more images to come"},{"line_number":271,"context_line":"                params[\u0027marker\u0027] \u003d last_image"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_0c9fb753","line":268,"in_reply_to":"ba7be1f8_3ed608c4","updated":"2015-03-04 20:12:09.000000000","message":"It was rather badly wrong! Hopefully the the latest patch works.","commit_id":"b36bfb23ce7c27d36e14c50ee837d37c1d909e3a"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"9971ec190eeb5e7cdfee53bb063dbd1239bc4787","unresolved":false,"context_lines":[{"line_number":268,"context_line":"                # Note(kragniz): we didn\u0027t get any images in the last page"},{"line_number":269,"context_line":"                return"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"            if absolute_limit is not None and seen \u003e\u003d absolute_limit:"},{"line_number":272,"context_line":"                # Note(kragniz): reached the limit of images to return"},{"line_number":273,"context_line":"                return"},{"line_number":274,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a80dd14_dec5335c","line":271,"updated":"2015-03-05 03:18:33.000000000","message":"Thank you for checking for None first. On Python 2, None compares to less than absolutely everything else.","commit_id":"f98ab688eff8fff4bdb5f650da3516715d62f232"},{"author":{"_account_id":11356,"name":"Louis Taylor","email":"louis@kragniz.eu","username":"kragniz"},"change_message_id":"bb62ee0715ccf76aeb611e1f94743389d83ce028","unresolved":false,"context_lines":[{"line_number":268,"context_line":"                # Note(kragniz): we didn\u0027t get any images in the last page"},{"line_number":269,"context_line":"                return"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"            if absolute_limit is not None and seen \u003e\u003d absolute_limit:"},{"line_number":272,"context_line":"                # Note(kragniz): reached the limit of images to return"},{"line_number":273,"context_line":"                return"},{"line_number":274,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a80dd14_0a912499","line":271,"in_reply_to":"9a80dd14_dec5335c","updated":"2015-03-05 16:30:55.000000000","message":"It also helpfully errors on py3","commit_id":"f98ab688eff8fff4bdb5f650da3516715d62f232"},{"author":{"_account_id":12807,"name":"Steve Lewis (stevelle)","email":"stevelle@gmail.com","username":"stevelle"},"change_message_id":"c0d0b4b6007005da37088f36a71324addbb8e943","unresolved":false,"context_lines":[{"line_number":278,"context_line":""},{"line_number":279,"context_line":"            # Note(kragniz): there are more images to come"},{"line_number":280,"context_line":"            params[\u0027marker\u0027] \u003d last_image"},{"line_number":281,"context_line":"            seen_last_page \u003d 0"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"    def delete(self, image, **kwargs):"},{"line_number":284,"context_line":"        \"\"\"Delete an image.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a80dd14_8cff2201","line":281,"updated":"2015-03-05 19:46:36.000000000","message":"unnecessary reset?","commit_id":"f98ab688eff8fff4bdb5f650da3516715d62f232"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"43ff64123c7a0076f77e920c68cce75993ff0993","unresolved":false,"context_lines":[{"line_number":278,"context_line":""},{"line_number":279,"context_line":"            # Note(kragniz): there are more images to come"},{"line_number":280,"context_line":"            params[\u0027marker\u0027] \u003d last_image"},{"line_number":281,"context_line":"            seen_last_page \u003d 0"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"    def delete(self, image, **kwargs):"},{"line_number":284,"context_line":"        \"\"\"Delete an image.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a80dd14_e5ff96a8","line":281,"in_reply_to":"9a80dd14_8cff2201","updated":"2015-03-05 20:56:33.000000000","message":"Nope. There\u0027s a total seen across all pages and a total for each page that needs to be reset each time we request a new page of data. This is fine.","commit_id":"f98ab688eff8fff4bdb5f650da3516715d62f232"}]}
