)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"04d833bd5c982350c64743e045eeb5e3d7fe8a60","unresolved":false,"context_lines":[{"line_number":10,"context_line":"- Added new function in utils. This function provides ability"},{"line_number":11,"context_line":"  to select separate IP address for replication service."},{"line_number":12,"context_line":"- Db_replicator and object replicators were changed."},{"line_number":13,"context_line":"  Replication processe uses new function now."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Replication network parameters:"},{"line_number":16,"context_line":"- Replication network fields (replication_ip, replication_port)"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"AAAAOn%2F%2F3N0%3D","line":13,"updated":"2013-04-16 21:23:56.000000000","message":"process (sp?)","commit_id":"477b63511fb60a916afc7d7f822e7edd72be9cfa"},{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"04d833bd5c982350c64743e045eeb5e3d7fe8a60","unresolved":false,"context_lines":[{"line_number":19,"context_line":"  functions."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Implementation of replication servers:"},{"line_number":22,"context_line":"- Allowed_methods attribute was added in configuration for standart"},{"line_number":23,"context_line":"  account-, container-, object-server."},{"line_number":24,"context_line":"- Separate replication servers were implemented like standard servers,"},{"line_number":25,"context_line":"  with parameter allowed_methods \u003d REPLICATE."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"AAAAOn%2F%2F3Nw%3D","line":22,"updated":"2013-04-16 21:23:56.000000000","message":"standart (sp?)","commit_id":"477b63511fb60a916afc7d7f822e7edd72be9cfa"},{"author":{"_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},"change_message_id":"496b0c8f56340395b1cca13f6a582e03adb23471","unresolved":false,"context_lines":[{"line_number":19,"context_line":"  functions."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Implementation of replication servers:"},{"line_number":22,"context_line":"- Attribute allowed_methods has been added to standard configuration of"},{"line_number":23,"context_line":"  account-, container-, object-server."},{"line_number":24,"context_line":"- Separate replication servers were implemented like standard servers,"},{"line_number":25,"context_line":"  with parameter replication_server \u003d True (It\u0027s mean, that"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":26,"id":"AAAAOn%2F%2FYsg%3D","line":22,"updated":"2013-05-11 21:07:10.000000000","message":"You ended up not doing the allowed_methods business, right?  I think this first bullet point can be removed.","commit_id":"498cf5560591464075c0b0da50e30498cb894b94"},{"author":{"_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},"change_message_id":"496b0c8f56340395b1cca13f6a582e03adb23471","unresolved":false,"context_lines":[{"line_number":21,"context_line":"Implementation of replication servers:"},{"line_number":22,"context_line":"- Attribute allowed_methods has been added to standard configuration of"},{"line_number":23,"context_line":"  account-, container-, object-server."},{"line_number":24,"context_line":"- Separate replication servers were implemented like standard servers,"},{"line_number":25,"context_line":"  with parameter replication_server \u003d True (It\u0027s mean, that"},{"line_number":26,"context_line":"  allowed_methods \u003d REPLICATE)."},{"line_number":27,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":26,"id":"AAAAOn%2F%2FYsA%3D","line":24,"updated":"2013-05-11 21:07:10.000000000","message":"Suggested rewording:\n\n  Separate replication servers use the same code as normal replication\n  servers, but with replication_server parameter \u003d True.  When using a\n  separate replication network, the non-replication servers set\n  replication_server \u003d False.  When there is no separate replication network\n  (the default case), replication_server is not included in the config.","commit_id":"498cf5560591464075c0b0da50e30498cb894b94"}],"bin/swift-ring-builder":[{"author":{"_account_id":4108,"name":"David Hadas","email":"davidh@il.ibm.com","username":"david-hadas"},"change_message_id":"11bff48b4d8106dac0b9c901f7a11a92fd43412d","unresolved":false,"context_lines":[{"line_number":38,"context_line":"def format_device(dev):"},{"line_number":39,"context_line":"    \"\"\""},{"line_number":40,"context_line":"    Format a device for display."},{"line_number":41,"context_line":"    \"\"\""},{"line_number":42,"context_line":"    if \u0027replication_ip\u0027 in dev and \u0027replication_port\u0027 in dev:"},{"line_number":43,"context_line":"        if \u0027:\u0027 in dev[\u0027ip\u0027] and \u0027:\u0027 in dev[\u0027replication_ip\u0027]:"},{"line_number":44,"context_line":"            return \u0027d%(id)sz%(zone)s-[%(ip)s]:%(port)s,[%(replication_ip)s]:\u0027 \\"}],"source_content_type":"application/octet-stream","patch_set":12,"id":"AAAAN3%2F%2F3hI%3D","line":41,"updated":"2013-03-08 07:47:59.000000000","message":"Please reformat this code such that it is not repetitious.\nThe way it is now, any change to the printed format would need to be made in 6 different lines.\nPlease find a way to add the needed printing without redefining all other fields again and again.","commit_id":"fdcdb89b7f81e4dc7b83b4dd9bcd46e188c038b9"},{"author":{"_account_id":4108,"name":"David Hadas","email":"davidh@il.ibm.com","username":"david-hadas"},"change_message_id":"11bff48b4d8106dac0b9c901f7a11a92fd43412d","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                           len([d for d in builder.devs if d]), balance)"},{"line_number":104,"context_line":"        print \u0027The minimum number of hours before a partition can be \u0027 \\"},{"line_number":105,"context_line":"              \u0027reassigned is %s\u0027 % builder.min_part_hours"},{"line_number":106,"context_line":"        if builder.devs:"},{"line_number":107,"context_line":"            print \u0027Devices:    id  zone      ip address  port      name \u0027 \\"},{"line_number":108,"context_line":"                  \u0027weight partitions balance meta replication_ip \u0027 \\"},{"line_number":109,"context_line":"                  \u0027replication_port\u0027"}],"source_content_type":"application/octet-stream","patch_set":12,"id":"AAAAN3%2F%2F3hA%3D","line":106,"updated":"2013-03-08 07:47:59.000000000","message":"Why use a different order of printing here and in the format above?","commit_id":"fdcdb89b7f81e4dc7b83b4dd9bcd46e188c038b9"},{"author":{"_account_id":4108,"name":"David Hadas","email":"davidh@il.ibm.com","username":"david-hadas"},"change_message_id":"7db3bafda5b224fc3c4c17d9e89b7434fec080ef","unresolved":false,"context_lines":[{"line_number":398,"context_line":"                while i \u003c len(change_value) and change_value[i].isdigit():"},{"line_number":399,"context_line":"                    i +\u003d 1"},{"line_number":400,"context_line":"                change.append((\u0027port\u0027, int(change_value[1:i])))"},{"line_number":401,"context_line":"                change_value \u003d change_value[i:]"},{"line_number":402,"context_line":"            if change_value.startswith(\u0027/\u0027):"},{"line_number":403,"context_line":"                i \u003d 1"},{"line_number":404,"context_line":"                while i \u003c len(change_value) and change_value[i] !\u003d \u0027_\u0027:"}],"source_content_type":"application/octet-stream","patch_set":15,"id":"AAAAOn%2F%2F7R4%3D","side":"PARENT","line":401,"updated":"2013-04-11 08:33:08.000000000","message":"Please replace the comma with the letter R\n....startswith(\u0027R\u0027)","commit_id":"b524a90bd9d6d36a0704664ff3d667c795fef6f3"},{"author":{"_account_id":4108,"name":"David Hadas","email":"davidh@il.ibm.com","username":"david-hadas"},"change_message_id":"7db3bafda5b224fc3c4c17d9e89b7434fec080ef","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        if \u0027:\u0027 in dev[key]:"},{"line_number":46,"context_line":"            wrap_dict[key] \u003d \u0027[\u0027 + dev[key] + \u0027]\u0027"},{"line_number":47,"context_line":"        else:"},{"line_number":48,"context_line":"            wrap_dict[key] \u003d dev[key]"},{"line_number":49,"context_line":"    pattern \u003d (\u0027d%(id)sr%(region)sz%(zone)s-%%(ip)s:%(port)s,\u0027"},{"line_number":50,"context_line":"               \u0027%%(replication_ip)s:%(replication_port)s/%(device)s_\u0027"},{"line_number":51,"context_line":"               \u0027\"%(meta)s\"\u0027 % dev)"}],"source_content_type":"application/octet-stream","patch_set":15,"id":"AAAAOn%2F%2F7SU%3D","line":48,"updated":"2013-04-11 08:33:08.000000000","message":"Please replace the comma with the letter R\npattern \u003d (\u0027d%(id)sr%(region)sz%(zone)s-%%(ip)s:%(port)sR\u0027","commit_id":"c49f95a3accc1147f463348f759d893b6afd34e6"},{"author":{"_account_id":4108,"name":"David Hadas","email":"davidh@il.ibm.com","username":"david-hadas"},"change_message_id":"7db3bafda5b224fc3c4c17d9e89b7434fec080ef","unresolved":false,"context_lines":[{"line_number":209,"context_line":""},{"line_number":210,"context_line":"    A pair of replication parameters can be comma separated after"},{"line_number":211,"context_line":"    \u003cip\u003e:\u003cport\u003e pair like this::"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        \u003cip\u003e:\u003cport\u003e,\u003creplication_ip\u003e:\u003creplication_port\u003e"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    Adds devices to the ring with the given information. No partitions will be"}],"source_content_type":"application/octet-stream","patch_set":15,"id":"AAAAOn%2F%2F7SM%3D","line":212,"updated":"2013-04-11 08:33:08.000000000","message":"Please replace the comma with the letter R\n\u003cip\u003e:\u003cport\u003eR\u003creplication_ip\u003e:\u003creplication_port\u003e","commit_id":"c49f95a3accc1147f463348f759d893b6afd34e6"},{"author":{"_account_id":4108,"name":"David Hadas","email":"davidh@il.ibm.com","username":"david-hadas"},"change_message_id":"7db3bafda5b224fc3c4c17d9e89b7434fec080ef","unresolved":false,"context_lines":[{"line_number":275,"context_line":"            rest \u003d rest[i:]"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"            replication_ip \u003d ip"},{"line_number":278,"context_line":"            replication_port \u003d port"},{"line_number":279,"context_line":"            if rest.startswith(\u0027,\u0027):"},{"line_number":280,"context_line":"                i \u003d 1"},{"line_number":281,"context_line":"                if rest[i] \u003d\u003d \u0027[\u0027:"}],"source_content_type":"application/octet-stream","patch_set":15,"id":"AAAAOn%2F%2F7SI%3D","line":278,"updated":"2013-04-11 08:33:08.000000000","message":"Please replace the comma with the letter R\nif rest.startswith(\u0027R\u0027):","commit_id":"c49f95a3accc1147f463348f759d893b6afd34e6"},{"author":{"_account_id":4108,"name":"David Hadas","email":"davidh@il.ibm.com","username":"david-hadas"},"change_message_id":"7db3bafda5b224fc3c4c17d9e89b7434fec080ef","unresolved":false,"context_lines":[{"line_number":341,"context_line":"                             \u0027port\u0027: port, \u0027replication_ip\u0027: replication_ip,"},{"line_number":342,"context_line":"                             \u0027replication_port\u0027: replication_port,"},{"line_number":343,"context_line":"                             \u0027device\u0027: device_name, \u0027weight\u0027: weight,"},{"line_number":344,"context_line":"                             \u0027meta\u0027: meta})"},{"line_number":345,"context_line":"            devs \u003d builder.search_devs(\u0027r%dz%s-%s:%s,%s:%s/%s\u0027 %"},{"line_number":346,"context_line":"                                       (region, zone, ip, port, replication_ip,"},{"line_number":347,"context_line":"                                        replication_port, device_name))"}],"source_content_type":"application/octet-stream","patch_set":15,"id":"AAAAOn%2F%2F7R8%3D","line":344,"updated":"2013-04-11 08:33:08.000000000","message":"Please replace the comma with the letter R\n...%s:%sR%s:%s","commit_id":"c49f95a3accc1147f463348f759d893b6afd34e6"},{"author":{"_account_id":4108,"name":"David Hadas","email":"davidh@il.ibm.com","username":"david-hadas"},"change_message_id":"f86e7b31f8376d0c421ecb1792d87d9f87c7b16d","unresolved":false,"context_lines":[{"line_number":400,"context_line":"    A pair of replication parameters can be comma separated after"},{"line_number":401,"context_line":"    \u003cip\u003e:\u003cport\u003e pair like this::"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"        \u003cip\u003e:\u003cport\u003e,\u003creplication_ip\u003e:\u003creplication_port\u003e"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"    For each search-value, resets the matched device\u0027s information."},{"line_number":406,"context_line":"    This information isn\u0027t used to assign partitions, so you can use"}],"source_content_type":"application/octet-stream","patch_set":15,"id":"AAAAOn%2F%2F7Rc%3D","line":403,"updated":"2013-04-11 08:35:35.000000000","message":"This should have been:\n\u003cip\u003e:\u003cport\u003e[R\u003creplication_ip\u003e:\u003creplication_port\u003e]\n\nto indicate that the second part is optional","commit_id":"c49f95a3accc1147f463348f759d893b6afd34e6"},{"author":{"_account_id":1216,"name":"gholt","email":"z-launchpad@brim.net","username":"gholt"},"change_message_id":"8e8559ece97678ebd51156e7d3deb95af16236d1","unresolved":false,"context_lines":[{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    A pair of replication parameters can be comma separated after"},{"line_number":208,"context_line":"    \u003cip\u003e:\u003cport\u003e pair like this::"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        \u003cip\u003e:\u003cport\u003eR\u003creplication_ip\u003e:\u003creplication_port\u003e"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    Adds devices to the ring with the given information. No partitions will be"}],"source_content_type":"application/octet-stream","patch_set":20,"id":"AAAAOn%2F%2F2dc%3D","line":209,"updated":"2013-04-17 19:38:59.000000000","message":"Needs updated wording with the R separator change.","commit_id":"22bb398cb415bdb6f98aa8ee7babceb306d4e110"},{"author":{"_account_id":1216,"name":"gholt","email":"z-launchpad@brim.net","username":"gholt"},"change_message_id":"8e8559ece97678ebd51156e7d3deb95af16236d1","unresolved":false,"context_lines":[{"line_number":393,"context_line":""},{"line_number":394,"context_line":"    A pair of replication parameters can be comma separated after"},{"line_number":395,"context_line":"    \u003cip\u003e:\u003cport\u003e pair like this::"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"        \u003cip\u003e:\u003cport\u003e[R\u003creplication_ip\u003e:\u003creplication_port\u003e]"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":"    For each search-value, resets the matched device\u0027s information."}],"source_content_type":"application/octet-stream","patch_set":20,"id":"AAAAOn%2F%2F2dM%3D","line":396,"updated":"2013-04-17 19:38:59.000000000","message":"Needs updated wording with the R separator change.","commit_id":"22bb398cb415bdb6f98aa8ee7babceb306d4e110"},{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"0d9691900b1e3d0a9d1ced42c9f881c855530c11","unresolved":false,"context_lines":[{"line_number":269,"context_line":"            port \u003d int(rest[1:i])"},{"line_number":270,"context_line":"            rest \u003d rest[i:]"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"            replication_ip \u003d ip"},{"line_number":273,"context_line":"            replication_port \u003d port"},{"line_number":274,"context_line":"            if rest.startswith(\u0027R\u0027):"},{"line_number":275,"context_line":"                i \u003d 1"}],"source_content_type":"application/octet-stream","patch_set":30,"id":"AAAAOn%2F%2FUbQ%3D","line":272,"updated":"2013-05-14 20:14:01.000000000","message":"Is it worth taking this code and the ip/port parsing above and refactoring it into a shared routine? Perhaps worth doing it a separate commit? It seems like it shares a lot of the same code with the change processing code down around line 436.","commit_id":"ea7858176b00ab99c22b506a2658e8199cbec8cf"}],"doc/source/overview_replication.rst":[{"author":{"_account_id":2448,"name":"Diane Fleming","email":"dfleming@austin.rr.com","username":"diane-fleming"},"change_message_id":"fa842a44d14448eb886e0551e6e6bff4743ee803","unresolved":false,"context_lines":[{"line_number":2,"context_line":"Replication"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"Since each replica in swift functions independently, and clients generally"},{"line_number":6,"context_line":"require only a simple majority of nodes responding to consider an operation"},{"line_number":7,"context_line":"successful, transient failures like network partitions can quickly cause"},{"line_number":8,"context_line":"replicas to diverge. These differences are eventually reconciled by"}],"source_content_type":"text/x-rst","patch_set":13,"id":"AAAAOH%2F%2Fw5U%3D","line":5,"updated":"2013-03-28 14:39:11.000000000","message":"Since -\u003e Because","commit_id":"9a2bbba35455dbb0f969283873f20305a867d69e"},{"author":{"_account_id":2448,"name":"Diane Fleming","email":"dfleming@austin.rr.com","username":"diane-fleming"},"change_message_id":"fa842a44d14448eb886e0551e6e6bff4743ee803","unresolved":false,"context_lines":[{"line_number":20,"context_line":"Every deleted record or file in the system is marked by a tombstone, so that"},{"line_number":21,"context_line":"deletions can be replicated alongside creations. These tombstones are cleaned"},{"line_number":22,"context_line":"up by the replication process after a period of time referred to as the"},{"line_number":23,"context_line":"consistency window, which is related to replication duration and how long"},{"line_number":24,"context_line":"transient failures can remove a node from the cluster. Tombstone cleanup must"},{"line_number":25,"context_line":"be tied to replication to reach replica convergence."},{"line_number":26,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"AAAAOH%2F%2Fw5I%3D","line":23,"updated":"2013-03-28 14:39:11.000000000","message":"The replication process cleans up tombstones after a time period known as the consistency window. The consistency window encompasses replication duration and how long transient failure can remove a node from the cluster.","commit_id":"9a2bbba35455dbb0f969283873f20305a867d69e"},{"author":{"_account_id":2448,"name":"Diane Fleming","email":"dfleming@austin.rr.com","username":"diane-fleming"},"change_message_id":"fa842a44d14448eb886e0551e6e6bff4743ee803","unresolved":false,"context_lines":[{"line_number":24,"context_line":"transient failures can remove a node from the cluster. Tombstone cleanup must"},{"line_number":25,"context_line":"be tied to replication to reach replica convergence."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"If a replicator detects that a remote drive is has failed, it will use the"},{"line_number":28,"context_line":"ring\u0027s \"get_more_nodes\" interface to choose an alternate node to synchronize"},{"line_number":29,"context_line":"with. The replicator can maintain desired levels of replication in the face of"},{"line_number":30,"context_line":"disk failures, though some replicas may not be in an immediately usable"}],"source_content_type":"text/x-rst","patch_set":13,"id":"AAAAOH%2F%2Fw5A%3D","line":27,"updated":"2013-03-28 14:39:11.000000000","message":"...that a remote drive has failed, the replicator uses the get_more_nodes interface for the ring to choose an alternate node with which to synchronize.","commit_id":"9a2bbba35455dbb0f969283873f20305a867d69e"},{"author":{"_account_id":2448,"name":"Diane Fleming","email":"dfleming@austin.rr.com","username":"diane-fleming"},"change_message_id":"fa842a44d14448eb886e0551e6e6bff4743ee803","unresolved":false,"context_lines":[{"line_number":30,"context_line":"disk failures, though some replicas may not be in an immediately usable"},{"line_number":31,"context_line":"location. Note that the replicator doesn\u0027t maintain desired levels of"},{"line_number":32,"context_line":"replication in the case of other failures (e.g. entire node failures) because"},{"line_number":33,"context_line":"the most of such failures are transient."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"Replication is an area of active development, and likely rife with potential"},{"line_number":36,"context_line":"improvements to speed and correctness."}],"source_content_type":"text/x-rst","patch_set":13,"id":"AAAAOH%2F%2Fw40%3D","line":33,"updated":"2013-03-28 14:39:11.000000000","message":"in the case\n-\u003e\n\nwhen other failures, such as entire node failures, occur because most failure are transient.","commit_id":"9a2bbba35455dbb0f969283873f20305a867d69e"},{"author":{"_account_id":2448,"name":"Diane Fleming","email":"dfleming@austin.rr.com","username":"diane-fleming"},"change_message_id":"fa842a44d14448eb886e0551e6e6bff4743ee803","unresolved":false,"context_lines":[{"line_number":44,"context_line":"--------------"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"The first step performed by db replication is a low-cost hash comparison to"},{"line_number":47,"context_line":"find out whether or not two replicas already match. Under normal operation,"},{"line_number":48,"context_line":"this check is able to verify that most databases in the system are already"},{"line_number":49,"context_line":"synchronized very quickly. If the hashes differ, the replicator brings the"},{"line_number":50,"context_line":"databases in sync by sharing records added since the last sync point."}],"source_content_type":"text/x-rst","patch_set":13,"id":"AAAAOH%2F%2Fw4w%3D","line":47,"updated":"2013-03-28 14:39:11.000000000","message":"find out -\u003e\n\ndetermine whether two replicas already match","commit_id":"9a2bbba35455dbb0f969283873f20305a867d69e"},{"author":{"_account_id":2448,"name":"Diane Fleming","email":"dfleming@austin.rr.com","username":"diane-fleming"},"change_message_id":"fa842a44d14448eb886e0551e6e6bff4743ee803","unresolved":false,"context_lines":[{"line_number":55,"context_line":"replicas of the database, and record ids are monotonically increasing"},{"line_number":56,"context_line":"integers. After all new records have been pushed to the remote database, the"},{"line_number":57,"context_line":"entire sync table of the local database is pushed, so the remote database"},{"line_number":58,"context_line":"knows it\u0027s now in sync with everyone the local database has previously"},{"line_number":59,"context_line":"synchronized with."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"If a replica is found to be missing entirely, the whole local database file is"}],"source_content_type":"text/x-rst","patch_set":13,"id":"AAAAOH%2F%2Fw4Q%3D","line":58,"updated":"2013-03-28 14:39:11.000000000","message":"knows ... -\u003e\n\ncan guarantee that it is in sync with everything with which the local database has previously synchronized.","commit_id":"9a2bbba35455dbb0f969283873f20305a867d69e"},{"author":{"_account_id":1216,"name":"gholt","email":"z-launchpad@brim.net","username":"gholt"},"change_message_id":"8e8559ece97678ebd51156e7d3deb95af16236d1","unresolved":false,"context_lines":[{"line_number":92,"context_line":"systems, it was designed so that around 2% of the hash space on a normal node"},{"line_number":93,"context_line":"will be invalidated per day, which has experimentally given us acceptable"},{"line_number":94,"context_line":"replication speeds."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"-----------------------------"},{"line_number":98,"context_line":"Dedicated replication network"}],"source_content_type":"text/x-rst","patch_set":20,"id":"AAAAOn%2F%2F2cg%3D","line":95,"updated":"2013-04-17 19:38:59.000000000","message":"Are all the changes above this next section really required? It looks like it\u0027s just reformatted but it\u0027s hard to tell if something slipped in just viewing the diff.","commit_id":"22bb398cb415bdb6f98aa8ee7babceb306d4e110"},{"author":{"_account_id":1216,"name":"gholt","email":"z-launchpad@brim.net","username":"gholt"},"change_message_id":"8e8559ece97678ebd51156e7d3deb95af16236d1","unresolved":false,"context_lines":[{"line_number":97,"context_line":"-----------------------------"},{"line_number":98,"context_line":"Dedicated replication network"},{"line_number":99,"context_line":"-----------------------------"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"Swift\u0027s replication process is essential for consistency and availability of"},{"line_number":102,"context_line":"data. By default, replication activity will use the same network interface as"},{"line_number":103,"context_line":"other cluster operations. However, if a replication interface is set in the"}],"source_content_type":"text/x-rst","patch_set":20,"id":"AAAAOn%2F%2F2cA%3D","line":100,"updated":"2013-04-17 19:38:59.000000000","message":"Might just consider having a link to your other doc so all this text isn\u0027t repeated.","commit_id":"22bb398cb415bdb6f98aa8ee7babceb306d4e110"},{"author":{"_account_id":1216,"name":"gholt","email":"z-launchpad@brim.net","username":"gholt"},"change_message_id":"8e8559ece97678ebd51156e7d3deb95af16236d1","unresolved":false,"context_lines":[{"line_number":108,"context_line":"To separate the cluster-internal replication traffic from client traffic,"},{"line_number":109,"context_line":"separate replication servers can be used. These replication servers are based"},{"line_number":110,"context_line":"on the standard storage servers, but they listen on the replication IP and"},{"line_number":111,"context_line":"only responde to REPLICATE requests. Storage servers can serve REPLICATE"},{"line_number":112,"context_line":"requests, so an operator can transition to using a separate replication"},{"line_number":113,"context_line":"network with no cluster downtime."},{"line_number":114,"context_line":""}],"source_content_type":"text/x-rst","patch_set":20,"id":"AAAAOn%2F%2F2cM%3D","line":111,"updated":"2013-04-17 19:38:59.000000000","message":"Minor typo \"responde\"","commit_id":"22bb398cb415bdb6f98aa8ee7babceb306d4e110"},{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"0d9691900b1e3d0a9d1ced42c9f881c855530c11","unresolved":false,"context_lines":[{"line_number":2,"context_line":"Replication"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"Because each replica in swift functions independently, and clients generally"},{"line_number":6,"context_line":"require only a simple majority of nodes responding to consider an operation"},{"line_number":7,"context_line":"successful, transient failures like network partitions can quickly cause"},{"line_number":8,"context_line":"replicas to diverge. These differences are eventually reconciled by"}],"source_content_type":"text/x-rst","patch_set":30,"id":"AAAAOn%2F%2FUag%3D","line":5,"updated":"2013-05-14 20:14:01.000000000","message":"If this commit is stalled much longer, can we get this kind of general rework of the docs committed separately? This seems really useful to have outside of this commit as well.","commit_id":"ea7858176b00ab99c22b506a2658e8199cbec8cf"}],"doc/source/replication_network.rst":[{"author":{"_account_id":4108,"name":"David Hadas","email":"davidh@il.ibm.com","username":"david-hadas"},"change_message_id":"11bff48b4d8106dac0b9c901f7a11a92fd43412d","unresolved":false,"context_lines":[{"line_number":30,"context_line":"--------------------"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"#. Create new script in ~/bin/ (for example: remakerings_new)::"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        #!/bin/bash"},{"line_number":35,"context_line":"        cd /etc/swift"},{"line_number":36,"context_line":"        rm -f *.builder *.ring.gz backups/*.builder backups/*.ring.gz"}],"source_content_type":"text/x-rst","patch_set":12,"id":"AAAAN3%2F%2F3gs%3D","line":33,"updated":"2013-03-08 07:47:59.000000000","message":"The use of a comma between the ip and the replication IP is very limiting for future enhancements\n\nThere are other IPs that will need to be added for a device...\n\nPlease use more elaborated manner such as \n\nswift-ring-builder object.builder add z3-127.0.0.1:6030 replicate 127.0.0.1:6070 /sdb3 1","commit_id":"fdcdb89b7f81e4dc7b83b4dd9bcd46e188c038b9"},{"author":{"_account_id":4108,"name":"David Hadas","email":"davidh@il.ibm.com","username":"david-hadas"},"change_message_id":"7db3bafda5b224fc3c4c17d9e89b7434fec080ef","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"--------------------"},{"line_number":29,"context_line":"For SAIO replication"},{"line_number":30,"context_line":"--------------------"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"#. Create new script in ~/bin/ (for example: remakerings_new)::"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"AAAAOn%2F%2F7R0%3D","line":30,"updated":"2013-04-11 08:33:08.000000000","message":"Please replace the comma with the letter R","commit_id":"c49f95a3accc1147f463348f759d893b6afd34e6"},{"author":{"_account_id":1216,"name":"gholt","email":"z-launchpad@brim.net","username":"gholt"},"change_message_id":"8e8559ece97678ebd51156e7d3deb95af16236d1","unresolved":false,"context_lines":[{"line_number":16,"context_line":"To separate the cluster-internal replication traffic from client traffic,"},{"line_number":17,"context_line":"separate replication servers can be used. These replication servers are based"},{"line_number":18,"context_line":"on the standard storage servers, but they listen on the replication IP and"},{"line_number":19,"context_line":"only responde to REPLICATE requests. Storage servers can serve REPLICATE"},{"line_number":20,"context_line":"requests, so an operator can transition to using a separate replication"},{"line_number":21,"context_line":"network with no cluster downtime."},{"line_number":22,"context_line":""}],"source_content_type":"text/x-rst","patch_set":20,"id":"AAAAOn%2F%2F2b4%3D","line":19,"updated":"2013-04-17 19:38:59.000000000","message":"Minor typo \"responde\"","commit_id":"22bb398cb415bdb6f98aa8ee7babceb306d4e110"},{"author":{"_account_id":1216,"name":"gholt","email":"z-launchpad@brim.net","username":"gholt"},"change_message_id":"fde683eca40553c49aebc6959b9a1916ff389f30","unresolved":false,"context_lines":[{"line_number":18,"context_line":"To separate the cluster-internal replication traffic from client traffic,"},{"line_number":19,"context_line":"separate replication servers can be used. These replication servers are based"},{"line_number":20,"context_line":"on the standard storage servers, but they listen on the replication IP and"},{"line_number":21,"context_line":"only response to REPLICATE requests. Storage servers can serve REPLICATE"},{"line_number":22,"context_line":"requests, so an operator can transition to using a separate replication"},{"line_number":23,"context_line":"network with no cluster downtime."},{"line_number":24,"context_line":""}],"source_content_type":"text/x-rst","patch_set":22,"id":"AAAAOn%2F%2FtuU%3D","line":21,"updated":"2013-04-26 15:16:34.000000000","message":"\"only response\" should be \"only respond\"","commit_id":"978baae0377b870739ba568c1f45b612203045be"},{"author":{"_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},"change_message_id":"4efa952a13cfbd1c969d525c3a7c6c2496f3ccb3","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        swift-ring-builder account.builder rebalance"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"   .. note::"},{"line_number":59,"context_line":"      Syntax of adding device has been changed: R\u003cip_replication\u003e:\u003cport_replication\u003e was added between z\u003czone\u003e-\u003cip\u003e:\u003cport\u003e and /\u003cdevice_name\u003e_\u003cmeta\u003e \u003cweight\u003e. Added device has use \u003cip_replication\u003e and \u003cport_replication\u003e for replication activities."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"#. Add next rows in /etc/rsyncd.conf::"},{"line_number":62,"context_line":""}],"source_content_type":"text/x-rst","patch_set":22,"id":"AAAAOn%2F%2FsDY%3D","line":59,"updated":"2013-04-29 14:57:10.000000000","message":"Consider:\n\n  \"Added devices will use \u003cip_replication\u003e...\"","commit_id":"978baae0377b870739ba568c1f45b612203045be"},{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"0d9691900b1e3d0a9d1ced42c9f881c855530c11","unresolved":false,"context_lines":[{"line_number":28,"context_line":"node\u0027s standard IP and port will be used for replication."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"--------------------"},{"line_number":31,"context_line":"For SAIO replication"},{"line_number":32,"context_line":"--------------------"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"#. Create new script in ~/bin/ (for example: remakerings_new)::"}],"source_content_type":"text/x-rst","patch_set":30,"id":"AAAAOn%2F%2FUaM%3D","line":31,"updated":"2013-05-14 20:14:01.000000000","message":"Perhaps this comment is beyond the scope of this commit ... perhaps it is worth for us to have a SAIO directory that contains all of these files referenced here, rather than keeping them in the documentation?","commit_id":"ea7858176b00ab99c22b506a2658e8199cbec8cf"},{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"0d9691900b1e3d0a9d1ced42c9f881c855530c11","unresolved":false,"context_lines":[{"line_number":459,"context_line":"   * /etc/swift/container-server(files: 1.conf)"},{"line_number":460,"context_line":"   * /etc/swift/account-server(files: 1.conf)"},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"   delete all configuration options in section [\u003c*\u003e-replicator]"},{"line_number":463,"context_line":""},{"line_number":464,"context_line":"#. Add configuration files for object-server, in /etc/swift/object-server/2.conf::"},{"line_number":465,"context_line":""}],"source_content_type":"text/x-rst","patch_set":30,"id":"AAAAOn%2F%2FUaI%3D","line":462,"updated":"2013-05-14 20:14:01.000000000","message":"Should we also delete the sections? The configurations below also have empty [\u003c*\u003e-replicator] sections.","commit_id":"ea7858176b00ab99c22b506a2658e8199cbec8cf"}],"etc/account-server.conf-sample":[{"author":{"_account_id":1216,"name":"gholt","email":"z-launchpad@brim.net","username":"gholt"},"change_message_id":"fde683eca40553c49aebc6959b9a1916ff389f30","unresolved":false,"context_lines":[{"line_number":50,"context_line":"# Configure parameter for creating specific server"},{"line_number":51,"context_line":"# Standard server doesn\u0027t use this section, because default parameter includes"},{"line_number":52,"context_line":"# all methods. For replication server you must set this value to True, it\u0027s"},{"line_number":53,"context_line":"# mean, that only REPLICATE request will be allowed."},{"line_number":54,"context_line":"# replication_server \u003d False"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"[filter:healthcheck]"}],"source_content_type":"application/octet-stream","patch_set":22,"id":"AAAAOn%2F%2FtuI%3D","line":53,"updated":"2013-04-26 15:16:34.000000000","message":"Wording is off a little here. Maybe:\n\nFor replication servers you should set this value to True, which means that only the REPLICATE request will be allowed.","commit_id":"978baae0377b870739ba568c1f45b612203045be"},{"author":{"_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},"change_message_id":"1e62e6be12b064ea4c25f73cb7c9325b45940d35","unresolved":false,"context_lines":[{"line_number":49,"context_line":"# auto_create_account_prefix \u003d ."},{"line_number":50,"context_line":"# max_clients \u003d 1024"},{"line_number":51,"context_line":"# Configure parameter for creating specific server"},{"line_number":52,"context_line":"# Standard server doesn\u0027t use this section, because default parameter None"},{"line_number":53,"context_line":"# includes all methods. For replication servers you should set this value to"},{"line_number":54,"context_line":"# True, which means that only REPLICATE request will be allowed. False value"},{"line_number":55,"context_line":"# exclude REPLICATE request from full list of allowed methods."}],"source_content_type":"application/octet-stream","patch_set":24,"id":"AAAAOn%2F%2Ff30%3D","line":52,"updated":"2013-05-07 19:39:43.000000000","message":"How about this (in all places where this trinary config setting appears):\n\n  To handle all verbs, including replication verbs, do not specify \"replication_server\" (this is\n  the default).  To only handle replication, set to a True value (e.g. \"True\" or \"1\").  To handle\n  only non-replication verbs, specify any non-true of at least one character (e.g. \"False\").\n  Unless you have a separate replication network, you should not specify any value for\n  \"replication_server\".","commit_id":"31f0496d489e226ac10f496f9902a641612c1fd8"},{"author":{"_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},"change_message_id":"50a00b2a74ac656bebf5707aa1ebba080e99d4c9","unresolved":false,"context_lines":[{"line_number":49,"context_line":"# auto_create_account_prefix \u003d ."},{"line_number":50,"context_line":"# max_clients \u003d 1024"},{"line_number":51,"context_line":"# Configure parameter for creating specific server"},{"line_number":52,"context_line":"# Standard server doesn\u0027t use this section, because default parameter None"},{"line_number":53,"context_line":"# includes all methods. For replication servers you should set this value to"},{"line_number":54,"context_line":"# True, which means that only REPLICATE request will be allowed. False value"},{"line_number":55,"context_line":"# exclude REPLICATE request from full list of allowed methods."}],"source_content_type":"application/octet-stream","patch_set":24,"id":"AAAAOn%2F%2Ff3g%3D","line":52,"in_reply_to":"AAAAOn%2F%2Ff30%3D","updated":"2013-05-07 19:44:23.000000000","message":"Perhaps better for the false value sentence:\n\n  To handle only non-replication verbs, set to \"False\".","commit_id":"31f0496d489e226ac10f496f9902a641612c1fd8"}],"etc/container-server.conf-sample":[{"author":{"_account_id":1216,"name":"gholt","email":"z-launchpad@brim.net","username":"gholt"},"change_message_id":"fde683eca40553c49aebc6959b9a1916ff389f30","unresolved":false,"context_lines":[{"line_number":56,"context_line":"# Configure parameter for creating specific server"},{"line_number":57,"context_line":"# Standard server doesn\u0027t use this section, because default parameter includes"},{"line_number":58,"context_line":"# all methods. For replication server you must set this value to True, it\u0027s"},{"line_number":59,"context_line":"# mean, that only REPLICATE request will be allowed."},{"line_number":60,"context_line":"# replication_server \u003d False"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"[filter:healthcheck]"}],"source_content_type":"application/octet-stream","patch_set":22,"id":"AAAAOn%2F%2FtuA%3D","line":59,"updated":"2013-04-26 15:16:34.000000000","message":"Wording is off a little here. Maybe:\n\nFor replication servers you should set this value to True, which means that only the REPLICATE request will be allowed.","commit_id":"978baae0377b870739ba568c1f45b612203045be"}],"etc/object-server.conf-sample":[{"author":{"_account_id":1216,"name":"gholt","email":"z-launchpad@brim.net","username":"gholt"},"change_message_id":"fde683eca40553c49aebc6959b9a1916ff389f30","unresolved":false,"context_lines":[{"line_number":65,"context_line":"# Configure parameter for creating specific server"},{"line_number":66,"context_line":"# Standard server doesn\u0027t use this section, because default parameter includes"},{"line_number":67,"context_line":"# all methods. For replication server you must set this value to True, it\u0027s"},{"line_number":68,"context_line":"# mean, that only REPLICATE request will be allowed."},{"line_number":69,"context_line":"# replication_server \u003d False"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"[filter:healthcheck]"}],"source_content_type":"application/octet-stream","patch_set":22,"id":"AAAAOn%2F%2Ftto%3D","line":68,"updated":"2013-04-26 15:16:34.000000000","message":"Wording is off a little here. Maybe:\n\nFor replication servers you should set this value to True, which means that only the REPLICATE request will be allowed.","commit_id":"978baae0377b870739ba568c1f45b612203045be"}],"swift/account/server.py":[{"author":{"_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},"change_message_id":"666ac7bd9797f6a25944dcfd11cd8f73fa5cd67c","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        self.mount_check \u003d config_true_value(conf.get(\u0027mount_check\u0027, \u0027true\u0027))"},{"line_number":50,"context_line":"        allowed_methods \u003d conf.get(\u0027allowed_methods\u0027)"},{"line_number":51,"context_line":"        if allowed_methods is not None:"},{"line_number":52,"context_line":"            self.allowed_methods \u003d [method.strip().upper()"},{"line_number":53,"context_line":"                                    for method in allowed_methods.split(\u0027,\u0027)]"},{"line_number":54,"context_line":"        else:"},{"line_number":55,"context_line":"            self.allowed_methods \u003d [\u0027DELETE\u0027, \u0027PUT\u0027, \u0027HEAD\u0027, \u0027GET\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B8lk%3D","line":52,"updated":"2013-02-13 17:07:19.000000000","message":"Looks like no unit test exercises this branch (line 52).","commit_id":"49f0f79fe8a6a44dc77cb6ef2fe7dce8f9787b6e"},{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"04d833bd5c982350c64743e045eeb5e3d7fe8a60","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        self.logger \u003d get_logger(conf, log_route\u003d\u0027account-server\u0027)"},{"line_number":48,"context_line":"        self.root \u003d conf.get(\u0027devices\u0027, \u0027/srv/node\u0027)"},{"line_number":49,"context_line":"        self.mount_check \u003d config_true_value(conf.get(\u0027mount_check\u0027, \u0027true\u0027))"},{"line_number":50,"context_line":"        allowed_methods \u003d conf.get(\u0027allowed_methods\u0027)"},{"line_number":51,"context_line":"        if allowed_methods is not None:"},{"line_number":52,"context_line":"            self.allowed_methods \u003d [method.strip().upper()"},{"line_number":53,"context_line":"                                    for method in allowed_methods.split(\u0027,\u0027)]"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAOn%2F%2F3Nk%3D","line":50,"updated":"2013-04-16 21:23:56.000000000","message":"Can we make the defaults from line 55 below land as the defaults for this line, and then drop lines 54-56?","commit_id":"477b63511fb60a916afc7d7f822e7edd72be9cfa"},{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"0d9691900b1e3d0a9d1ced42c9f881c855530c11","unresolved":false,"context_lines":[{"line_number":339,"context_line":"                try:"},{"line_number":340,"context_line":"                    method \u003d getattr(self, req.method)"},{"line_number":341,"context_line":"                    getattr(method, \u0027publicly_accessible\u0027)"},{"line_number":342,"context_line":"                    if req.method not in self.allowed_methods:"},{"line_number":343,"context_line":"                        raise AttributeError(\u0027Not allowed method.\u0027)"},{"line_number":344,"context_line":"                except AttributeError:"},{"line_number":345,"context_line":"                    res \u003d HTTPMethodNotAllowed()"}],"source_content_type":"text/x-python","patch_set":30,"id":"AAAAOn%2F%2FUZ4%3D","line":342,"updated":"2013-05-14 20:14:01.000000000","message":"Food for thought for another commit perhaps: combine the allowed_methods with the @public decorator so that we can apply one decorator instead of adding this here?","commit_id":"ea7858176b00ab99c22b506a2658e8199cbec8cf"}],"swift/common/db_replicator.py":[{"author":{"_account_id":1216,"name":"gholt","email":"z-launchpad@brim.net","username":"gholt"},"change_message_id":"8e8559ece97678ebd51156e7d3deb95af16236d1","unresolved":false,"context_lines":[{"line_number":511,"context_line":"            return"},{"line_number":512,"context_line":"        for node in self.ring.devs:"},{"line_number":513,"context_line":"            if ((node and node[\u0027replication_ip\u0027] in ips and"},{"line_number":514,"context_line":"                 node[\u0027replication_port\u0027] \u003d\u003d self.port)):"},{"line_number":515,"context_line":"                if self.mount_check and not os.path.ismount("},{"line_number":516,"context_line":"                        os.path.join(self.root, node[\u0027device\u0027])):"},{"line_number":517,"context_line":"                    self.logger.warn("}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAOn%2F%2F2bk%3D","line":514,"updated":"2013-04-17 19:38:59.000000000","message":"I\u0027ve commented on someone else\u0027s code about this, so to be fair I must here. Even moreso here actually, since it has double useless parenthesis. ;)","commit_id":"22bb398cb415bdb6f98aa8ee7babceb306d4e110"}],"swift/common/ring/builder.py":[{"author":{"_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},"change_message_id":"666ac7bd9797f6a25944dcfd11cd8f73fa5cd67c","unresolved":false,"context_lines":[{"line_number":924,"context_line":"            search_value \u003d search_value[i:]"},{"line_number":925,"context_line":"        # replication parameters"},{"line_number":926,"context_line":"        if search_value.startswith(\u0027,\u0027):"},{"line_number":927,"context_line":"            search_value \u003d search_value[1:]"},{"line_number":928,"context_line":"            if len(search_value) and search_value[0].isdigit():"},{"line_number":929,"context_line":"                i \u003d 1"},{"line_number":930,"context_line":"                while (i \u003c len(search_value) and"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B8mo%3D","line":927,"updated":"2013-02-13 17:07:19.000000000","message":"Looks like lines 927 to 948 do not have unit test coverage?\n\n  swift.common.ring.builder                    446     41    91%   88-89, 105-116, 167, 384, 413, 436, 555, 571, 927-948, 964","commit_id":"49f0f79fe8a6a44dc77cb6ef2fe7dce8f9787b6e"},{"author":{"_account_id":1216,"name":"gholt","email":"z-launchpad@brim.net","username":"gholt"},"change_message_id":"8e8559ece97678ebd51156e7d3deb95af16236d1","unresolved":false,"context_lines":[{"line_number":1006,"context_line":""},{"line_number":1007,"context_line":"    A pair of replication parameters can be comma separated after"},{"line_number":1008,"context_line":"    \u003cip\u003e:\u003cport\u003e pair like this::"},{"line_number":1009,"context_line":""},{"line_number":1010,"context_line":"        \u003cip\u003e:\u003cport\u003e[R\u003creplication_ip\u003e:\u003creplication_port\u003e]"},{"line_number":1011,"context_line":""},{"line_number":1012,"context_line":"    Any part is optional, but you must include at least one part."}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAOn%2F%2F2bg%3D","line":1009,"updated":"2013-04-17 19:38:59.000000000","message":"Needs updated wording with the R separator change.","commit_id":"22bb398cb415bdb6f98aa8ee7babceb306d4e110"},{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"0d9691900b1e3d0a9d1ced42c9f881c855530c11","unresolved":false,"context_lines":[{"line_number":1080,"context_line":"                i +\u003d 1"},{"line_number":1081,"context_line":"            match.append((\u0027port\u0027, int(search_value[1:i])))"},{"line_number":1082,"context_line":"            search_value \u003d search_value[i:]"},{"line_number":1083,"context_line":"        # replication parameters"},{"line_number":1084,"context_line":"        if search_value.startswith(\u0027R\u0027):"},{"line_number":1085,"context_line":"            search_value \u003d search_value[1:]"},{"line_number":1086,"context_line":"            if len(search_value) and search_value[0].isdigit():"}],"source_content_type":"text/x-python","patch_set":30,"id":"AAAAOn%2F%2FUY8%3D","line":1083,"updated":"2013-05-14 20:14:01.000000000","message":"See also comment in ring builder for how to combine ... food for thought, perhaps a follow-on commit.","commit_id":"ea7858176b00ab99c22b506a2658e8199cbec8cf"}],"swift/common/utils.py":[{"author":{"_account_id":4108,"name":"David Hadas","email":"davidh@il.ibm.com","username":"david-hadas"},"change_message_id":"5dba62e069737f9b4538540cf5397bba48de7bb9","unresolved":false,"context_lines":[{"line_number":1616,"context_line":"        except StopIteration:"},{"line_number":1617,"context_line":"            return []"},{"line_number":1618,"context_line":""},{"line_number":1619,"context_line":""},{"line_number":1620,"context_line":"class InputProxy(object):"},{"line_number":1621,"context_line":"    \"\"\""},{"line_number":1622,"context_line":"    File-like object that counts bytes read."}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAN3%2F%2F3e8%3D","side":"PARENT","line":1619,"updated":"2013-03-08 08:07:08.000000000","message":"Why not make sure that you always have replication_ip and replication_node in the ring.\n\nWhen you read the device list, if there is no such param, simply set the replication_ip to equal ip and the replication_port to equal port - this will make the code more readable and will require less changes to the code overall - this would make this function and its usage unneeded.  \n\nThis could be a style issue - so up to you :)","commit_id":"7117b744cc5f67b48dac969d07c02b9c8954d466"}],"swift/container/server.py":[{"author":{"_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},"change_message_id":"666ac7bd9797f6a25944dcfd11cd8f73fa5cd67c","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        self.conn_timeout \u003d float(conf.get(\u0027conn_timeout\u0027, 0.5))"},{"line_number":57,"context_line":"        allowed_methods \u003d conf.get(\u0027allowed_methods\u0027)"},{"line_number":58,"context_line":"        if allowed_methods is not None:"},{"line_number":59,"context_line":"            self.allowed_methods \u003d [method.strip().upper()"},{"line_number":60,"context_line":"                                    for method in allowed_methods.split(\u0027,\u0027)]"},{"line_number":61,"context_line":"        else:"},{"line_number":62,"context_line":"            self.allowed_methods \u003d [\u0027DELETE\u0027, \u0027PUT\u0027, \u0027HEAD\u0027, \u0027GET\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B8lo%3D","line":59,"updated":"2013-02-13 17:07:19.000000000","message":"Looks like no unit test exercises this branch (line 59).","commit_id":"49f0f79fe8a6a44dc77cb6ef2fe7dce8f9787b6e"},{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"0d9691900b1e3d0a9d1ced42c9f881c855530c11","unresolved":false,"context_lines":[{"line_number":527,"context_line":"                try:"},{"line_number":528,"context_line":"                    method \u003d getattr(self, req.method)"},{"line_number":529,"context_line":"                    getattr(method, \u0027publicly_accessible\u0027)"},{"line_number":530,"context_line":"                    if req.method not in self.allowed_methods:"},{"line_number":531,"context_line":"                        raise AttributeError(\u0027Not allowed method.\u0027)"},{"line_number":532,"context_line":"                except AttributeError:"},{"line_number":533,"context_line":"                    res \u003d HTTPMethodNotAllowed()"}],"source_content_type":"text/x-python","patch_set":30,"id":"AAAAOn%2F%2FUZk%3D","line":530,"updated":"2013-05-14 20:14:01.000000000","message":"Same comment as in account ... combine the allowed_methods with the @public decorator so that we can apply one decorator instead of adding here (food for thought).","commit_id":"ea7858176b00ab99c22b506a2658e8199cbec8cf"}],"swift/obj/replicator.py":[{"author":{"_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},"change_message_id":"666ac7bd9797f6a25944dcfd11cd8f73fa5cd67c","unresolved":false,"context_lines":[{"line_number":419,"context_line":"                get_hashes, job[\u0027path\u0027],"},{"line_number":420,"context_line":"                do_listdir\u003d(self.replication_count % 10) \u003d\u003d 0,"},{"line_number":421,"context_line":"                reclaim_age\u003dself.reclaim_age)"},{"line_number":422,"context_line":"            self.suffix_hash +\u003d hashed"},{"line_number":423,"context_line":"            self.logger.update_stats(\u0027suffix.hashes\u0027, hashed)"},{"line_number":424,"context_line":"            attempts_left \u003d len(job[\u0027nodes\u0027])"},{"line_number":425,"context_line":"            nodes \u003d itertools.chain("}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B8mY%3D","line":422,"updated":"2013-02-13 17:07:19.000000000","message":"Hrm... lines 422 to 486 appear to not have unit test coverage:\n\n  swift.obj.replicator                         410    103    75%   69, 89, 104, 204-205, 287-290, 295-300, 302, 305, 326, 340-341, 377, 386, 389, 397-406, 422-486, 527-531, 540, 550-553, 570-571, 578, 599-600, 628-629, 631-633, 640-642, 665-680","commit_id":"49f0f79fe8a6a44dc77cb6ef2fe7dce8f9787b6e"}],"swift/obj/server.py":[{"author":{"_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},"change_message_id":"666ac7bd9797f6a25944dcfd11cd8f73fa5cd67c","unresolved":false,"context_lines":[{"line_number":414,"context_line":"        self.bytes_per_sync \u003d int(conf.get(\u0027mb_per_sync\u0027, 512)) * 1024 * 1024"},{"line_number":415,"context_line":"        allowed_methods \u003d conf.get(\u0027allowed_methods\u0027)"},{"line_number":416,"context_line":"        if allowed_methods is not None:"},{"line_number":417,"context_line":"            self.allowed_methods \u003d [method.strip().upper()"},{"line_number":418,"context_line":"                                    for method in allowed_methods.split(\u0027,\u0027)]"},{"line_number":419,"context_line":"        else:"},{"line_number":420,"context_line":"            self.allowed_methods \u003d [\u0027DELETE\u0027, \u0027PUT\u0027, \u0027HEAD\u0027, \u0027GET\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B8lw%3D","line":417,"updated":"2013-02-13 17:07:19.000000000","message":"Looks like no unit test exercises this branch? (line 417)","commit_id":"49f0f79fe8a6a44dc77cb6ef2fe7dce8f9787b6e"},{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"0d9691900b1e3d0a9d1ced42c9f881c855530c11","unresolved":false,"context_lines":[{"line_number":976,"context_line":"                try:"},{"line_number":977,"context_line":"                    method \u003d getattr(self, req.method)"},{"line_number":978,"context_line":"                    getattr(method, \u0027publicly_accessible\u0027)"},{"line_number":979,"context_line":"                    if req.method not in self.allowed_methods:"},{"line_number":980,"context_line":"                        raise AttributeError(\u0027Not allowed method.\u0027)"},{"line_number":981,"context_line":"                except AttributeError:"},{"line_number":982,"context_line":"                    res \u003d HTTPMethodNotAllowed()"}],"source_content_type":"text/x-python","patch_set":30,"id":"AAAAOn%2F%2FUZU%3D","line":979,"updated":"2013-05-14 20:14:01.000000000","message":"Same comment as account and container ...","commit_id":"ea7858176b00ab99c22b506a2658e8199cbec8cf"}]}
