)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"942551b7fcb477d608bfc317351d223fb38e5461","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Scrubber refactor"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"glance-scrubber is a pending-delete image clean"},{"line_number":10,"context_line":"tool for admin, so just like glance-manage, actually"},{"line_number":11,"context_line":"there is no need for authentication at all."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This patch removed the related registry logic"},{"line_number":14,"context_line":"and let glance-scrubber visit db directly."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"bp: scrubber-refactor"},{"line_number":17,"context_line":"Change-Id: I26f570b85617200880543b7114730a1ac76d3fb1"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"7f96bb07_34d79dc2","line":14,"range":{"start_line":9,"start_character":0,"end_line":14,"end_character":42},"updated":"2018-01-11 01:58:19.000000000","message":"Let\u0027s make this commit message a bit more precise (I\u0027m worried that people will mistake \"no authentication\" to mean \"no credentials\", and that\u0027s not what\u0027s happening here ... plus, if you use the swift backend, the scrubber has to authenticate via keystone anyway).  So I suggest this:\n\nThe glance-scrubber utility is used by administrators for the offline deletion of images when the Glance option delayed_delete is enabled.  The refactoring in this patch eliminates a dependency on the Glance Registry v1 client.  Further, after this change, the glance-scrubber does not use the deprecated Glance Registry at all.  Instead, like the glance-manage tool, it now visits the Glance database directly.","commit_id":"536d0cdd97ad48c1c2e925fe3c141e714137b409"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"fa138055f0c56e05584b4e4268f4f33f6eec6ecb","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Scrubber refactor"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"glance-scrubber is a pending-delete image clean"},{"line_number":10,"context_line":"tool for admin, so just like glance-manage, actually"},{"line_number":11,"context_line":"there is no need for authentication at all."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This patch removed the related registry logic"},{"line_number":14,"context_line":"and let glance-scrubber visit db directly."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"bp: scrubber-refactor"},{"line_number":17,"context_line":"Change-Id: I26f570b85617200880543b7114730a1ac76d3fb1"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"7f96bb07_ef463e50","line":14,"range":{"start_line":9,"start_character":0,"end_line":14,"end_character":42},"in_reply_to":"7f96bb07_34d79dc2","updated":"2018-01-11 02:07:15.000000000","message":"Done","commit_id":"536d0cdd97ad48c1c2e925fe3c141e714137b409"}],"glance/scrubber.py":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"5fba4df9d5543bb0e97a97ec9dfb6ccabebd11a0","unresolved":false,"context_lines":[{"line_number":245,"context_line":"            return db_api.get_api().image_get_all(self.admin_context,"},{"line_number":246,"context_line":"                                                  filters\u003dfilters,"},{"line_number":247,"context_line":"                                                  marker\u003dmarker)"},{"line_number":248,"context_line":"        else:"},{"line_number":249,"context_line":"            return db_api.get_api().image_get_all(self.admin_context,"},{"line_number":250,"context_line":"                                                  filters\u003dfilters)"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"    def _get_all_images(self):"},{"line_number":253,"context_line":"        \"\"\"Generator to fetch all appropriate images, paging as needed.\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"3f4b6375_0de179ff","line":250,"range":{"start_line":248,"start_character":8,"end_line":250,"end_character":66},"updated":"2017-10-18 07:53:57.000000000","message":"I guess as we are refactoring we can get rid of this if and else as marker has default set to None is image_get_all we can simply have like..\n\nreturn db_api.get_api().image_get_all(self.admin_context,                                            \n                                      filters\u003dfilters,\n                                      marker\u003dmarker)","commit_id":"f90e6b89407a89bcf7a2406d8797d68a981f7f26"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"d6cb923aa0763612fa64b33f0c65f4b7ad50ada9","unresolved":false,"context_lines":[{"line_number":245,"context_line":"            return db_api.get_api().image_get_all(self.admin_context,"},{"line_number":246,"context_line":"                                                  filters\u003dfilters,"},{"line_number":247,"context_line":"                                                  marker\u003dmarker)"},{"line_number":248,"context_line":"        else:"},{"line_number":249,"context_line":"            return db_api.get_api().image_get_all(self.admin_context,"},{"line_number":250,"context_line":"                                                  filters\u003dfilters)"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"    def _get_all_images(self):"},{"line_number":253,"context_line":"        \"\"\"Generator to fetch all appropriate images, paging as needed.\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"3f4b6375_1871b5e1","line":250,"range":{"start_line":248,"start_character":8,"end_line":250,"end_character":66},"in_reply_to":"3f4b6375_0de179ff","updated":"2017-10-18 08:55:10.000000000","message":"Done","commit_id":"f90e6b89407a89bcf7a2406d8797d68a981f7f26"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"c3a0593985785f641803da1e15940f301583428d","unresolved":false,"context_lines":[{"line_number":243,"context_line":""},{"line_number":244,"context_line":"        return db_api.get_api().image_get_all(self.admin_context,"},{"line_number":245,"context_line":"                                              filters\u003dfilters,"},{"line_number":246,"context_line":"                                              marker\u003dmarker)"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    def _get_all_images(self):"},{"line_number":249,"context_line":"        \"\"\"Generator to fetch all appropriate images, paging as needed.\"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"3f4b6375_c31914d7","line":246,"updated":"2017-10-26 15:10:38.000000000","message":"This looks like breaking stuff, iirc this will not set limit on the db call resulting in full table scan. API/reg set a default limit but db doesn\u0027t.\n\nThoughts? (if you go ahead with limit here, you might want to document that so that it\u0027s know how much pagination to expect. please add a unit test too.)","commit_id":"061c445577bfdb4cd2024e213450ba4ebad21343"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"15e793b9093ab643cd44efcdc62885d1a8bf588a","unresolved":false,"context_lines":[{"line_number":243,"context_line":""},{"line_number":244,"context_line":"        return db_api.get_api().image_get_all(self.admin_context,"},{"line_number":245,"context_line":"                                              filters\u003dfilters,"},{"line_number":246,"context_line":"                                              marker\u003dmarker)"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    def _get_all_images(self):"},{"line_number":249,"context_line":"        \"\"\"Generator to fetch all appropriate images, paging as needed.\"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"3f4b6375_d579b8c4","line":246,"in_reply_to":"3f4b6375_c31914d7","updated":"2017-10-27 04:45:16.000000000","message":"Yeah. The default limit is 25. I\u0027ll add it back. Thanks. Nikhil","commit_id":"061c445577bfdb4cd2024e213450ba4ebad21343"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"a16469295f7b9ec3d1251493bfca5ba815798d73","unresolved":false,"context_lines":[{"line_number":122,"context_line":"    * None"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"\"\"\")),"},{"line_number":125,"context_line":"    cfg.BoolOpt(\u0027send_identity_headers\u0027,"},{"line_number":126,"context_line":"                default\u003dFalse,"},{"line_number":127,"context_line":"                help\u003d_(\"\"\""},{"line_number":128,"context_line":"Send headers received from identity when making requests to"}],"source_content_type":"text/x-python","patch_set":11,"id":"ff82abbf_99a2baad","line":125,"range":{"start_line":125,"start_character":17,"end_line":125,"end_character":38},"updated":"2017-11-28 04:38:15.000000000","message":"This option isn\u0027t being used any more by the scrubber, so let\u0027s remove it.\n\nShould also remove the registry options from the _scrubber_opts list in opts.py and regenerate the sample scrubber config file.","commit_id":"6b945dc0cb6f26cf91cab7057862be1da9203c12"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"b156a9526a9e78cd1b52c46091d8add3d2b8fd27","unresolved":false,"context_lines":[{"line_number":122,"context_line":"    * None"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"\"\"\")),"},{"line_number":125,"context_line":"    cfg.BoolOpt(\u0027send_identity_headers\u0027,"},{"line_number":126,"context_line":"                default\u003dFalse,"},{"line_number":127,"context_line":"                help\u003d_(\"\"\""},{"line_number":128,"context_line":"Send headers received from identity when making requests to"}],"source_content_type":"text/x-python","patch_set":11,"id":"ff82abbf_cd19587a","line":125,"range":{"start_line":125,"start_character":17,"end_line":125,"end_character":38},"in_reply_to":"ff82abbf_99a2baad","updated":"2017-11-28 07:33:40.000000000","message":"OK. will remove it in the next PS. And L109 as well.","commit_id":"6b945dc0cb6f26cf91cab7057862be1da9203c12"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"a16469295f7b9ec3d1251493bfca5ba815798d73","unresolved":false,"context_lines":[{"line_number":211,"context_line":"CONF \u003d cfg.CONF"},{"line_number":212,"context_line":"CONF.register_opts(scrubber_opts)"},{"line_number":213,"context_line":"CONF.import_opt(\u0027metadata_encryption_key\u0027, \u0027glance.common.config\u0027)"},{"line_number":214,"context_line":"CONF.import_opt(\u0027limit_param_default\u0027, \u0027glance.common.config\u0027)"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"class ScrubDBQueue(object):"}],"source_content_type":"text/x-python","patch_set":11,"id":"ff82abbf_f94986b6","line":214,"range":{"start_line":214,"start_character":17,"end_line":214,"end_character":36},"updated":"2017-11-28 04:38:15.000000000","message":"I don\u0027t know whether we need to make this configurable for the scrubber.  But even if we do, I don\u0027t think using this existing option is a good idea.  Currently this option is used to control the size of API responses that hit several tables and pump out a lot of json text.  The scrubber can probably handle a larger value without adversely affecting database performance.  (Though Nikhil is definitely right that we want to do paging.)  I don\u0027t know whether it\u0027s worth introducing a new config option, or whether we should just hard-code a sane value.  Let\u0027s see what other people think.  The key issue here is: does this make sense as a value that could be tuned, or is it just a guard so that we don\u0027t tie up the database trying to pull all the images out at once?","commit_id":"6b945dc0cb6f26cf91cab7057862be1da9203c12"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"b156a9526a9e78cd1b52c46091d8add3d2b8fd27","unresolved":false,"context_lines":[{"line_number":211,"context_line":"CONF \u003d cfg.CONF"},{"line_number":212,"context_line":"CONF.register_opts(scrubber_opts)"},{"line_number":213,"context_line":"CONF.import_opt(\u0027metadata_encryption_key\u0027, \u0027glance.common.config\u0027)"},{"line_number":214,"context_line":"CONF.import_opt(\u0027limit_param_default\u0027, \u0027glance.common.config\u0027)"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"class ScrubDBQueue(object):"}],"source_content_type":"text/x-python","patch_set":11,"id":"ff82abbf_12051f46","line":214,"range":{"start_line":214,"start_character":17,"end_line":214,"end_character":36},"in_reply_to":"ff82abbf_f94986b6","updated":"2017-11-28 07:33:40.000000000","message":"The reason we use this configurable here is not only improve db performance, but also to keep the previous behavior like Nikhil said.\nActually IMO, admin users maybe don\u0027t care it.I\u0027d like to leave the comment here for some days. If no other idea, I\u0027ll hard code the value(create a new config option is alternative IMHO) as Brain said.","commit_id":"6b945dc0cb6f26cf91cab7057862be1da9203c12"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"a16469295f7b9ec3d1251493bfca5ba815798d73","unresolved":false,"context_lines":[{"line_number":284,"context_line":"                    continue"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"                if self.metadata_encryption_key:"},{"line_number":287,"context_line":"                    uri \u003d crypt.urlsafe_decrypt(self.metadata_encryption_key,"},{"line_number":288,"context_line":"                                                loc[\u0027url\u0027])"},{"line_number":289,"context_line":"                else:"},{"line_number":290,"context_line":"                    uri \u003d loc[\u0027url\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"ff82abbf_7c7244af","line":287,"range":{"start_line":287,"start_character":40,"end_line":287,"end_character":42},"updated":"2017-11-28 04:38:15.000000000","message":"OK, so you need to decrypt here because the registry isn\u0027t doing it for you any more.  I wonder why the old code re-encrypted the uri here, only to decrypt it again later in _delete_image_location_from_backend()?  I can\u0027t think of a security reason.  I think it makes sense to decrypt here, but we should probably think about this a bit more carefully to make sure we\u0027re not introducing a vulnerability.","commit_id":"6b945dc0cb6f26cf91cab7057862be1da9203c12"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"741ed64e7e377bd80848bad2bc7523d2b9fc8683","unresolved":false,"context_lines":[{"line_number":284,"context_line":"                    continue"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"                if self.metadata_encryption_key:"},{"line_number":287,"context_line":"                    uri \u003d crypt.urlsafe_decrypt(self.metadata_encryption_key,"},{"line_number":288,"context_line":"                                                loc[\u0027url\u0027])"},{"line_number":289,"context_line":"                else:"},{"line_number":290,"context_line":"                    uri \u003d loc[\u0027url\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"ff82abbf_765e98ea","line":287,"range":{"start_line":287,"start_character":40,"end_line":287,"end_character":42},"in_reply_to":"ff82abbf_0020259a","updated":"2017-11-30 12:43:13.000000000","message":"Thanks for doing the research, I agree with you.","commit_id":"6b945dc0cb6f26cf91cab7057862be1da9203c12"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"90bb9e046a2995fd1786930df369c0e73f53346c","unresolved":false,"context_lines":[{"line_number":284,"context_line":"                    continue"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"                if self.metadata_encryption_key:"},{"line_number":287,"context_line":"                    uri \u003d crypt.urlsafe_decrypt(self.metadata_encryption_key,"},{"line_number":288,"context_line":"                                                loc[\u0027url\u0027])"},{"line_number":289,"context_line":"                else:"},{"line_number":290,"context_line":"                    uri \u003d loc[\u0027url\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"ff82abbf_0020259a","line":287,"range":{"start_line":287,"start_character":40,"end_line":287,"end_character":42},"in_reply_to":"ff82abbf_7c7244af","updated":"2017-11-30 08:07:31.000000000","message":"I think the reason we use encrypt and decrypt before is that we cache the image in the file before:\nhttps://review.openstack.org/#/c/39309/11/glance/store/scrubber.py\n\nSo that the location should be encrypt for security reason.\n\nBut we don\u0027t use file now, so it\u0027s useless as well.","commit_id":"6b945dc0cb6f26cf91cab7057862be1da9203c12"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"a9f8949c1fcac1c7e321557d98710cf4b8aee201","unresolved":false,"context_lines":[{"line_number":154,"context_line":"CONF \u003d cfg.CONF"},{"line_number":155,"context_line":"CONF.register_opts(scrubber_opts)"},{"line_number":156,"context_line":"CONF.import_opt(\u0027metadata_encryption_key\u0027, \u0027glance.common.config\u0027)"},{"line_number":157,"context_line":"LIMIT_PER_PAGE \u003d 25"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"class ScrubDBQueue(object):"}],"source_content_type":"text/x-python","patch_set":12,"id":"df87a7cf_170a3a89","line":157,"updated":"2017-12-06 16:32:02.000000000","message":"I\u0027ve asked around about this.  The general consensus is that we should use a large page size here so that we don\u0027t hammer the DB with queries, and should definitely not keep a connection to the DB open.  (Actually that\u0027s only partly true, some people did say don\u0027t page at all, but I can\u0027t bring myself to say that.)\n\nI suggest setting changing the name of this var to REASONABLE_DB_PAGE_SIZE and set it to 1000 (or even 10000).  Then we probably won\u0027t do any actual paging but we\u0027ll be protected in case someone sets delayed_delete to a year or so.","commit_id":"07e788d6a86c58e4af92f309611382503adc9b6f"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"88c546be555da978399797bd132b0657c3a63680","unresolved":false,"context_lines":[{"line_number":154,"context_line":"CONF \u003d cfg.CONF"},{"line_number":155,"context_line":"CONF.register_opts(scrubber_opts)"},{"line_number":156,"context_line":"CONF.import_opt(\u0027metadata_encryption_key\u0027, \u0027glance.common.config\u0027)"},{"line_number":157,"context_line":"LIMIT_PER_PAGE \u003d 25"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"class ScrubDBQueue(object):"}],"source_content_type":"text/x-python","patch_set":12,"id":"df87a7cf_9132cc5d","line":157,"in_reply_to":"df87a7cf_170a3a89","updated":"2017-12-07 01:07:52.000000000","message":"Done","commit_id":"07e788d6a86c58e4af92f309611382503adc9b6f"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"e0da36f05d4792ab464a84958c3563c6343f60d1","unresolved":false,"context_lines":[{"line_number":217,"context_line":"            if not deleted_at:"},{"line_number":218,"context_line":"                continue"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"            delete_time \u003d time.mktime(deleted_at.timetuple())"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"            if delete_time + self.scrub_time \u003e time.time():"},{"line_number":223,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":13,"id":"df87a7cf_9c43a6af","line":220,"updated":"2017-12-07 21:42:41.000000000","message":"Using mktime() here is causing a problem.  The timetuple doesn\u0027t have a timezone, and mktime() is defined to assume that the timetuple is given in the local timezone.  So mktime() grabs the info from the timetuple and adds any appropriate offset seconds before returning the result. The database is UTC, so where I am (-5:00), mktime() does the conversion of the timetuple to seconds and then adds 1800.\n\nSo what happens is that even with scrub_time \u003d\u003d 0, no scrubbing will happen for 5 hours on my machine.\n\ntime.time() below at line 222 is giving the correct epoch seconds, so I don\u0027t think we want to mess with that line.  The fix needs to happen at line 220.\n\nThere may be a better way to do this, but i think maybe import calendar and compute delete_time \u003d calendar.timegm(deleted_at.utctimetuple)) \n\n(The utctimetuple doesn\u0027t do any conversion; it just has the isdst value in the tuple set to zero.  With timetuple, you get the isdst value from the system, so on my machine it\u0027s -1 right now.)","commit_id":"e7ee952b1640e8b64831dc76f67956355b1342b9"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"de73e19ba4ed6f3b8cebebd0b2b5392f1b52c435","unresolved":false,"context_lines":[{"line_number":217,"context_line":"            if not deleted_at:"},{"line_number":218,"context_line":"                continue"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"            delete_time \u003d time.mktime(deleted_at.timetuple())"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"            if delete_time + self.scrub_time \u003e time.time():"},{"line_number":223,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":13,"id":"df87a7cf_fc59928d","line":220,"in_reply_to":"df87a7cf_9c43a6af","updated":"2017-12-07 21:46:00.000000000","message":"\u003e delete_time \u003d calendar.timegm(deleted_at.utctimetuple))\n\nI forgot the () after utctimetuple, it\u0027s a method call, not a property.  (It\u0027s hard to write code in these little boxes!)","commit_id":"e7ee952b1640e8b64831dc76f67956355b1342b9"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"6456e881397703e817d8de21dde6001d836e1c4c","unresolved":false,"context_lines":[{"line_number":217,"context_line":"            if not deleted_at:"},{"line_number":218,"context_line":"                continue"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"            delete_time \u003d time.mktime(deleted_at.timetuple())"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"            if delete_time + self.scrub_time \u003e time.time():"},{"line_number":223,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":13,"id":"df87a7cf_f0d1b2fc","line":220,"in_reply_to":"df87a7cf_fc59928d","updated":"2017-12-08 01:54:37.000000000","message":"Right. My fault here.","commit_id":"e7ee952b1640e8b64831dc76f67956355b1342b9"}],"releasenotes/notes/scrubber-refactor-73ddbd61ebbf1e86.yaml":[{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"c3a0593985785f641803da1e15940f301583428d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"others:"},{"line_number":2,"context_line":"  - |"},{"line_number":3,"context_line":"    Refactored the glance-scrubber so that it doesn\u0027t need authentication any"},{"line_number":4,"context_line":"    more like ``glance-manage`` command does."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"3f4b6375_436ac419","line":3,"updated":"2017-10-26 15:10:38.000000000","message":"oh well. I think there\u0027s a bit more to the story isn\u0027t it, especially if you do make the suggested change.","commit_id":"061c445577bfdb4cd2024e213450ba4ebad21343"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"a16469295f7b9ec3d1251493bfca5ba815798d73","unresolved":false,"context_lines":[{"line_number":1,"context_line":"others:"},{"line_number":2,"context_line":"  - |"},{"line_number":3,"context_line":"    Refactored the glance-scrubber so that it doesn\u0027t need authentication any"},{"line_number":4,"context_line":"    more like ``glance-manage`` command does. It\u0027ll keep the previous behavior:"},{"line_number":5,"context_line":"    Get 25 images (which is the default value by the ``limit_param_default``"},{"line_number":6,"context_line":"    option) each time from DB until to the end."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"ff82abbf_1c96984d","line":4,"range":{"start_line":3,"start_character":35,"end_line":4,"end_character":45},"updated":"2017-11-28 04:38:15.000000000","message":"I think what you want to say here is that you\u0027ve eliminated the dependency on the glance-registry and have removed the registry-related configuration options.","commit_id":"6b945dc0cb6f26cf91cab7057862be1da9203c12"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"b156a9526a9e78cd1b52c46091d8add3d2b8fd27","unresolved":false,"context_lines":[{"line_number":1,"context_line":"others:"},{"line_number":2,"context_line":"  - |"},{"line_number":3,"context_line":"    Refactored the glance-scrubber so that it doesn\u0027t need authentication any"},{"line_number":4,"context_line":"    more like ``glance-manage`` command does. It\u0027ll keep the previous behavior:"},{"line_number":5,"context_line":"    Get 25 images (which is the default value by the ``limit_param_default``"},{"line_number":6,"context_line":"    option) each time from DB until to the end."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"ff82abbf_8d29108b","line":4,"range":{"start_line":3,"start_character":35,"end_line":4,"end_character":45},"in_reply_to":"ff82abbf_1c96984d","updated":"2017-11-28 07:33:40.000000000","message":"Got it.","commit_id":"6b945dc0cb6f26cf91cab7057862be1da9203c12"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"a16469295f7b9ec3d1251493bfca5ba815798d73","unresolved":false,"context_lines":[{"line_number":2,"context_line":"  - |"},{"line_number":3,"context_line":"    Refactored the glance-scrubber so that it doesn\u0027t need authentication any"},{"line_number":4,"context_line":"    more like ``glance-manage`` command does. It\u0027ll keep the previous behavior:"},{"line_number":5,"context_line":"    Get 25 images (which is the default value by the ``limit_param_default``"},{"line_number":6,"context_line":"    option) each time from DB until to the end."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"ff82abbf_5c966040","line":6,"range":{"start_line":5,"start_character":4,"end_line":6,"end_character":47},"updated":"2017-11-28 04:38:15.000000000","message":"I think this is misleading.  The paging is hidden inside a generator, so it\u0027s not like you\u0027re going to scrub 25 images, then scrub 25 more, etc.  (And if you don\u0027t introduce the config option, you don\u0027t need to mention this at all.)","commit_id":"6b945dc0cb6f26cf91cab7057862be1da9203c12"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"b156a9526a9e78cd1b52c46091d8add3d2b8fd27","unresolved":false,"context_lines":[{"line_number":2,"context_line":"  - |"},{"line_number":3,"context_line":"    Refactored the glance-scrubber so that it doesn\u0027t need authentication any"},{"line_number":4,"context_line":"    more like ``glance-manage`` command does. It\u0027ll keep the previous behavior:"},{"line_number":5,"context_line":"    Get 25 images (which is the default value by the ``limit_param_default``"},{"line_number":6,"context_line":"    option) each time from DB until to the end."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"ff82abbf_ed169c49","line":6,"range":{"start_line":5,"start_character":4,"end_line":6,"end_character":47},"in_reply_to":"ff82abbf_5c966040","updated":"2017-11-28 07:33:40.000000000","message":"Got it.","commit_id":"6b945dc0cb6f26cf91cab7057862be1da9203c12"},{"author":{"_account_id":14676,"name":"Kairat Kushaev","email":"kkushaev@mirantis.com","username":"kairat_kushaev"},"change_message_id":"78c33cdc809e284d214c822ef371d89bf3eaf81e","unresolved":false,"context_lines":[{"line_number":2,"context_line":"  - |"},{"line_number":3,"context_line":"    Refactored the ``glance-scrubber`` so that it has eliminated the dependency"},{"line_number":4,"context_line":"    on the ``glance-registry``. The options ``send_identity_headers`` and"},{"line_number":5,"context_line":"    ``admin_role`` which were used for ``glance-scrubber`` are removed as well."}],"source_content_type":"text/x-yaml","patch_set":13,"id":"df87a7cf_094f646b","line":5,"updated":"2017-12-07 12:31:00.000000000","message":"you must explicitly state that usage for v1 with registry has been killed IMO.","commit_id":"e7ee952b1640e8b64831dc76f67956355b1342b9"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"6456e881397703e817d8de21dde6001d836e1c4c","unresolved":false,"context_lines":[{"line_number":2,"context_line":"  - |"},{"line_number":3,"context_line":"    Refactored the ``glance-scrubber`` so that it has eliminated the dependency"},{"line_number":4,"context_line":"    on the ``glance-registry``. The options ``send_identity_headers`` and"},{"line_number":5,"context_line":"    ``admin_role`` which were used for ``glance-scrubber`` are removed as well."}],"source_content_type":"text/x-yaml","patch_set":13,"id":"df87a7cf_900ce6a5","line":5,"in_reply_to":"df87a7cf_094f646b","updated":"2017-12-08 01:54:37.000000000","message":"Done","commit_id":"e7ee952b1640e8b64831dc76f67956355b1342b9"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"942551b7fcb477d608bfc317351d223fb38e5461","unresolved":false,"context_lines":[{"line_number":1,"context_line":"others:"},{"line_number":2,"context_line":"  - |"},{"line_number":3,"context_line":"    Refactored the ``glance-scrubber``, so that ``glance-scrubber`` which used"},{"line_number":4,"context_line":"    ``glance-registry`` V1 before has eliminated the dependency on the"},{"line_number":5,"context_line":"    ``glance-registry``. The options ``send_identity_headers`` and"},{"line_number":6,"context_line":"    ``admin_role`` which were used for ``glance-scrubber`` are removed as well."}],"source_content_type":"text/x-yaml","patch_set":16,"id":"7f96bb07_d4fc3940","line":6,"range":{"start_line":3,"start_character":0,"end_line":6,"end_character":79},"updated":"2018-01-11 01:58:19.000000000","message":"Let\u0027s change this to:\n\nThe ``glance-scrubber`` utility, which is used to perfom offline deletion of images when the Glance ``delayed_delete`` option is enabled, has been refactored so that it no longer uses the Glance Registry API (and hence no longer has a dependency on the Registry v1 Client).  Configuration options associated with connecting to the Glance registry are no longer required, and operators may remove them from the glance-scrubber.conf file.","commit_id":"536d0cdd97ad48c1c2e925fe3c141e714137b409"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"fa138055f0c56e05584b4e4268f4f33f6eec6ecb","unresolved":false,"context_lines":[{"line_number":1,"context_line":"others:"},{"line_number":2,"context_line":"  - |"},{"line_number":3,"context_line":"    Refactored the ``glance-scrubber``, so that ``glance-scrubber`` which used"},{"line_number":4,"context_line":"    ``glance-registry`` V1 before has eliminated the dependency on the"},{"line_number":5,"context_line":"    ``glance-registry``. The options ``send_identity_headers`` and"},{"line_number":6,"context_line":"    ``admin_role`` which were used for ``glance-scrubber`` are removed as well."}],"source_content_type":"text/x-yaml","patch_set":16,"id":"7f96bb07_8f753a9b","line":6,"range":{"start_line":3,"start_character":0,"end_line":6,"end_character":79},"in_reply_to":"7f96bb07_d4fc3940","updated":"2018-01-11 02:07:15.000000000","message":"Done","commit_id":"536d0cdd97ad48c1c2e925fe3c141e714137b409"}]}
