)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"23b8ee149b2e4b27ae93135071793d77c919215d","unresolved":false,"context_lines":[{"line_number":10,"context_line":"a big todo item for the rest.  This patch completes the support as"},{"line_number":11,"context_line":"well as addresses a change to the one existing interface where we"},{"line_number":12,"context_line":"used to pass the object directory name into DiskFile but have now"},{"line_number":13,"context_line":"decided to pass in the policy index isntead and let DiskFile build"},{"line_number":14,"context_line":"the object directory name.  This patch includes:"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"- change interface param from directy name to policy index"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAATn%2F9FoI%3D","line":13,"updated":"2013-12-16 22:31:08.000000000","message":"instead?","commit_id":"56bf6f6d02d75873d2d4bce1f302dcf2994c1582"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"f4e2e0884fe8ee8006f29360d83ff89cf0ce146a","unresolved":false,"context_lines":[{"line_number":10,"context_line":"a big todo item for the rest.  This patch completes the support as"},{"line_number":11,"context_line":"well as addresses a change to the one existing interface where we"},{"line_number":12,"context_line":"used to pass the object directory name into DiskFile but have now"},{"line_number":13,"context_line":"decided to pass in the policy index isntead and let DiskFile build"},{"line_number":14,"context_line":"the object directory name.  This patch includes:"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"- change interface param from directy name to policy index"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAATn%2F9FeA%3D","line":13,"in_reply_to":"AAAATn%2F9FoI%3D","updated":"2013-12-16 22:50:33.000000000","message":"thanks, yes","commit_id":"56bf6f6d02d75873d2d4bce1f302dcf2994c1582"},{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"0bd97bf15eef3028d153f2477e72d12f3748a577","unresolved":false,"context_lines":[{"line_number":13,"context_line":"decided to pass in the policy index instead and let DiskFile build"},{"line_number":14,"context_line":"the object directory name.  This patch includes:"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"- change interface param from directy name to policy index"},{"line_number":17,"context_line":"- replace DiskFile DATADIR with Diskfile module method to"},{"line_number":18,"context_line":"  return object directory name based on index (in all"},{"line_number":19,"context_line":"  DiskFile and test files)"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"AAAAUH%2F%2FWYQ%3D","line":16,"updated":"2014-01-14 20:17:58.000000000","message":"*directory*","commit_id":"27a0453f2e508c31e4d3f6e65d8497c78027551e"}],"swift/common/storage_policy.py":[{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"23b8ee149b2e4b27ae93135071793d77c919215d","unresolved":false,"context_lines":[{"line_number":160,"context_line":"if policy_conf.read(\u0027/etc/swift/swift.conf\u0027):"},{"line_number":161,"context_line":"    POLICIES \u003d parse_storage_policies(policy_conf)"},{"line_number":162,"context_line":"else:"},{"line_number":163,"context_line":"    # set up default policy collection for unit test code"},{"line_number":164,"context_line":"    POLICIES \u003d StoragePolicyCollection([StoragePolicy(0, \u0027zero\u0027, True),"},{"line_number":165,"context_line":"                                       StoragePolicy(1, \u0027one\u0027, False),"},{"line_number":166,"context_line":"                                       StoragePolicy(2, \u0027two\u0027, False)])"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F9Fl0%3D","line":163,"updated":"2013-12-16 22:31:08.000000000","message":"Perhaps this should just live with the unit tests? Or is there another reason to have these defaults?\n\nOr perhaps invert this, and have POLICIES be an object with the module methods below as its object methods, and have it provide a default policy of (0, \u0027zero\u0027, True) only?","commit_id":"56bf6f6d02d75873d2d4bce1f302dcf2994c1582"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"f4e2e0884fe8ee8006f29360d83ff89cf0ce146a","unresolved":false,"context_lines":[{"line_number":160,"context_line":"if policy_conf.read(\u0027/etc/swift/swift.conf\u0027):"},{"line_number":161,"context_line":"    POLICIES \u003d parse_storage_policies(policy_conf)"},{"line_number":162,"context_line":"else:"},{"line_number":163,"context_line":"    # set up default policy collection for unit test code"},{"line_number":164,"context_line":"    POLICIES \u003d StoragePolicyCollection([StoragePolicy(0, \u0027zero\u0027, True),"},{"line_number":165,"context_line":"                                       StoragePolicy(1, \u0027one\u0027, False),"},{"line_number":166,"context_line":"                                       StoragePolicy(2, \u0027two\u0027, False)])"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F9FdU%3D","line":163,"in_reply_to":"AAAATn%2F9Fl0%3D","updated":"2013-12-16 22:50:33.000000000","message":"You know, this is from way back on one of the first patch sets and I needed to do this in order to get Jenkins tests to run.  I don\u0027t *think* I need to do this anymore due to many, many other changes in the test code since then.  I will try removing it but will have to submit a patch to see what, if anything, breaks...","commit_id":"56bf6f6d02d75873d2d4bce1f302dcf2994c1582"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"348a184d041a8a77736b4f2dddfc417dd17907c2","unresolved":false,"context_lines":[{"line_number":203,"context_line":""},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"def get_policies():"},{"line_number":206,"context_line":"    return POLICIES"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F%2FVlM%3D","side":"PARENT","line":206,"updated":"2014-01-14 22:29:11.000000000","message":"LOL @ a gettr on a module level global\n\nI think we can fix the proxy to not set self/app.storage_policies \u003d (StoragePolices()|storage_policies) (instance of class vs. module)","commit_id":"3895441afd1f8ca49a09a483f402a961009a8661"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"348a184d041a8a77736b4f2dddfc417dd17907c2","unresolved":false,"context_lines":[{"line_number":204,"context_line":""},{"line_number":205,"context_line":"# if swift.conf exists, parse for policies"},{"line_number":206,"context_line":"policy_conf \u003d ConfigParser()"},{"line_number":207,"context_line":"if policy_conf.read(\u0027/etc/swift/swift.conf\u0027):"},{"line_number":208,"context_line":"    parse_storage_policies(policy_conf)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F%2FVl4%3D","line":207,"updated":"2014-01-14 22:29:11.000000000","message":"Import this literal path (the string \u0027/etc/swift/swift.conf\u0027) from swift.common.utils","commit_id":"fc81e34845884358843f686665f1a8bddf39465b"}],"swift/obj/diskfile.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ad07e4fc6b9c4792a5e39e0c2e14c6a08a7c12b7","unresolved":false,"context_lines":[{"line_number":497,"context_line":"                        partition, account, container, obj,"},{"line_number":498,"context_line":"                        policy_idx\u003dpolicy_idx, **kwargs)"},{"line_number":499,"context_line":""},{"line_number":500,"context_line":"    def object_audit_location_generator(self, policy_idx\u003d0):"},{"line_number":501,"context_line":"        return object_audit_location_generator(self.devices, policy_idx,"},{"line_number":502,"context_line":"                                               self.mount_check, self.logger)"},{"line_number":503,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F9Tuk%3D","line":500,"updated":"2013-12-12 19:47:44.000000000","message":"need an XXX either here or in the auditor.","commit_id":"9954e7fbf977ea92df2f53a89d5bcebc1b943b29"},{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"23b8ee149b2e4b27ae93135071793d77c919215d","unresolved":false,"context_lines":[{"line_number":354,"context_line":"    :param devices: parent directory of the devices to be audited"},{"line_number":355,"context_line":"    :param mount_check: flag to check if a mount check should be performed"},{"line_number":356,"context_line":"                        on devices"},{"line_number":357,"context_line":"    :param policy_idx: the storage policy index"},{"line_number":358,"context_line":"    :param logger: a logger object"},{"line_number":359,"context_line":"    \"\"\""},{"line_number":360,"context_line":"    device_dirs \u003d listdir(devices)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F9FlE%3D","line":357,"updated":"2013-12-16 22:31:08.000000000","message":"This documentation line should probably land before the mount_check one, perhaps?","commit_id":"56bf6f6d02d75873d2d4bce1f302dcf2994c1582"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"f4e2e0884fe8ee8006f29360d83ff89cf0ce146a","unresolved":false,"context_lines":[{"line_number":354,"context_line":"    :param devices: parent directory of the devices to be audited"},{"line_number":355,"context_line":"    :param mount_check: flag to check if a mount check should be performed"},{"line_number":356,"context_line":"                        on devices"},{"line_number":357,"context_line":"    :param policy_idx: the storage policy index"},{"line_number":358,"context_line":"    :param logger: a logger object"},{"line_number":359,"context_line":"    \"\"\""},{"line_number":360,"context_line":"    device_dirs \u003d listdir(devices)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F9FdI%3D","line":357,"in_reply_to":"AAAATn%2F9FlE%3D","updated":"2013-12-16 22:50:33.000000000","message":"Done","commit_id":"56bf6f6d02d75873d2d4bce1f302dcf2994c1582"}],"swift/obj/server.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"27472298d763407543df1e7f63f118ae78eeb1a6","unresolved":false,"context_lines":[{"line_number":679,"context_line":"                        res \u003d HTTPBadRequest("},{"line_number":680,"context_line":"                            \"Policy index must be numeric (was %s)\""},{"line_number":681,"context_line":"                            % policy_idx)"},{"line_number":682,"context_line":"                    res \u003d method(req, policy_idx\u003dpolicy_idx)"},{"line_number":683,"context_line":"            except DiskFileCollision:"},{"line_number":684,"context_line":"                res \u003d HTTPForbidden(request\u003dreq)"},{"line_number":685,"context_line":"            except HTTPException as error_response:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F9Zjc%3D","line":682,"updated":"2013-12-11 22:32:31.000000000","message":"This is probably fine, but I think it\u0027d look better if each verb continued to take just the \u0027req\u0027 argument and the \u0027split_and_validate_path\u0027 function got a wrapper that says something like \"extract path and placement hints\":\n\naccount, container, obj, kwargs \u003d get_name_and_placement(request)\n\ndf \u003d self.get_disk_file(account, container, obj, **kwargs)","commit_id":"c109524bc76732489a1c419c0fa52a72be5987ce"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"8812bff66c1d84d3669949bbe7ac8efe44ae77ef","unresolved":false,"context_lines":[{"line_number":679,"context_line":"                        res \u003d HTTPBadRequest("},{"line_number":680,"context_line":"                            \"Policy index must be numeric (was %s)\""},{"line_number":681,"context_line":"                            % policy_idx)"},{"line_number":682,"context_line":"                    res \u003d method(req, policy_idx\u003dpolicy_idx)"},{"line_number":683,"context_line":"            except DiskFileCollision:"},{"line_number":684,"context_line":"                res \u003d HTTPForbidden(request\u003dreq)"},{"line_number":685,"context_line":"            except HTTPException as error_response:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F9YlM%3D","line":682,"in_reply_to":"AAAATn%2F9Zjc%3D","updated":"2013-12-12 02:02:35.000000000","message":"Yeah, I talked to Sam a little about this change as it didn\u0027t feel quite \"right\", let me look at your suggestion and see what I can come up with.","commit_id":"c109524bc76732489a1c419c0fa52a72be5987ce"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"ad07e4fc6b9c4792a5e39e0c2e14c6a08a7c12b7","unresolved":false,"context_lines":[{"line_number":316,"context_line":"    def POST(self, request):"},{"line_number":317,"context_line":"        \"\"\"Handle HTTP POST requests for the Swift Object Server.\"\"\""},{"line_number":318,"context_line":"        device, partition, account, container, obj, policy_idx \u003d \\"},{"line_number":319,"context_line":"            get_name_and_placement(request, *(5, 5, True))"},{"line_number":320,"context_line":"        if \u0027x-timestamp\u0027 not in request.headers or \\"},{"line_number":321,"context_line":"                not check_float(request.headers[\u0027x-timestamp\u0027]):"},{"line_number":322,"context_line":"            return HTTPBadRequest(body\u003d\u0027Missing timestamp\u0027, request\u003drequest,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F9TuM%3D","line":319,"updated":"2013-12-12 19:47:44.000000000","message":"I don\u0027t understand the point of wrapping the *args in a tuple just to unpack them?\n\nget_name_and_placement(request, 5, 5, True)\n\n^ should work the same?","commit_id":"9954e7fbf977ea92df2f53a89d5bcebc1b943b29"},{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"c131161f55812d8a558884f9662d6e3fd638e40e","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        :param headers_out: dictionary of headers to send in the container"},{"line_number":166,"context_line":"                            request"},{"line_number":167,"context_line":"        :param objdevice: device name that the object is in"},{"line_number":168,"context_line":"        #param policy_idx: the associated storage policy index"},{"line_number":169,"context_line":"        \"\"\""},{"line_number":170,"context_line":"        headers_out[\u0027user-agent\u0027] \u003d \u0027obj-server %s\u0027 % os.getpid()"},{"line_number":171,"context_line":"        full_path \u003d \u0027/%s/%s/%s\u0027 % (account, container, obj)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F9Foo%3D","line":168,"updated":"2013-12-16 22:11:26.000000000","message":"Do you want \":param policy_idx:\"?","commit_id":"56bf6f6d02d75873d2d4bce1f302dcf2994c1582"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"f2620b6b764d0a7f42d19b0b2058d49ec256ca94","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        :param headers_out: dictionary of headers to send in the container"},{"line_number":166,"context_line":"                            request"},{"line_number":167,"context_line":"        :param objdevice: device name that the object is in"},{"line_number":168,"context_line":"        #param policy_idx: the associated storage policy index"},{"line_number":169,"context_line":"        \"\"\""},{"line_number":170,"context_line":"        headers_out[\u0027user-agent\u0027] \u003d \u0027obj-server %s\u0027 % os.getpid()"},{"line_number":171,"context_line":"        full_path \u003d \u0027/%s/%s/%s\u0027 % (account, container, obj)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F9FmI%3D","line":168,"in_reply_to":"AAAATn%2F9Foo%3D","updated":"2013-12-16 22:19:47.000000000","message":"yes, thanks.  typo","commit_id":"56bf6f6d02d75873d2d4bce1f302dcf2994c1582"},{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"0bd97bf15eef3028d153f2477e72d12f3748a577","unresolved":false,"context_lines":[{"line_number":139,"context_line":"            conf.get(\u0027replication_failure_ratio\u0027) or 1.0)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def get_diskfile(self, device, partition, account, container, obj,"},{"line_number":142,"context_line":"                     policy_idx, **kwargs):"},{"line_number":143,"context_line":"        \"\"\""},{"line_number":144,"context_line":"        Utility method for instantiating a DiskFile object supporting a given"},{"line_number":145,"context_line":"        REST API."}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F%2FWG8%3D","line":142,"updated":"2014-01-14 20:17:58.000000000","message":"I\u0027d like to see this as a keyword argument parameter to avoid confusing folks working on other implementations.\n\nThe overall change to add policy_idx in this module is to provide it to get_diskfile() as a keyword argument. That means that another implementation can safely define a replacement get_diskfile() which does not define policy_idx at all.\n\nTo support other implementations, we now have a requirement that all the callers of get_diskfile() below always pass policy_idx as a keyword parameter.\n\nBy declaring it as a keyword argument here we can help make that clearer.","commit_id":"27a0453f2e508c31e4d3f6e65d8497c78027551e"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"a7a453332c1aec51a9ddf13375c26d3723c167be","unresolved":false,"context_lines":[{"line_number":139,"context_line":"            conf.get(\u0027replication_failure_ratio\u0027) or 1.0)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def get_diskfile(self, device, partition, account, container, obj,"},{"line_number":142,"context_line":"                     policy_idx, **kwargs):"},{"line_number":143,"context_line":"        \"\"\""},{"line_number":144,"context_line":"        Utility method for instantiating a DiskFile object supporting a given"},{"line_number":145,"context_line":"        REST API."}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F%2FWBE%3D","line":142,"updated":"2014-01-14 22:02:13.000000000","message":"this is maybe fine for this patch.","commit_id":"fc81e34845884358843f686665f1a8bddf39465b"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"a7a453332c1aec51a9ddf13375c26d3723c167be","unresolved":false,"context_lines":[{"line_number":244,"context_line":"                              objdevice, policy_idx)"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"    def delete_at_update(self, op, delete_at, account, container, obj,"},{"line_number":247,"context_line":"                         request, objdevice, policy_idx):"},{"line_number":248,"context_line":"        \"\"\""},{"line_number":249,"context_line":"        Update the expiring objects container when objects are updated."},{"line_number":250,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F%2FWA0%3D","line":247,"updated":"2014-01-14 22:02:13.000000000","message":"expiring objects containers don\u0027t really have/need a storage policy - there\u0027s no real physical on an object server \"objects\" in them.","commit_id":"fc81e34845884358843f686665f1a8bddf39465b"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"a7a453332c1aec51a9ddf13375c26d3723c167be","unresolved":false,"context_lines":[{"line_number":310,"context_line":"                op, self.expiring_objects_account, delete_at_container,"},{"line_number":311,"context_line":"                \u0027%s-%s/%s/%s\u0027 % (delete_at, account, container, obj),"},{"line_number":312,"context_line":"                host, partition, contdevice, headers_out, objdevice,"},{"line_number":313,"context_line":"                policy_idx)"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"    @public"},{"line_number":316,"context_line":"    @timing_stats()"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F%2FWAw%3D","line":313,"updated":"2014-01-14 22:02:13.000000000","message":"probably just make this a 0","commit_id":"fc81e34845884358843f686665f1a8bddf39465b"}],"swift/proxy/controllers/base.py":[{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"0bd97bf15eef3028d153f2477e72d12f3748a577","unresolved":false,"context_lines":[{"line_number":51,"context_line":"from swift.common.request_helpers import strip_sys_meta_prefix, \\"},{"line_number":52,"context_line":"    strip_user_meta_prefix, is_user_meta, is_sys_meta, is_sys_or_user_meta"},{"line_number":53,"context_line":"import swift.common.storage_policy as storage_policy"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"POLICY_INDEX \u003d storage_policy.POLICY_INDEX"},{"line_number":57,"context_line":"POLICY \u003d storage_policy.POLICY"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F%2FWGs%3D","side":"PARENT","line":54,"updated":"2014-01-14 20:17:58.000000000","message":"Do we need this change here?","commit_id":"3895441afd1f8ca49a09a483f402a961009a8661"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"348a184d041a8a77736b4f2dddfc417dd17907c2","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    strip_user_meta_prefix, is_user_meta, is_sys_meta, is_sys_or_user_meta"},{"line_number":53,"context_line":"import swift.common.storage_policy as storage_policy"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"POLICY_INDEX \u003d storage_policy.POLICY_INDEX"},{"line_number":57,"context_line":"POLICY \u003d storage_policy.POLICY"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F%2FVmo%3D","side":"PARENT","line":55,"updated":"2014-01-14 22:29:11.000000000","message":"remove please","commit_id":"3895441afd1f8ca49a09a483f402a961009a8661"}]}
