)]}'
{"etc/swift.conf-sample":[{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"becf6c39fb7c8d5c67a832661917eea72794768d","unresolved":false,"context_lines":[{"line_number":19,"context_line":"# The \u0027type\u0027 element is optional and if not specified will default to"},{"line_number":20,"context_line":"# \u0027replication\u0027 and is important for some services, such as the replicator,"},{"line_number":21,"context_line":"# to understand how to process the data.  For example purposes, \u0027replication\u0027"},{"line_number":22,"context_line":"# is called out explcitly below."},{"line_number":23,"context_line":"#[storage-policy:0]"},{"line_number":24,"context_line":"#name \u003d chicken"},{"line_number":25,"context_line":"#type \u003d replication"}],"source_content_type":"application/octet-stream","patch_set":21,"id":"AAAAUH%2F%2BU0s%3D","line":22,"updated":"2014-01-28 21:56:54.000000000","message":"*explicitly","commit_id":"03ac09a80a846d841a0807d4aeb493aa427ac797"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"5ab87676e1796e793121c10eddbbd445200acd36","unresolved":false,"context_lines":[{"line_number":19,"context_line":"# The \u0027type\u0027 element is optional and if not specified will default to"},{"line_number":20,"context_line":"# \u0027replication\u0027 and is important for some services, such as the replicator,"},{"line_number":21,"context_line":"# to understand how to process the data.  For example purposes, \u0027replication\u0027"},{"line_number":22,"context_line":"# is called out explcitly below."},{"line_number":23,"context_line":"#[storage-policy:0]"},{"line_number":24,"context_line":"#name \u003d chicken"},{"line_number":25,"context_line":"#type \u003d replication"}],"source_content_type":"application/octet-stream","patch_set":21,"id":"AAAAUH%2F%2BOc4%3D","line":22,"in_reply_to":"AAAAUH%2F%2BU0s%3D","updated":"2014-01-28 22:16:41.000000000","message":"doh!","commit_id":"03ac09a80a846d841a0807d4aeb493aa427ac797"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"80698e9cd338349f7992cf610865cde925cdc6ae","unresolved":false,"context_lines":[{"line_number":22,"context_line":"# is called out explicitly below."},{"line_number":23,"context_line":"#[storage-policy:0]"},{"line_number":24,"context_line":"#name \u003d chicken"},{"line_number":25,"context_line":"#type \u003d replication"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"# the following declares a policy called \u0027turkey\u0027 and uses replication by"},{"line_number":28,"context_line":"# default, the number of replicas will be determined by how the ring is built."}],"source_content_type":"application/octet-stream","patch_set":23,"id":"AAAAUX%2F%2F%2BTg%3D","line":25,"updated":"2014-02-08 02:36:22.000000000","message":"I doubt that this knob a good idea. The ring itself determines if the policy is Reprication or EC, does it not? So, why add this, in the big view (I\u0027m sure there\u0027s a tactical reason).","commit_id":"49bc31c1ea34efdd4290369f8422933be540f228"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"36031cdef720012eaf9c6f1b2d1d2143dd0cab50","unresolved":false,"context_lines":[{"line_number":22,"context_line":"# is called out explicitly below."},{"line_number":23,"context_line":"#[storage-policy:0]"},{"line_number":24,"context_line":"#name \u003d chicken"},{"line_number":25,"context_line":"#type \u003d replication"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"# the following declares a policy called \u0027turkey\u0027 and uses replication by"},{"line_number":28,"context_line":"# default, the number of replicas will be determined by how the ring is built."}],"source_content_type":"application/octet-stream","patch_set":23,"id":"AAAAUX%2F%2Fv48%3D","line":25,"in_reply_to":"AAAAUX%2F%2F%2BLU%3D","updated":"2014-02-11 02:58:27.000000000","message":"I looked at the code as you suggested, and it looks trivial to refactor. That said, I don\u0027t think this is a showstopper. I\u0027ll just post a patch that adds type to rings and cross-checks it .get_object_ring()","commit_id":"49bc31c1ea34efdd4290369f8422933be540f228"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"f79cdec76a7d73a1b05b7d85b7a1a6892bea6208","unresolved":false,"context_lines":[{"line_number":22,"context_line":"# is called out explicitly below."},{"line_number":23,"context_line":"#[storage-policy:0]"},{"line_number":24,"context_line":"#name \u003d chicken"},{"line_number":25,"context_line":"#type \u003d replication"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"# the following declares a policy called \u0027turkey\u0027 and uses replication by"},{"line_number":28,"context_line":"# default, the number of replicas will be determined by how the ring is built."}],"source_content_type":"application/octet-stream","patch_set":23,"id":"AAAAUX%2F%2F%2BLU%3D","line":25,"in_reply_to":"AAAAUX%2F%2F%2BTg%3D","updated":"2014-02-08 04:02:52.000000000","message":"So for EC the ring doesn\u0027t change, there\u0027s just a larger number of replicas as far as its concerned.  The replica locations however no longer represent replicas, they represent locations for EC fragments.  Thus, the policy needs to tell the functional code, in this case the replicator, what do do with items in the directory for the policy in question as its very different for replicas versus EC.  For the IO path the same thing is needed as there\u0027s no indicator in the ring as to what to do with the nodes returned from it, the policy holds that information.  The IO path use of this type is seen in the pending patch by Tushar Gohad for the EC PUT path.  Check out the function where the type is used in this patch and you\u0027ll see precisely why its needed.","commit_id":"49bc31c1ea34efdd4290369f8422933be540f228"}],"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":"a10d348cb392c3e8ea7f46c59fa49a7b98388124","unresolved":false,"context_lines":[{"line_number":135,"context_line":"    \"\"\""},{"line_number":136,"context_line":"    policies \u003d []"},{"line_number":137,"context_line":"    names \u003d []"},{"line_number":138,"context_line":"    valid_types \u003d [\u0027replication\u0027]"},{"line_number":139,"context_line":"    need_default \u003d True"},{"line_number":140,"context_line":"    need_pol0 \u003d True"},{"line_number":141,"context_line":"    for section in conf.sections():"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAUH%2F%2Bndc%3D","line":138,"updated":"2014-01-23 21:03:56.000000000","message":"How does this get updated with other values than just \"replication\"?","commit_id":"03ac09a80a846d841a0807d4aeb493aa427ac797"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"92c32c31226f53035cfc93dce2af3b4f86262380","unresolved":false,"context_lines":[{"line_number":135,"context_line":"    \"\"\""},{"line_number":136,"context_line":"    policies \u003d []"},{"line_number":137,"context_line":"    names \u003d []"},{"line_number":138,"context_line":"    valid_types \u003d [\u0027replication\u0027]"},{"line_number":139,"context_line":"    need_default \u003d True"},{"line_number":140,"context_line":"    need_pol0 \u003d True"},{"line_number":141,"context_line":"    for section in conf.sections():"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAUH%2F%2BjGE%3D","line":138,"in_reply_to":"AAAAUH%2F%2Bndc%3D","updated":"2014-01-24 14:27:42.000000000","message":"when a developer adds a new storage policy type, like EC, that requires other code changes.  For usage models where someone is adding a new policy, like 2x in addition to 3x, they don\u0027t have to add anything here as the default is replication (they just update swift.conf).","commit_id":"03ac09a80a846d841a0807d4aeb493aa427ac797"}],"swift/obj/replicator.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"8be1ffaf248e163a1c87add190a09cd0c276cad2","unresolved":false,"context_lines":[{"line_number":388,"context_line":"                          if dev and dev[\u0027replication_ip\u0027] in ips and"},{"line_number":389,"context_line":"                          dev[\u0027replication_port\u0027] \u003d\u003d self.port]:"},{"line_number":390,"context_line":"            dev_path \u003d join(self.devices_dir, local_dev[\u0027device\u0027])"},{"line_number":391,"context_line":"            obj_path \u003d join(dev_path, \u0027objects\u0027)"},{"line_number":392,"context_line":"            tmp_path \u003d join(dev_path, \u0027tmp\u0027)"},{"line_number":393,"context_line":"            if self.mount_check and not os.path.ismount(dev_path):"},{"line_number":394,"context_line":"                self.logger.warn(_(\u0027%s is not mounted\u0027), local_dev[\u0027device\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FuGU%3D","side":"PARENT","line":391,"updated":"2013-10-29 23:04:06.000000000","message":"this needs to be objects\u003cPOLICY-IDX\u003e or something right?","commit_id":"5470bbeb46e6bebeb7d6a7ff47169a014ccca2e9"},{"author":{"_account_id":5189,"name":"Yuan Zhou","email":"dunk007@gmail.com","username":"yuan-zhou"},"change_message_id":"5c3611cbe3d2468d5a4518ce1dbc09bf5665bba1","unresolved":false,"context_lines":[{"line_number":235,"context_line":"                            conn \u003d http_connect("},{"line_number":236,"context_line":"                                node[\u0027replication_ip\u0027],"},{"line_number":237,"context_line":"                                node[\u0027replication_port\u0027],"},{"line_number":238,"context_line":"                                node[\u0027device\u0027], job[\u0027partition\u0027], \u0027REPLICATE\u0027,"},{"line_number":239,"context_line":"                                \u0027/\u0027 + \u0027-\u0027.join(suffixes), headers\u003dself.headers)"},{"line_number":240,"context_line":"                            conn.getresponse().read()"},{"line_number":241,"context_line":"                    responses.append(success)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2FQNY%3D","line":238,"updated":"2013-10-19 04:15:41.000000000","message":"this replicate request is sent to obj-server. We need to pass the POLICY_INDEX header here?","commit_id":"a34f4d016a7e73f69307e43bf04f9002a463664f"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"1d72c195e5dc8d6003c3b901c4c5569d5a9eefe2","unresolved":false,"context_lines":[{"line_number":235,"context_line":"                            conn \u003d http_connect("},{"line_number":236,"context_line":"                                node[\u0027replication_ip\u0027],"},{"line_number":237,"context_line":"                                node[\u0027replication_port\u0027],"},{"line_number":238,"context_line":"                                node[\u0027device\u0027], job[\u0027partition\u0027], \u0027REPLICATE\u0027,"},{"line_number":239,"context_line":"                                \u0027/\u0027 + \u0027-\u0027.join(suffixes), headers\u003dself.headers)"},{"line_number":240,"context_line":"                            conn.getresponse().read()"},{"line_number":241,"context_line":"                    responses.append(success)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2FPpM%3D","line":238,"in_reply_to":"AAAATH%2F%2FQNY%3D","updated":"2013-10-19 15:37:20.000000000","message":"I think you are right, thanks!  I need to look at this a bit closer though for my own understanding.","commit_id":"a34f4d016a7e73f69307e43bf04f9002a463664f"},{"author":{"_account_id":5189,"name":"Yuan Zhou","email":"dunk007@gmail.com","username":"yuan-zhou"},"change_message_id":"5c3611cbe3d2468d5a4518ce1dbc09bf5665bba1","unresolved":false,"context_lines":[{"line_number":285,"context_line":"                        resp \u003d http_connect("},{"line_number":286,"context_line":"                            node[\u0027replication_ip\u0027], node[\u0027replication_port\u0027],"},{"line_number":287,"context_line":"                            node[\u0027device\u0027], job[\u0027partition\u0027], \u0027REPLICATE\u0027,"},{"line_number":288,"context_line":"                            \u0027\u0027, headers\u003dself.headers).getresponse()"},{"line_number":289,"context_line":"                        if resp.status \u003d\u003d HTTP_INSUFFICIENT_STORAGE:"},{"line_number":290,"context_line":"                            self.logger.error(_(\u0027%(ip)s/%(device)s responded\u0027"},{"line_number":291,"context_line":"                                                \u0027 as unmounted\u0027), node)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2FQNU%3D","line":288,"updated":"2013-10-19 04:15:41.000000000","message":"ditto","commit_id":"a34f4d016a7e73f69307e43bf04f9002a463664f"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"1d72c195e5dc8d6003c3b901c4c5569d5a9eefe2","unresolved":false,"context_lines":[{"line_number":285,"context_line":"                        resp \u003d http_connect("},{"line_number":286,"context_line":"                            node[\u0027replication_ip\u0027], node[\u0027replication_port\u0027],"},{"line_number":287,"context_line":"                            node[\u0027device\u0027], job[\u0027partition\u0027], \u0027REPLICATE\u0027,"},{"line_number":288,"context_line":"                            \u0027\u0027, headers\u003dself.headers).getresponse()"},{"line_number":289,"context_line":"                        if resp.status \u003d\u003d HTTP_INSUFFICIENT_STORAGE:"},{"line_number":290,"context_line":"                            self.logger.error(_(\u0027%(ip)s/%(device)s responded\u0027"},{"line_number":291,"context_line":"                                                \u0027 as unmounted\u0027), node)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2FPpI%3D","line":288,"in_reply_to":"AAAATH%2F%2FQNU%3D","updated":"2013-10-19 15:37:20.000000000","message":"gotcha","commit_id":"a34f4d016a7e73f69307e43bf04f9002a463664f"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"1d72c195e5dc8d6003c3b901c4c5569d5a9eefe2","unresolved":false,"context_lines":[{"line_number":400,"context_line":"                self.kill_coros()"},{"line_number":401,"context_line":"            self.last_replication_count \u003d self.replication_count"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"    def proccess_repl(self, obj_ring, jobs, ips):"},{"line_number":404,"context_line":"        \"\"\""},{"line_number":405,"context_line":"        Helper funtion for collect_jobs to build jobs for replication"},{"line_number":406,"context_line":"        using replication style storage policy"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2FPo0%3D","line":403,"updated":"2013-10-19 15:37:20.000000000","message":"Yuan - does this seem like a reasonable strategy here?  To have a separate function per policy that handles what needs to be done for \"replication\" for that policy?  I was a little unsure about the approach","commit_id":"a34f4d016a7e73f69307e43bf04f9002a463664f"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"7c03b2e57727d6a19dc77c96476d1b746fb640ba","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        if not policy.object_ring:"},{"line_number":129,"context_line":"            policy.object_ring \u003d Ring(self.swift_dir,"},{"line_number":130,"context_line":"                                      ring_name\u003dpolicy.ring_name)"},{"line_number":131,"context_line":"        return policy.object_ring"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    def _rsync(self, args):"},{"line_number":134,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F8%2FQc%3D","line":131,"updated":"2013-12-18 01:37:00.000000000","message":"I sort of feel like this should be something on a StoragePolicyCollection somewhere; adding this would bring the total number to 3, and that seems like too many.\n\nHaving helpers on the objects that (basically) curry self.swift_dir onto the real method would probably be good for readability, though.","commit_id":"967c5b1f7ba51b7b64af248486985a0a0b2e61b2"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"c6ed0c3cef154cb4fef5dbc994dd8edef157fb1b","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        if not policy.object_ring:"},{"line_number":129,"context_line":"            policy.object_ring \u003d Ring(self.swift_dir,"},{"line_number":130,"context_line":"                                      ring_name\u003dpolicy.ring_name)"},{"line_number":131,"context_line":"        return policy.object_ring"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    def _rsync(self, args):"},{"line_number":134,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F85ks%3D","line":131,"in_reply_to":"AAAATn%2F8%2FQc%3D","updated":"2013-12-19 01:24:52.000000000","message":"on it, thanks!","commit_id":"967c5b1f7ba51b7b64af248486985a0a0b2e61b2"},{"author":{"_account_id":5189,"name":"Yuan Zhou","email":"dunk007@gmail.com","username":"yuan-zhou"},"change_message_id":"8649b98711aaf991751a74c8b5c471791bd20a87","unresolved":false,"context_lines":[{"line_number":238,"context_line":"            suffixes \u003d tpool.execute(tpool_get_suffixes, job[\u0027path\u0027])"},{"line_number":239,"context_line":"            if suffixes:"},{"line_number":240,"context_line":"                for node in job[\u0027nodes\u0027]:"},{"line_number":241,"context_line":"                    success \u003d self.sync(node, job, suffixes)"},{"line_number":242,"context_line":"                    if success:"},{"line_number":243,"context_line":"                        with Timeout(self.http_timeout):"},{"line_number":244,"context_line":"                            conn \u003d http_connect("}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAT3%2F%2F%2ByQ%3D","line":241,"updated":"2013-12-25 15:06:22.000000000","message":"Interesting, seems ssync already supports storage policy well with this patch.\nMy understanding is we don\u0027t need to modify ssync at all, if ssync \u003d rsync.","commit_id":"d8e6dc683ed906ad32af5ca62b173001d81f0b01"},{"author":{"_account_id":5189,"name":"Yuan Zhou","email":"dunk007@gmail.com","username":"yuan-zhou"},"change_message_id":"7341adad94e992c4f7a117f5a25324f9c9eb26e6","unresolved":false,"context_lines":[{"line_number":241,"context_line":"                                node[\u0027replication_ip\u0027],"},{"line_number":242,"context_line":"                                node[\u0027replication_port\u0027],"},{"line_number":243,"context_line":"                                node[\u0027device\u0027], job[\u0027partition\u0027], \u0027REPLICATE\u0027,"},{"line_number":244,"context_line":"                                \u0027/\u0027 + \u0027-\u0027.join(suffixes), headers\u003dself.headers)"},{"line_number":245,"context_line":"                            conn.getresponse().read()"},{"line_number":246,"context_line":"                    responses.append(success)"},{"line_number":247,"context_line":"            if self.handoff_delete:"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUH%2F%2F5cY%3D","line":244,"updated":"2014-01-07 05:48:09.000000000","message":"Are we missing the POLICY_INDEX header here? Since this replicate request will be handled object-server(obj/server.py:669) thus obj-server would read from \u0027objects-1\u0027 or \u0027objects-2\u0027 dir\n\nheaders[\u0027POLICY_INDEX\u0027] \u003d job[\u0027policy_idx\u0027]","commit_id":"8def56bc305b1a834c0591a072c28ec2f8e7ec06"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"708b299ff2f8021043e4e386314e9060bf71d849","unresolved":false,"context_lines":[{"line_number":241,"context_line":"                                node[\u0027replication_ip\u0027],"},{"line_number":242,"context_line":"                                node[\u0027replication_port\u0027],"},{"line_number":243,"context_line":"                                node[\u0027device\u0027], job[\u0027partition\u0027], \u0027REPLICATE\u0027,"},{"line_number":244,"context_line":"                                \u0027/\u0027 + \u0027-\u0027.join(suffixes), headers\u003dself.headers)"},{"line_number":245,"context_line":"                            conn.getresponse().read()"},{"line_number":246,"context_line":"                    responses.append(success)"},{"line_number":247,"context_line":"            if self.handoff_delete:"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUH%2F%2F2TY%3D","line":244,"in_reply_to":"AAAAUH%2F%2F5cY%3D","updated":"2014-01-07 18:00:59.000000000","message":"good catch Yuan, thanks","commit_id":"8def56bc305b1a834c0591a072c28ec2f8e7ec06"},{"author":{"_account_id":5189,"name":"Yuan Zhou","email":"dunk007@gmail.com","username":"yuan-zhou"},"change_message_id":"7341adad94e992c4f7a117f5a25324f9c9eb26e6","unresolved":false,"context_lines":[{"line_number":287,"context_line":"                attempts_left -\u003d 1"},{"line_number":288,"context_line":"                try:"},{"line_number":289,"context_line":"                    with Timeout(self.http_timeout):"},{"line_number":290,"context_line":"                        resp \u003d http_connect("},{"line_number":291,"context_line":"                            node[\u0027replication_ip\u0027], node[\u0027replication_port\u0027],"},{"line_number":292,"context_line":"                            node[\u0027device\u0027], job[\u0027partition\u0027], \u0027REPLICATE\u0027,"},{"line_number":293,"context_line":"                            \u0027\u0027, headers\u003dself.headers).getresponse()"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUH%2F%2F5cA%3D","line":290,"updated":"2014-01-07 05:48:09.000000000","message":"ditto","commit_id":"8def56bc305b1a834c0591a072c28ec2f8e7ec06"},{"author":{"_account_id":5189,"name":"Yuan Zhou","email":"dunk007@gmail.com","username":"yuan-zhou"},"change_message_id":"7341adad94e992c4f7a117f5a25324f9c9eb26e6","unresolved":false,"context_lines":[{"line_number":319,"context_line":"                                local_hash[suffix] !\u003d"},{"line_number":320,"context_line":"                                remote_hash.get(suffix, -1)]"},{"line_number":321,"context_line":"                    self.sync(node, job, suffixes)"},{"line_number":322,"context_line":"                    with Timeout(self.http_timeout):"},{"line_number":323,"context_line":"                        conn \u003d http_connect("},{"line_number":324,"context_line":"                            node[\u0027replication_ip\u0027], node[\u0027replication_port\u0027],"},{"line_number":325,"context_line":"                            node[\u0027device\u0027], job[\u0027partition\u0027], \u0027REPLICATE\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUH%2F%2F5b4%3D","line":322,"updated":"2014-01-07 05:48:09.000000000","message":"ditto","commit_id":"8def56bc305b1a834c0591a072c28ec2f8e7ec06"},{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"29b71e5804400b7b520584d446c47dabffb2c955","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        self.port \u003d int(conf.get(\u0027bind_port\u0027, 6000))"},{"line_number":66,"context_line":"        self.concurrency \u003d int(conf.get(\u0027concurrency\u0027, 1))"},{"line_number":67,"context_line":"        self.stats_interval \u003d int(conf.get(\u0027stats_interval\u0027, \u0027300\u0027))"},{"line_number":68,"context_line":"        self.policies \u003d POLICIES"},{"line_number":69,"context_line":"        self.ring_check_interval \u003d int(conf.get(\u0027ring_check_interval\u0027, 15))"},{"line_number":70,"context_line":"        self.next_check \u003d time.time() + self.ring_check_interval"},{"line_number":71,"context_line":"        self.reclaim_age \u003d int(conf.get(\u0027reclaim_age\u0027, 86400 * 7))"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAUH%2F%2FC5A%3D","line":68,"updated":"2014-01-18 00:01:10.000000000","message":"If policies is a singleton, do we need to keep a reference to it in the object?","commit_id":"4d7d4d8b6669f44a8d7577f26b213e77d4cdd8df"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"4348639cd48d237c63a47ade38b77374baee85df","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        self.port \u003d int(conf.get(\u0027bind_port\u0027, 6000))"},{"line_number":66,"context_line":"        self.concurrency \u003d int(conf.get(\u0027concurrency\u0027, 1))"},{"line_number":67,"context_line":"        self.stats_interval \u003d int(conf.get(\u0027stats_interval\u0027, \u0027300\u0027))"},{"line_number":68,"context_line":"        self.policies \u003d POLICIES"},{"line_number":69,"context_line":"        self.ring_check_interval \u003d int(conf.get(\u0027ring_check_interval\u0027, 15))"},{"line_number":70,"context_line":"        self.next_check \u003d time.time() + self.ring_check_interval"},{"line_number":71,"context_line":"        self.reclaim_age \u003d int(conf.get(\u0027reclaim_age\u0027, 86400 * 7))"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAUH%2F%2B5m0%3D","line":68,"in_reply_to":"AAAAUH%2F%2FC5A%3D","updated":"2014-01-20 22:52:53.000000000","message":"good question, I don\u0027t think so.  Let me wrap up the other services (re-base and add unit tests) and I\u0027ll make sure taking it out doesn\u0027t break something unexpectedly","commit_id":"4d7d4d8b6669f44a8d7577f26b213e77d4cdd8df"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"becf6c39fb7c8d5c67a832661917eea72794768d","unresolved":false,"context_lines":[{"line_number":406,"context_line":"                self.kill_coros()"},{"line_number":407,"context_line":"            self.last_replication_count \u003d self.replication_count"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"    def proccess_repl(self, policy, jobs, ips):"},{"line_number":410,"context_line":"        \"\"\""},{"line_number":411,"context_line":"        Helper funtion for collect_jobs to build jobs for replication"},{"line_number":412,"context_line":"        using replication style storage policy"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAUH%2F%2BUp0%3D","line":409,"updated":"2014-01-28 21:56:54.000000000","message":"*process","commit_id":"03ac09a80a846d841a0807d4aeb493aa427ac797"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"5ab87676e1796e793121c10eddbbd445200acd36","unresolved":false,"context_lines":[{"line_number":406,"context_line":"                self.kill_coros()"},{"line_number":407,"context_line":"            self.last_replication_count \u003d self.replication_count"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"    def proccess_repl(self, policy, jobs, ips):"},{"line_number":410,"context_line":"        \"\"\""},{"line_number":411,"context_line":"        Helper funtion for collect_jobs to build jobs for replication"},{"line_number":412,"context_line":"        using replication style storage policy"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAUH%2F%2BOco%3D","line":409,"in_reply_to":"AAAAUH%2F%2BUp0%3D","updated":"2014-01-28 22:16:41.000000000","message":"Done","commit_id":"03ac09a80a846d841a0807d4aeb493aa427ac797"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"becf6c39fb7c8d5c67a832661917eea72794768d","unresolved":false,"context_lines":[{"line_number":408,"context_line":""},{"line_number":409,"context_line":"    def proccess_repl(self, policy, jobs, ips):"},{"line_number":410,"context_line":"        \"\"\""},{"line_number":411,"context_line":"        Helper funtion for collect_jobs to build jobs for replication"},{"line_number":412,"context_line":"        using replication style storage policy"},{"line_number":413,"context_line":"        \"\"\""},{"line_number":414,"context_line":"        obj_ring \u003d self.get_object_ring(policy.idx)"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAUH%2F%2BUpw%3D","line":411,"updated":"2014-01-28 21:56:54.000000000","message":"*function","commit_id":"03ac09a80a846d841a0807d4aeb493aa427ac797"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"5ab87676e1796e793121c10eddbbd445200acd36","unresolved":false,"context_lines":[{"line_number":408,"context_line":""},{"line_number":409,"context_line":"    def proccess_repl(self, policy, jobs, ips):"},{"line_number":410,"context_line":"        \"\"\""},{"line_number":411,"context_line":"        Helper funtion for collect_jobs to build jobs for replication"},{"line_number":412,"context_line":"        using replication style storage policy"},{"line_number":413,"context_line":"        \"\"\""},{"line_number":414,"context_line":"        obj_ring \u003d self.get_object_ring(policy.idx)"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAUH%2F%2BOck%3D","line":411,"in_reply_to":"AAAAUH%2F%2BUpw%3D","updated":"2014-01-28 22:16:41.000000000","message":"Done","commit_id":"03ac09a80a846d841a0807d4aeb493aa427ac797"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"becf6c39fb7c8d5c67a832661917eea72794768d","unresolved":false,"context_lines":[{"line_number":466,"context_line":"        # loop through object ring files"},{"line_number":467,"context_line":"        for ring_name in [ring_name for ring_name in"},{"line_number":468,"context_line":"                          os.listdir(self.swift_dir)"},{"line_number":469,"context_line":"                          if ring_name[:6] \u003d\u003d base]:"},{"line_number":470,"context_line":"            # warn if the object ring file doesn\u0027t match with a policy"},{"line_number":471,"context_line":"            policy_idx \u003d 0"},{"line_number":472,"context_line":"            policy_type \u003d None"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAUH%2F%2BOjk%3D","line":469,"updated":"2014-01-28 21:56:54.000000000","message":"I think this needs to be more strict; things like \"object-server.conf\" will match here too.\n\nThere\u0027s a couple approaches possible here:\n\n1) just write a good strict matcher for object(-\\d+)?.ring.gz and use it\n\n2) loop over all configured policies (of type \"replication\", of course) and replicate those.\n\nI sort of like #2 here; if we\u0027re going to someday add the ability for policies to share rings, then just looking at the list of rings on disk won\u0027t be enough.\n\nThe downside of #2 is that, if you have objects-12.ring.gz but no policy using it, the replicator won\u0027t replicate objects in policy 12. IMO, that\u0027s an acceptable tradeoff, but YMMV.","commit_id":"03ac09a80a846d841a0807d4aeb493aa427ac797"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"5ab87676e1796e793121c10eddbbd445200acd36","unresolved":false,"context_lines":[{"line_number":466,"context_line":"        # loop through object ring files"},{"line_number":467,"context_line":"        for ring_name in [ring_name for ring_name in"},{"line_number":468,"context_line":"                          os.listdir(self.swift_dir)"},{"line_number":469,"context_line":"                          if ring_name[:6] \u003d\u003d base]:"},{"line_number":470,"context_line":"            # warn if the object ring file doesn\u0027t match with a policy"},{"line_number":471,"context_line":"            policy_idx \u003d 0"},{"line_number":472,"context_line":"            policy_type \u003d None"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAUH%2F%2BObg%3D","line":469,"in_reply_to":"AAAAUH%2F%2BOjk%3D","updated":"2014-01-28 22:16:41.000000000","message":"I actually had #2 implemented before and switched to looking for filenames to better match how we\u0027re doing things with the updater but honestly I like #2 better.  I too thought about a ring w/nobody using it but the implications there are (a) if nobody is really using it then nobody cares (b) if somebody really is using it then they\u0027ll get errors elsewhere for sure.  I\u0027ll switch it back to the way it was","commit_id":"03ac09a80a846d841a0807d4aeb493aa427ac797"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"becf6c39fb7c8d5c67a832661917eea72794768d","unresolved":false,"context_lines":[{"line_number":482,"context_line":"                                   \u0027valid policy\u0027) % dir)"},{"line_number":483,"context_line":"            if policy_type \u003d\u003d \u0027replication\u0027:"},{"line_number":484,"context_line":"                self.proccess_repl(policy, jobs, ips)"},{"line_number":485,"context_line":"            # add else conditions here for future policy types"},{"line_number":486,"context_line":"        random.shuffle(jobs)"},{"line_number":487,"context_line":"        if self.handoffs_first:"},{"line_number":488,"context_line":"            # Move the handoff parts to the front of the list"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAUH%2F%2BPM4%3D","line":485,"updated":"2014-01-28 21:56:54.000000000","message":"It might be nice to raise NotImplemented for other policy types here; that way, future developers will get a nice stack trace pointing them to the right spot to go work on.\n\nIt might also not be worth it. Something to think about, though.\n\n(Also if you take suggestion #2 from above, then this becomes irrelevant.)","commit_id":"03ac09a80a846d841a0807d4aeb493aa427ac797"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"5ab87676e1796e793121c10eddbbd445200acd36","unresolved":false,"context_lines":[{"line_number":482,"context_line":"                                   \u0027valid policy\u0027) % dir)"},{"line_number":483,"context_line":"            if policy_type \u003d\u003d \u0027replication\u0027:"},{"line_number":484,"context_line":"                self.proccess_repl(policy, jobs, ips)"},{"line_number":485,"context_line":"            # add else conditions here for future policy types"},{"line_number":486,"context_line":"        random.shuffle(jobs)"},{"line_number":487,"context_line":"        if self.handoffs_first:"},{"line_number":488,"context_line":"            # Move the handoff parts to the front of the list"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAUH%2F%2BObk%3D","line":485,"in_reply_to":"AAAAUH%2F%2BPM4%3D","updated":"2014-01-28 22:16:41.000000000","message":"Done","commit_id":"03ac09a80a846d841a0807d4aeb493aa427ac797"}]}
