)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"0f5484028664024f2d3f10ebadfb88f244a1f091","unresolved":false,"context_lines":[{"line_number":24,"context_line":"of the *-server configuration file. This configuration variable can be"},{"line_number":25,"context_line":"extrapolated with device attributes like ip, port, device, zone, ... by using"},{"line_number":26,"context_line":"the format {NAME}. eg:"},{"line_number":27,"context_line":"    rsync_module \u003d {replication_ip}::object_{device}"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"With this configuration, an administrators can solve the problem of connections"},{"line_number":30,"context_line":"distribution by creating one module per device in rsyncd configuration."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"da20952f_c326deb9","line":27,"updated":"2015-09-03 08:58:45.000000000","message":"what happened to just using python string interpolation?  %(name)s ???","commit_id":"214dd18074be5e930dbcc4d73034d851d6477767"},{"author":{"_account_id":16896,"name":"Ondřej Nový","email":"novy@ondrej.org","username":"onovy"},"change_message_id":"43faa68fb23270c4972bdd3ac369ef3c1997bf77","unresolved":false,"context_lines":[{"line_number":24,"context_line":"of the *-server configuration file. This configuration variable can be"},{"line_number":25,"context_line":"extrapolated with device attributes like ip, port, device, zone, ... by using"},{"line_number":26,"context_line":"the format {NAME}. eg:"},{"line_number":27,"context_line":"    rsync_module \u003d {replication_ip}::object_{device}"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"With this configuration, an administrators can solve the problem of connections"},{"line_number":30,"context_line":"distribution by creating one module per device in rsyncd configuration."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"da20952f_e3273e10","line":27,"in_reply_to":"da20952f_c326deb9","updated":"2015-09-03 20:45:38.000000000","message":"+1","commit_id":"214dd18074be5e930dbcc4d73034d851d6477767"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"0f5484028664024f2d3f10ebadfb88f244a1f091","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    {replication_ip}::container"},{"line_number":35,"context_line":"    {replication_ip}::object"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"If vm_test_mode is enabled, {replication_port} is prepended."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"Change-Id: Iad91df50dadbe96c921181797799b4444323ce2e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"da20952f_e01bd87e","line":37,"updated":"2015-09-03 08:58:45.000000000","message":"s/prepended/appended/\n\n    %(replication_ip)s::account \n\nbecomes \n\n    %(replication_ip)s::account%(replication_port)","commit_id":"214dd18074be5e930dbcc4d73034d851d6477767"}],"swift/common/db_replicator.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"0f5484028664024f2d3f10ebadfb88f244a1f091","unresolved":false,"context_lines":[{"line_number":171,"context_line":"            conf.get(\u0027rsync_compress\u0027, \u0027no\u0027))"},{"line_number":172,"context_line":"        if config_true_value(conf.get(\u0027vm_test_mode\u0027, \u0027no\u0027)):"},{"line_number":173,"context_line":"            self.rsync_module \u003d \u0027{replication_ip}::%s{replication_port}\u0027 \\"},{"line_number":174,"context_line":"                % self.server_type"},{"line_number":175,"context_line":"        else:"},{"line_number":176,"context_line":"            self.rsync_module \u003d conf.get(\u0027rsync_module\u0027, \u0027{replication_ip}::%s\u0027"},{"line_number":177,"context_line":"                                         % self.server_type).rstrip(\u0027/\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_639272a1","line":174,"updated":"2015-09-03 08:58:45.000000000","message":"somewhat skeptical of ignoring rsync_module config option in vm_test_mode - that don\u0027t seem entirely exclusive to me.  Some options you might think are palatable:\n\n1. remove the option, update the saio docs\n\n2. as described in the commit message vm_test_mode \u003d true could *just* append the `{replication_port}` to *whatever* is currently configured in the rsync_module option - kind of a weird option to have when you already have just for \"convenience\" in development environments given full control over the rsync_module configuration - but not a bad way to solve backwards compatibility.\n\nOption #2 could probably be implemented as a follow on patch that includes the effort to deprecate the option.","commit_id":"214dd18074be5e930dbcc4d73034d851d6477767"},{"author":{"_account_id":16896,"name":"Ondřej Nový","email":"novy@ondrej.org","username":"onovy"},"change_message_id":"43faa68fb23270c4972bdd3ac369ef3c1997bf77","unresolved":false,"context_lines":[{"line_number":279,"context_line":"            \u0027replication_port\u0027: device[\u0027replication_port\u0027],"},{"line_number":280,"context_line":"            \u0027region\u0027: device[\u0027region\u0027],"},{"line_number":281,"context_line":"            \u0027zone\u0027: device[\u0027zone\u0027],"},{"line_number":282,"context_line":"            \u0027device\u0027: device[\u0027device\u0027],"},{"line_number":283,"context_line":"        }"},{"line_number":284,"context_line":"        rsync_module \u003d self.rsync_module"},{"line_number":285,"context_line":"        for attr, value in replacements.iteritems():"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_03d032f5","line":282,"updated":"2015-09-03 20:45:38.000000000","message":"why not support ring metadata here?","commit_id":"214dd18074be5e930dbcc4d73034d851d6477767"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"0f5484028664024f2d3f10ebadfb88f244a1f091","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        }"},{"line_number":284,"context_line":"        rsync_module \u003d self.rsync_module"},{"line_number":285,"context_line":"        for attr, value in replacements.iteritems():"},{"line_number":286,"context_line":"            rsync_module \u003d rsync_module.replace(\u0027{%s}\u0027 % attr, str(value))"},{"line_number":287,"context_line":"        rsync_path \u003d \u0027%s/tmp/%s\u0027 % (device[\u0027device\u0027], local_id)"},{"line_number":288,"context_line":"        remote_file \u003d \u0027%s/%s\u0027 % (rsync_module, rsync_path)"},{"line_number":289,"context_line":"        mtime \u003d os.path.getmtime(broker.db_file)"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_c3d01e56","line":286,"updated":"2015-09-03 08:58:45.000000000","message":"this enumeration/translation of the ring\u0027s node dict keys/values interpolation is very similar to the one in common.db_replicator - future patch may have an opportunity to extract to common.utils function (be nice for targeted and descriptive unittests as well).","commit_id":"214dd18074be5e930dbcc4d73034d851d6477767"}],"swift/common/utils.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"1f31b2bbf84635de0f76dc8b9bb7288fffd9ba53","unresolved":false,"context_lines":[{"line_number":2726,"context_line":"        module \u003d template.format(**replacements)"},{"line_number":2727,"context_line":"    except KeyError as e:"},{"line_number":2728,"context_line":"        raise ValueError(\u0027Cannot interpolate rsync_module, invalid variable: \u0027"},{"line_number":2729,"context_line":"                         \u0027%s\u0027 % e)"},{"line_number":2730,"context_line":"    return module"},{"line_number":2731,"context_line":""},{"line_number":2732,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_d0c1ebe5","line":2729,"updated":"2015-09-15 00:19:45.000000000","message":"yes, excellent","commit_id":"71f6fd025ea013bc457450a5cc4f8e92c6df92cc"}],"swift/obj/replicator.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"20e62b0e569b0d6aebead0613eeabecb5a6aff74","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        if self.vm_test_mode:"},{"line_number":201,"context_line":"            rsync_module \u003d \u0027%s::object%s\u0027 % (node_ip, node[\u0027replication_port\u0027])"},{"line_number":202,"context_line":"        elif self.rsync_module_per_device:"},{"line_number":203,"context_line":"            rsync_module \u003d \u0027%s::object_%s\u0027 % (node_ip, node[\u0027device\u0027])"},{"line_number":204,"context_line":"        else:"},{"line_number":205,"context_line":"            rsync_module \u003d \u0027%s::object\u0027 % node_ip"},{"line_number":206,"context_line":"        had_any \u003d False"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa1b9901_60bcdf6c","line":203,"updated":"2015-08-18 03:46:18.000000000","message":"this is a useful, but akward coupling.  I had another idea over on the other patch that wants to add a custom tweak to this part of the code:\n\nhttps://review.openstack.org/#/c/192198/","commit_id":"9e92fc5c8098bfe561eb98f42533baa2b8f73352"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"0f5484028664024f2d3f10ebadfb88f244a1f091","unresolved":false,"context_lines":[{"line_number":228,"context_line":"            # a different region than the local one."},{"line_number":229,"context_line":"            args.append(\u0027--compress\u0027)"},{"line_number":230,"context_line":"        replacements \u003d {"},{"line_number":231,"context_line":"            \u0027ip\u0027: rsync_ip(node[\u0027ip\u0027]),"},{"line_number":232,"context_line":"            \u0027port\u0027: node[\u0027port\u0027],"},{"line_number":233,"context_line":"            \u0027replication_ip\u0027: rsync_ip(node[\u0027replication_ip\u0027]),"},{"line_number":234,"context_line":"            \u0027replication_port\u0027: node[\u0027replication_port\u0027],"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_83a54605","line":231,"updated":"2015-09-03 08:58:45.000000000","message":"i had to look up common.utils.rsync_ip - it does some work on ipv6 ips - apparently rsync likes them in square brackets","commit_id":"214dd18074be5e930dbcc4d73034d851d6477767"},{"author":{"_account_id":16896,"name":"Ondřej Nový","email":"novy@ondrej.org","username":"onovy"},"change_message_id":"43faa68fb23270c4972bdd3ac369ef3c1997bf77","unresolved":false,"context_lines":[{"line_number":235,"context_line":"            \u0027region\u0027: node[\u0027region\u0027],"},{"line_number":236,"context_line":"            \u0027zone\u0027: node[\u0027zone\u0027],"},{"line_number":237,"context_line":"            \u0027device\u0027: node[\u0027device\u0027],"},{"line_number":238,"context_line":"        }"},{"line_number":239,"context_line":"        rsync_module \u003d self.rsync_module"},{"line_number":240,"context_line":"        for attr, value in replacements.iteritems():"},{"line_number":241,"context_line":"            rsync_module \u003d rsync_module.replace(\u0027{%s}\u0027 % attr, str(value))"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_4385cacc","line":238,"updated":"2015-09-03 20:45:38.000000000","message":"why not support ring metadata here?","commit_id":"214dd18074be5e930dbcc4d73034d851d6477767"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"0f5484028664024f2d3f10ebadfb88f244a1f091","unresolved":false,"context_lines":[{"line_number":238,"context_line":"        }"},{"line_number":239,"context_line":"        rsync_module \u003d self.rsync_module"},{"line_number":240,"context_line":"        for attr, value in replacements.iteritems():"},{"line_number":241,"context_line":"            rsync_module \u003d rsync_module.replace(\u0027{%s}\u0027 % attr, str(value))"},{"line_number":242,"context_line":"        had_any \u003d False"},{"line_number":243,"context_line":"        for suffix in suffixes:"},{"line_number":244,"context_line":"            spath \u003d join(job[\u0027path\u0027], suffix)"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_036376dd","line":241,"updated":"2015-09-03 08:58:45.000000000","message":"so on one hand this trick won\u0027t raise a KeyError if you try to include \n\n    %(devcie)s\n\nin your rsync_module config option - but OTOH it could silently use the the literal:\n\n    {devcie}\n\n... and not really complain about it","commit_id":"214dd18074be5e930dbcc4d73034d851d6477767"}],"test/probe/common.py":[{"author":{"_account_id":16896,"name":"Ondřej Nový","email":"novy@ondrej.org","username":"onovy"},"change_message_id":"951518d893a739b41731916e88e5fdc94079e5e5","unresolved":false,"context_lines":[{"line_number":222,"context_line":"        # verify server is exposing rsync device"},{"line_number":223,"context_line":"        rsync_export \u003d conf.get(\u0027rsync_module\u0027, \u0027\u0027).rstrip(\u0027/\u0027)"},{"line_number":224,"context_line":"        if not rsync_export:"},{"line_number":225,"context_line":"            rsync_export \u003d \u0027{replication_ip}::object\u0027"},{"line_number":226,"context_line":"            if config_true_value(conf.get(\u0027vm_test_mode\u0027, \u0027no\u0027)):"},{"line_number":227,"context_line":"                rsync_export +\u003d \u0027{replication_port}\u0027"},{"line_number":228,"context_line":"        cmd \u003d \"rsync %s\" % rsync_module_interpolation(rsync_export, dev)"}],"source_content_type":"text/x-python","patch_set":5,"id":"da20952f_b3964e4a","line":225,"updated":"2015-09-04 18:28:27.000000000","message":"::object -\u003e {server} ?","commit_id":"c50cf557fc379285345f8204e0473df544abdb8b"}],"test/unit/common/test_utils.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"1f31b2bbf84635de0f76dc8b9bb7288fffd9ba53","unresolved":false,"context_lines":[{"line_number":2294,"context_line":"            \u0027127.0.0.3::object_12\u0027)"},{"line_number":2295,"context_line":""},{"line_number":2296,"context_line":"        self.assertRaises(ValueError, utils.rsync_module_interpolation,"},{"line_number":2297,"context_line":"                          \u0027{replication_ip}::object_{deivce}\u0027, fake_device)"},{"line_number":2298,"context_line":""},{"line_number":2299,"context_line":"    def test_fallocate_reserve(self):"},{"line_number":2300,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_da790f95","line":2297,"updated":"2015-09-15 00:19:45.000000000","message":"ha!  I love this test!","commit_id":"71f6fd025ea013bc457450a5cc4f8e92c6df92cc"}]}
