)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"d7f01cc348b07ea70eec82185c823887a0da324e","unresolved":false,"context_lines":[{"line_number":12,"context_line":"Updating network driver to clear device id\u0027s from ports during failover"},{"line_number":13,"context_line":"Updating tests for new functionality"},{"line_number":14,"context_line":"Quickly fixed an error in the compute driver where delete wanted a compute id but called it amphora id"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: Ic0d3f2b9a48ebf66df78e1ef98aef92ad7ee5057"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":45,"id":"da20952f_be48dc5c","line":15,"updated":"2015-08-27 09:00:03.000000000","message":"ill be harping on this for a lot of commit messages, but these types of commit messages don\u0027t explain a lot.  There are some lines that do have decent explanations and I would keep them but lose the line by line.  Since there isn\u0027t a blueprint to this, a more detailed commit message would be great.  However, in the interest of time its not a big deal but I\u0027d like to see all of us get better at commit messages.  It helps reviewers out by knowing what is giong on.","commit_id":"a21ae3870fb3007d4c162b35ec607ac49993b3d2"}],"octavia/amphorae/drivers/haproxy/ssh_driver.py":[{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"d7f01cc348b07ea70eec82185c823887a0da324e","unresolved":false,"context_lines":[{"line_number":182,"context_line":"                  load_balancer.id)"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        for amp in load_balancer.amphorae:"},{"line_number":185,"context_line":"            if amp.status !\u003d constants.DELETED:"},{"line_number":186,"context_line":"                # Connect to amphora"},{"line_number":187,"context_line":"                self._connect(hostname\u003damp.lb_network_ip)"},{"line_number":188,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"da20952f_9f69608e","line":185,"updated":"2015-08-27 09:00:03.000000000","message":"this means this kind of change is going to be needed in the rest driver.  i wonder if there\u0027s a way for the population of load_balancer to only grab amphorae that are not DELETED.  That way, it wouldn\u0027t require a change in both.  However, that could have effects elsewhere.","commit_id":"a21ae3870fb3007d4c162b35ec607ac49993b3d2"},{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"55ed83bde1a8af41956ad117ff10daae4f4e0752","unresolved":false,"context_lines":[{"line_number":182,"context_line":"                  load_balancer.id)"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        for amp in load_balancer.amphorae:"},{"line_number":185,"context_line":"            if amp.status !\u003d constants.DELETED:"},{"line_number":186,"context_line":"                # Connect to amphora"},{"line_number":187,"context_line":"                self._connect(hostname\u003damp.lb_network_ip)"},{"line_number":188,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"da20952f_c1859aad","line":185,"in_reply_to":"da20952f_9f69608e","updated":"2015-08-27 16:59:19.000000000","message":"At the flow layer we may be able to do default of all amphora, and then add an argument for optional \"non-deleted\" amphora, maybe?","commit_id":"a21ae3870fb3007d4c162b35ec607ac49993b3d2"}],"octavia/compute/drivers/nova_driver.py":[{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"d7f01cc348b07ea70eec82185c823887a0da324e","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            if network_ids:"},{"line_number":71,"context_line":"                nics.extend([{\"net-id\": net_id} for net_id in network_ids])"},{"line_number":72,"context_line":"            if port_ids:"},{"line_number":73,"context_line":"                nics.extend([{\"port-id\": port_id} for port_id in port_ids])"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"            amphora \u003d self.manager.create("},{"line_number":76,"context_line":"                name\u003dname, image\u003dimage_id, flavor\u003damphora_flavor,"}],"source_content_type":"text/x-python","patch_set":45,"id":"da20952f_1f879010","line":73,"updated":"2015-08-27 09:00:03.000000000","message":"port_ids and network_ids default to None.  if they\u0027re not passed in this will fail.  You should do:\n\nport_ids \u003d port_ids or []\nnetwork_ids \u003d network_ids or []\n\nnetwork_ids always had this problem, but I don\u0027t think we ever ran into it because we were always passing in a list.  Later in this code, there is the possibility you do pass in None for port_ids.","commit_id":"a21ae3870fb3007d4c162b35ec607ac49993b3d2"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"8c061c195e68b8a103f06403e9e64625c6a01080","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        try:"},{"line_number":69,"context_line":"            network_ids \u003d network_ids or []"},{"line_number":70,"context_line":"            port_ids \u003d port_ids or []"},{"line_number":71,"context_line":"            nics \u003d []"},{"line_number":72,"context_line":"            if network_ids:"},{"line_number":73,"context_line":"                nics.extend([{\"net-id\": net_id} for net_id in network_ids])"}],"source_content_type":"text/x-python","patch_set":47,"id":"da20952f_f2ddc9e0","line":70,"updated":"2015-08-28 20:09:47.000000000","message":"should add this above the try, no reason for it to be in the try","commit_id":"577467646929b14f8ac0e63f6a5d1c52dd8a66c1"}],"octavia/controller/worker/controller_worker.py":[{"author":{"_account_id":10477,"name":"min wang","email":"swiftwangster@gmail.com","username":"minwang"},"change_message_id":"00641f7fe326fffb6b098f32238c7a9d8368842f","unresolved":false,"context_lines":[{"line_number":473,"context_line":"        failover_amphora_tf \u003d self._taskflow_load("},{"line_number":474,"context_line":"            self._amphora_flows.get_failover_flow(),"},{"line_number":475,"context_line":"            store\u003d{constants.AMPHORA: amp,"},{"line_number":476,"context_line":"                   constants.LOADBALANCER_ID: amp.load_balancer_id})"},{"line_number":477,"context_line":"        with tf_logging.DynamicLoggingListener(failover_amphora_tf,"},{"line_number":478,"context_line":"                                               log\u003dLOG):"},{"line_number":479,"context_line":"            failover_amphora_tf.run()"}],"source_content_type":"text/x-python","patch_set":41,"id":"fa1b9901_53015005","line":476,"updated":"2015-08-24 17:14:23.000000000","message":"Don\u0027t forget to update the busy flag in the DB to false after the failover is complete.","commit_id":"79f2a4520fa4667bb2ab40f88803d7e5914121c3"},{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"00f5a33109cdf251e36f970d06336cb7518be153","unresolved":false,"context_lines":[{"line_number":473,"context_line":"        failover_amphora_tf \u003d self._taskflow_load("},{"line_number":474,"context_line":"            self._amphora_flows.get_failover_flow(),"},{"line_number":475,"context_line":"            store\u003d{constants.AMPHORA: amp,"},{"line_number":476,"context_line":"                   constants.LOADBALANCER_ID: amp.load_balancer_id})"},{"line_number":477,"context_line":"        with tf_logging.DynamicLoggingListener(failover_amphora_tf,"},{"line_number":478,"context_line":"                                               log\u003dLOG):"},{"line_number":479,"context_line":"            failover_amphora_tf.run()"}],"source_content_type":"text/x-python","patch_set":41,"id":"fa1b9901_54d91d82","line":476,"in_reply_to":"fa1b9901_53015005","updated":"2015-08-25 07:19:55.000000000","message":"I don\u0027t think that\u0027s accurate.  Whatever mechanism reads from the DB to begin the failover process would mark it False after requesting the failover operations.  Otherwise its possible multiple failover operations could be requested before the first failover attempt can complete.","commit_id":"79f2a4520fa4667bb2ab40f88803d7e5914121c3"}],"octavia/controller/worker/flows/amphora_flows.py":[{"author":{"_account_id":17419,"name":"Banashankar k","email":"banveerad@gmail.com","username":"banveerad"},"change_message_id":"651e03b0a0fcf4ae9d5e92d7f7286242fddc8d21","unresolved":false,"context_lines":[{"line_number":155,"context_line":""},{"line_number":156,"context_line":"        return delete_amphora_flow"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def get_failover_flow(self):"},{"line_number":159,"context_line":"        \"\"\"Creates a flow to failover a stale amphora"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        :returns: The flow for amphora failover"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a50d1a3_b41fa608","line":158,"updated":"2015-07-24 18:42:30.000000000","message":"looks like code is almost repeated from get_create_amphora_for_lb_flow  for creating of the amphora.","commit_id":"03b879cac10c1acea2e2b7a9b215fa781b03242a"},{"author":{"_account_id":17419,"name":"Banashankar k","email":"banveerad@gmail.com","username":"banveerad"},"change_message_id":"ae33a85839b85a7490dd955e9f2b00a4c7250a3a","unresolved":false,"context_lines":[{"line_number":173,"context_line":"            requires\u003dconstants.AMPHORA_ID))"},{"line_number":174,"context_line":"        failover_amphora_flow.add(database_tasks.MarkAmphoraDeletedInDB("},{"line_number":175,"context_line":"            requires\u003dconstants.AMPHORA))"},{"line_number":176,"context_line":"        failover_amphora_flow.add(database_tasks.CreateAmphoraInDB("},{"line_number":177,"context_line":"                                  provides\u003dconstants.AMPHORA_ID))"},{"line_number":178,"context_line":"        if self.REST_AMPHORA_DRIVER:"},{"line_number":179,"context_line":"            failover_amphora_flow.add(cert_task.GenerateServerPEMTask("}],"source_content_type":"text/x-python","patch_set":17,"id":"3a50d1a3_299d9f65","line":176,"updated":"2015-07-29 19:17:01.000000000","message":"Below code is almost same as get_create_amphora_for_lb_flow","commit_id":"5eb55bf5117955554656315ab2a4138c20625ee5"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"135c51a7a0e938c769a75c89f8d66869f561dad6","unresolved":false,"context_lines":[{"line_number":172,"context_line":"            requires\u003dconstants.AMPHORA))"},{"line_number":173,"context_line":"        failover_amphora_flow.add(database_tasks.MarkAmphoraDeletedInDB("},{"line_number":174,"context_line":"            requires\u003dconstants.AMPHORA))"},{"line_number":175,"context_line":"        failover_amphora_flow.add(database_tasks.CreateAmphoraInDB("},{"line_number":176,"context_line":"                                  provides\u003dconstants.AMPHORA_ID))"},{"line_number":177,"context_line":"        failover_amphora_flow.add("},{"line_number":178,"context_line":"            database_tasks.GetUpdatedFailoverAmpNetworkDetailsAsList("}],"source_content_type":"text/x-python","patch_set":30,"id":"1a4dcd0f_5baed62e","line":175,"updated":"2015-08-12 19:40:17.000000000","message":"We need to use spare Amphora if they are available.\nUse the MapLoadbalancerToAmphora task like create_load_balancer()\n\nIt would be good if we could leverage the existing flows for creating amphora.","commit_id":"fdd1b242fd68f19b888ac9064243e5810a6b790b"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"345855d7d083f6dc20ff502cdaa6346cc4cc906a","unresolved":false,"context_lines":[{"line_number":208,"context_line":"        failover_amphora_flow.add(amphora_driver_tasks.AmphoraFinalize("},{"line_number":209,"context_line":"            rebind\u003d{constants.AMPHORA: constants.FAILOVER_AMPHORA},"},{"line_number":210,"context_line":"            requires\u003dconstants.AMPHORA))"},{"line_number":211,"context_line":"        failover_amphora_flow.add(database_tasks.UpdateAmphoraVIPData("},{"line_number":212,"context_line":"            requires\u003dconstants.AMPS_DATA))"},{"line_number":213,"context_line":"        failover_amphora_flow.add(database_tasks.MarkAmphoraAllocatedInDB("},{"line_number":214,"context_line":"            rebind\u003d{constants.AMPHORA: constants.FAILOVER_AMPHORA},"}],"source_content_type":"text/x-python","patch_set":30,"id":"1a4dcd0f_3e33ae63","line":211,"updated":"2015-08-13 00:46:04.000000000","message":"The networking sub flow needs to run here.  The amphora plug vip call is not being made for example.  (tested a failover with Min\u0027s code.  It booted the amp correctly, but the routing table is not present on the amp as the api call was not made)","commit_id":"fdd1b242fd68f19b888ac9064243e5810a6b790b"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"d7f01cc348b07ea70eec82185c823887a0da324e","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        failover_amphora_flow.add(database_tasks.UpdateAmphoraVIPData("},{"line_number":215,"context_line":"            requires\u003dconstants.AMPS_DATA))"},{"line_number":216,"context_line":"        failover_amphora_flow.add(database_tasks.ReloadLoadBalancer("},{"line_number":217,"context_line":"            name\u003dconstants.RELOAD_LB_AFTER_PLUG_VIP,"},{"line_number":218,"context_line":"            requires\u003dconstants.LOADBALANCER_ID,"},{"line_number":219,"context_line":"            provides\u003dconstants.LOADBALANCER))"},{"line_number":220,"context_line":"        failover_amphora_flow.add(network_tasks.GetAmphoraeNetworkConfigs("}],"source_content_type":"text/x-python","patch_set":45,"id":"da20952f_5fd8a853","line":217,"updated":"2015-08-27 09:00:03.000000000","message":"not the right name for this, since its not happening after a plug vip.","commit_id":"a21ae3870fb3007d4c162b35ec607ac49993b3d2"},{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"55ed83bde1a8af41956ad117ff10daae4f4e0752","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        failover_amphora_flow.add(database_tasks.UpdateAmphoraVIPData("},{"line_number":215,"context_line":"            requires\u003dconstants.AMPS_DATA))"},{"line_number":216,"context_line":"        failover_amphora_flow.add(database_tasks.ReloadLoadBalancer("},{"line_number":217,"context_line":"            name\u003dconstants.RELOAD_LB_AFTER_PLUG_VIP,"},{"line_number":218,"context_line":"            requires\u003dconstants.LOADBALANCER_ID,"},{"line_number":219,"context_line":"            provides\u003dconstants.LOADBALANCER))"},{"line_number":220,"context_line":"        failover_amphora_flow.add(network_tasks.GetAmphoraeNetworkConfigs("}],"source_content_type":"text/x-python","patch_set":45,"id":"da20952f_4478b88f","line":217,"in_reply_to":"da20952f_5fd8a853","updated":"2015-08-27 16:59:19.000000000","message":"This is copy/paste fail.  I\u0027ll remove name.","commit_id":"a21ae3870fb3007d4c162b35ec607ac49993b3d2"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"46c9b6f3da260c3270f4430537fe0ea4e547f599","unresolved":false,"context_lines":[{"line_number":230,"context_line":"                      constants.AMPHORAE_NETWORK_CONFIG)))"},{"line_number":231,"context_line":"        failover_amphora_flow.add(database_tasks.MarkAmphoraAllocatedInDB("},{"line_number":232,"context_line":"            rebind\u003d{constants.AMPHORA: constants.FAILOVER_AMPHORA},"},{"line_number":233,"context_line":"            requires\u003d(constants.AMPHORA, constants.LOADBALANCER_ID)))"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"        return failover_amphora_flow"}],"source_content_type":"text/x-python","patch_set":49,"id":"da20952f_c475c432","line":233,"updated":"2015-09-02 03:52:50.000000000","message":"we need to have a task here to call the start method, and a task that loops through all the member networks and calls the amphora_driver.post_network_plug method.","commit_id":"96405c589f614267056017c610f50c83cfe947b7"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"d169989560de74ca8ebd85422e2d5c6adb7ed241","unresolved":false,"context_lines":[{"line_number":230,"context_line":"                      constants.AMPHORAE_NETWORK_CONFIG)))"},{"line_number":231,"context_line":"        failover_amphora_flow.add(database_tasks.MarkAmphoraAllocatedInDB("},{"line_number":232,"context_line":"            rebind\u003d{constants.AMPHORA: constants.FAILOVER_AMPHORA},"},{"line_number":233,"context_line":"            requires\u003d(constants.AMPHORA, constants.LOADBALANCER_ID)))"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"        return failover_amphora_flow"}],"source_content_type":"text/x-python","patch_set":49,"id":"da20952f_d4c33189","line":233,"in_reply_to":"da20952f_c475c432","updated":"2015-09-02 06:52:25.000000000","message":"might be more readable if this was broken up into sub flows as well, decomposing it a bit.  RIght now its just a huge wall of text that isn\u0027t the easiest to follow.  Then again taskflow\u0027s structure isn\u0027t easily readable either, but this would make it more so.","commit_id":"96405c589f614267056017c610f50c83cfe947b7"}],"octavia/controller/worker/tasks/compute_tasks.py":[{"author":{"_account_id":17419,"name":"Banashankar k","email":"banveerad@gmail.com","username":"banveerad"},"change_message_id":"651e03b0a0fcf4ae9d5e92d7f7286242fddc8d21","unresolved":false,"context_lines":[{"line_number":96,"context_line":""},{"line_number":97,"context_line":"class CertComputeCreate(ComputeCreate):"},{"line_number":98,"context_line":"    def execute(self, amphora_id, server_pem\u003dNone):"},{"line_number":99,"context_line":"        \"\"\"Create an amphora"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        :returns: an amphora"},{"line_number":102,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"3a50d1a3_14869a13","line":99,"updated":"2015-07-24 18:42:30.000000000","message":"wrong comments?","commit_id":"03b879cac10c1acea2e2b7a9b215fa781b03242a"},{"author":{"_account_id":17419,"name":"Banashankar k","email":"banveerad@gmail.com","username":"banveerad"},"change_message_id":"651e03b0a0fcf4ae9d5e92d7f7286242fddc8d21","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        with open(CONF.controller_worker.client_ca, \u0027r\u0027) as client_ca:"},{"line_number":106,"context_line":"            config_drive_files \u003d {"},{"line_number":107,"context_line":"                # \u0027/etc/octavia/octavia.conf\u0027"},{"line_number":108,"context_line":"                \u0027/etc/octavia/certs/server.pem\u0027: server_pem,"},{"line_number":109,"context_line":"                \u0027/etc/octavia/certs/client_ca.pem\u0027: client_ca}"},{"line_number":110,"context_line":"            return super(CertComputeCreate, self).execute("},{"line_number":111,"context_line":"                amphora_id, config_drive_files\u003dconfig_drive_files)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a50d1a3_d47352e6","line":108,"updated":"2015-07-24 18:42:30.000000000","message":"Read the file location from the config file from file?.","commit_id":"03b879cac10c1acea2e2b7a9b215fa781b03242a"},{"author":{"_account_id":17419,"name":"Banashankar k","email":"banveerad@gmail.com","username":"banveerad"},"change_message_id":"ae33a85839b85a7490dd955e9f2b00a4c7250a3a","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        with open(CONF.controller_worker.client_ca, \u0027r\u0027) as client_ca:"},{"line_number":106,"context_line":"            config_drive_files \u003d {"},{"line_number":107,"context_line":"                # \u0027/etc/octavia/octavia.conf\u0027"},{"line_number":108,"context_line":"                \u0027/etc/octavia/certs/server.pem\u0027: server_pem,"},{"line_number":109,"context_line":"                \u0027/etc/octavia/certs/client_ca.pem\u0027: client_ca}"},{"line_number":110,"context_line":"            return super(CertComputeCreate, self).execute("},{"line_number":111,"context_line":"                amphora_id, config_drive_files\u003dconfig_drive_files)"}],"source_content_type":"text/x-python","patch_set":17,"id":"3a50d1a3_29ab5f76","line":108,"updated":"2015-07-29 19:17:01.000000000","message":"read the location string from config ?","commit_id":"5eb55bf5117955554656315ab2a4138c20625ee5"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"135c51a7a0e938c769a75c89f8d66869f561dad6","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"class CertComputeCreate(ComputeCreate):"},{"line_number":98,"context_line":"    def execute(self, amphora_id, server_pem\u003dNone):"},{"line_number":99,"context_line":"        \"\"\"Create an amphora"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        :returns: an amphora"}],"source_content_type":"text/x-python","patch_set":30,"id":"1a4dcd0f_761e4960","line":98,"updated":"2015-08-12 19:40:17.000000000","message":"We want to allow one way authentication?","commit_id":"fdd1b242fd68f19b888ac9064243e5810a6b790b"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"d7f01cc348b07ea70eec82185c823887a0da324e","unresolved":false,"context_lines":[{"line_number":63,"context_line":"                key_name\u003dCONF.controller_worker.amp_ssh_key_name,"},{"line_number":64,"context_line":"                sec_groups\u003dCONF.controller_worker.amp_secgroup_list,"},{"line_number":65,"context_line":"                network_ids\u003d[CONF.controller_worker.amp_network],"},{"line_number":66,"context_line":"                port_ids\u003d[port.id for port in ports] if ports else None,"},{"line_number":67,"context_line":"                config_drive_files\u003dconfig_drive_files)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"            LOG.debug(\"Server created with id: %s for amphora id: %s\" %"}],"source_content_type":"text/x-python","patch_set":45,"id":"da20952f_9f73a04d","line":66,"updated":"2015-08-27 09:00:03.000000000","message":"else []\n\nthis way the assumption that port_ids is iterable doesn\u0027t bite us.\n\nThis also has the issue if ports is None, this will fail.  should probably do the same ports \u003d ports or []","commit_id":"a21ae3870fb3007d4c162b35ec607ac49993b3d2"},{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"55ed83bde1a8af41956ad117ff10daae4f4e0752","unresolved":false,"context_lines":[{"line_number":63,"context_line":"                key_name\u003dCONF.controller_worker.amp_ssh_key_name,"},{"line_number":64,"context_line":"                sec_groups\u003dCONF.controller_worker.amp_secgroup_list,"},{"line_number":65,"context_line":"                network_ids\u003d[CONF.controller_worker.amp_network],"},{"line_number":66,"context_line":"                port_ids\u003d[port.id for port in ports] if ports else None,"},{"line_number":67,"context_line":"                config_drive_files\u003dconfig_drive_files)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"            LOG.debug(\"Server created with id: %s for amphora id: %s\" %"}],"source_content_type":"text/x-python","patch_set":45,"id":"da20952f_449f58b4","line":66,"in_reply_to":"da20952f_9f73a04d","updated":"2015-08-27 16:59:19.000000000","message":"Gotcha","commit_id":"a21ae3870fb3007d4c162b35ec607ac49993b3d2"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"d7f01cc348b07ea70eec82185c823887a0da324e","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"class CertComputeCreate(ComputeCreate):"},{"line_number":98,"context_line":"    def execute(self, amphora_id, server_pem\u003dNone):"},{"line_number":99,"context_line":"        \"\"\"Create an amphora"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        :returns: an amphora"}],"source_content_type":"text/x-python","patch_set":45,"id":"da20952f_dfa03893","line":98,"updated":"2015-08-27 09:00:03.000000000","message":"why this change?","commit_id":"a21ae3870fb3007d4c162b35ec607ac49993b3d2"},{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"55ed83bde1a8af41956ad117ff10daae4f4e0752","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"class CertComputeCreate(ComputeCreate):"},{"line_number":98,"context_line":"    def execute(self, amphora_id, server_pem\u003dNone):"},{"line_number":99,"context_line":"        \"\"\"Create an amphora"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        :returns: an amphora"}],"source_content_type":"text/x-python","patch_set":45,"id":"da20952f_a497548f","line":98,"in_reply_to":"da20952f_dfa03893","updated":"2015-08-27 16:59:19.000000000","message":"Honestly, I don\u0027t remember... I\u0027ll remove it and retest to see if anything breaks...","commit_id":"a21ae3870fb3007d4c162b35ec607ac49993b3d2"}],"octavia/controller/worker/tasks/database_tasks.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"135c51a7a0e938c769a75c89f8d66869f561dad6","unresolved":false,"context_lines":[{"line_number":815,"context_line":"                              enabled\u003d0)"},{"line_number":816,"context_line":""},{"line_number":817,"context_line":""},{"line_number":818,"context_line":"class GetUpdatedFailoverAmpNetworkDetailsAsList(BaseDatabaseTask):"},{"line_number":819,"context_line":"    \"\"\"Task to retrieve amphora network details.\"\"\""},{"line_number":820,"context_line":""},{"line_number":821,"context_line":"    def execute(self, amphora_id, amphora):"}],"source_content_type":"text/x-python","patch_set":30,"id":"1a4dcd0f_d6c15de5","line":818,"updated":"2015-08-12 19:40:17.000000000","message":"Unit test needed","commit_id":"fdd1b242fd68f19b888ac9064243e5810a6b790b"}],"octavia/controller/worker/tasks/network_tasks.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"135c51a7a0e938c769a75c89f8d66869f561dad6","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        except Exception as e:"},{"line_number":268,"context_line":"            LOG.error(_LE(\"Unable to unplug vip from load balancer\""},{"line_number":269,"context_line":"                          \"{id}s: exception: {ex}s\").format(id\u003dloadbalancer.id,"},{"line_number":270,"context_line":"                                                            ex\u003de.message))"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"class AllocateVIP(BaseNetworkTask):"}],"source_content_type":"text/x-python","patch_set":30,"id":"1a4dcd0f_96cbd5a3","line":270,"updated":"2015-08-12 19:40:17.000000000","message":"The old code matches the guidelines:\nhttp://docs.openstack.org/developer/oslo.i18n/guidelines.html#adding-variables-to-translated-messages\nWhy the change?","commit_id":"fdd1b242fd68f19b888ac9064243e5810a6b790b"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"6cf2d0e3ab46e8bc724052772561336bee967381","unresolved":false,"context_lines":[{"line_number":266,"context_line":"            self.network_driver.unplug_vip(loadbalancer, loadbalancer.vip)"},{"line_number":267,"context_line":"        except Exception as e:"},{"line_number":268,"context_line":"            LOG.error(_LE(\"Unable to unplug vip from load balancer\""},{"line_number":269,"context_line":"                          \"{id}s: exception: {ex}s\").format(id\u003dloadbalancer.id,"},{"line_number":270,"context_line":"                                                            ex\u003de.message))"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":""}],"source_content_type":"text/x-python","patch_set":49,"id":"da20952f_86803d8d","line":269,"updated":"2015-09-01 22:37:12.000000000","message":"When you converted this from substitution to format() you left the \"s\" after the brackets, which is not used with format() notation. This will produce output like:\n\n12345s: exception: Something went wrong.s","commit_id":"96405c589f614267056017c610f50c83cfe947b7"}],"octavia/network/base.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"135c51a7a0e938c769a75c89f8d66869f561dad6","unresolved":false,"context_lines":[{"line_number":221,"context_line":""},{"line_number":222,"context_line":"        :param amphora: amphora object to failover"},{"line_number":223,"context_line":"        :return: None"},{"line_number":224,"context_line":"        :raises: PortNotFound"},{"line_number":225,"context_line":"        \"\"\""},{"line_number":226,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":30,"id":"1a4dcd0f_b6a371b1","line":224,"updated":"2015-08-12 19:40:17.000000000","message":"get_plugged_networks can raise  NetworkException","commit_id":"fdd1b242fd68f19b888ac9064243e5810a6b790b"}],"octavia/network/drivers/neutron/allowed_address_pairs.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"135c51a7a0e938c769a75c89f8d66869f561dad6","unresolved":false,"context_lines":[{"line_number":437,"context_line":"            LOG.exception(message)"},{"line_number":438,"context_line":"            raise base.NetworkException(message)"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"    def failover_preparation(self, amphora):"},{"line_number":441,"context_line":"        interfaces \u003d self.get_plugged_networks(compute_id\u003damphora.compute_id)"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"        ports \u003d []"}],"source_content_type":"text/x-python","patch_set":30,"id":"1a4dcd0f_768089f7","line":440,"updated":"2015-08-12 19:40:17.000000000","message":"Needs docstrings.  (As does the whole file)","commit_id":"fdd1b242fd68f19b888ac9064243e5810a6b790b"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"d7f01cc348b07ea70eec82185c823887a0da324e","unresolved":false,"context_lines":[{"line_number":303,"context_line":"        sec_grp \u003d self._get_lb_security_group(load_balancer.id)"},{"line_number":304,"context_line":"        self._update_security_group_rules(load_balancer, sec_grp.get(\u0027id\u0027))"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"    def failover_preparation(self, amphora):"},{"line_number":307,"context_line":"        interfaces \u003d self.get_plugged_networks(compute_id\u003damphora.compute_id)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"        ports \u003d []"}],"source_content_type":"text/x-python","patch_set":45,"id":"da20952f_ca4e2bc1","line":306,"updated":"2015-08-27 09:00:03.000000000","message":"need tests for this method","commit_id":"a21ae3870fb3007d4c162b35ec607ac49993b3d2"},{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"55ed83bde1a8af41956ad117ff10daae4f4e0752","unresolved":false,"context_lines":[{"line_number":303,"context_line":"        sec_grp \u003d self._get_lb_security_group(load_balancer.id)"},{"line_number":304,"context_line":"        self._update_security_group_rules(load_balancer, sec_grp.get(\u0027id\u0027))"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"    def failover_preparation(self, amphora):"},{"line_number":307,"context_line":"        interfaces \u003d self.get_plugged_networks(compute_id\u003damphora.compute_id)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"        ports \u003d []"}],"source_content_type":"text/x-python","patch_set":45,"id":"da20952f_64e85c11","line":306,"in_reply_to":"da20952f_ca4e2bc1","updated":"2015-08-27 16:59:19.000000000","message":"Gotcha","commit_id":"a21ae3870fb3007d4c162b35ec607ac49993b3d2"}],"octavia/tests/unit/compute/drivers/test_nova_driver.py":[{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"6cf2d0e3ab46e8bc724052772561336bee967381","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                                        key_name\u003d1,"},{"line_number":71,"context_line":"                                        sec_groups\u003d1,"},{"line_number":72,"context_line":"                                        network_ids\u003d[1],"},{"line_number":73,"context_line":"                                        port_ids\u003d[2],"},{"line_number":74,"context_line":"                                        user_data\u003d\u0027Blah\u0027,"},{"line_number":75,"context_line":"                                        config_drive_files\u003d\u0027Files Blah\u0027)"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":49,"id":"da20952f_6635e9f5","line":73,"updated":"2015-09-01 22:37:12.000000000","message":"Surprised we didn\u0027t make CONSTANTS at the top of the file for these things (like we did in most of the other tests for mock data) but not a big deal.","commit_id":"96405c589f614267056017c610f50c83cfe947b7"}],"octavia/tests/unit/controller/worker/flows/test_amphora_flows.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"135c51a7a0e938c769a75c89f8d66869f561dad6","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        self.assertEqual(len(amp_flow.provides), 0)"},{"line_number":114,"context_line":"        self.assertEqual(len(amp_flow.requires), 1)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def test_get_failover_flow(self):"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        amp_flow \u003d self.AmpFlow.get_failover_flow()"},{"line_number":119,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"1a4dcd0f_d6307d58","line":116,"updated":"2015-08-12 19:40:17.000000000","message":"Needs to test the branch for the REST driver cert code","commit_id":"fdd1b242fd68f19b888ac9064243e5810a6b790b"},{"author":{"_account_id":7398,"name":"Carlos Garza","email":"carlos.garza@rackspace.com","username":"crc32"},"change_message_id":"e47ca0cb6323a2a7f7720c1d62992e007ca30ebd","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        self.assertIn(constants.LISTENERS, amp_flow.provides)"},{"line_number":132,"context_line":"        self.assertIn(constants.LOADBALANCER, amp_flow.provides)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        self.assertEqual(len(amp_flow.requires), 3)"},{"line_number":135,"context_line":"        self.assertEqual(len(amp_flow.provides), 11)"}],"source_content_type":"text/x-python","patch_set":50,"id":"da20952f_078f0724","line":134,"updated":"2015-09-03 04:01:14.000000000","message":"This assert fails on my tox. amp_flow.requires [\u0027loadbalancer_id\u0027, \u0027amphora\u0027]\n\nWhat was the expected 3rd \"requirment\"?\nCan I change this back to 2 to make the test pass?","commit_id":"12502d92429af7bae8caacc4ca96aea9ee7edf91"}],"octavia/tests/unit/controller/worker/tasks/test_compute_tasks.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"135c51a7a0e938c769a75c89f8d66869f561dad6","unresolved":false,"context_lines":[{"line_number":203,"context_line":"                          _amphora_mock)"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    @mock.patch(\u0027stevedore.driver.DriverManager.driver\u0027)"},{"line_number":206,"context_line":"    def test_delete_amphorae_on_load_balancer(self, mock_driver):"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        delete_amps \u003d compute_tasks.DeleteAmphoraeOnLoadBalancer()"},{"line_number":209,"context_line":"        delete_amps.execute(_load_balancer_mock)"}],"source_content_type":"text/x-python","patch_set":30,"id":"1a4dcd0f_d67e3de3","line":206,"updated":"2015-08-12 19:40:17.000000000","message":"Should test the exception case too.","commit_id":"fdd1b242fd68f19b888ac9064243e5810a6b790b"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"135c51a7a0e938c769a75c89f8d66869f561dad6","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        mock_driver.delete.assert_called_once_with(compute_id\u003dCOMPUTE_ID)"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    @mock.patch(\u0027stevedore.driver.DriverManager.driver\u0027)"},{"line_number":214,"context_line":"    def test_compute_delete(self, mock_driver):"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"        delete_compute \u003d compute_tasks.ComputeDelete()"},{"line_number":217,"context_line":"        delete_compute.execute(_amphora_mock)"}],"source_content_type":"text/x-python","patch_set":30,"id":"1a4dcd0f_768169c2","line":214,"updated":"2015-08-12 19:40:17.000000000","message":"Should test the exception case too.","commit_id":"fdd1b242fd68f19b888ac9064243e5810a6b790b"}],"octavia/tests/unit/network/drivers/neutron/test_allowed_address_pairs.py":[{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"6cf2d0e3ab46e8bc724052772561336bee967381","unresolved":false,"context_lines":[{"line_number":469,"context_line":""},{"line_number":470,"context_line":"    def test_failover_preparation(self):"},{"line_number":471,"context_line":"        ports \u003d {\"ports\": ["},{"line_number":472,"context_line":"            {\"fixed_ips\": [{\"subnet_id\": \"5\", \"ip_address\": \"10.0.0.2\"}],"},{"line_number":473,"context_line":"             \"id\": \"6\", \"network_id\": \"7\"},"},{"line_number":474,"context_line":"            {\"fixed_ips\": [{\"subnet_id\": \"8\", \"ip_address\": \"12.0.0.2\"}],"},{"line_number":475,"context_line":"             \"id\": \"9\", \"network_id\": \"10\"}]}"}],"source_content_type":"text/x-python","patch_set":49,"id":"da20952f_46178554","line":472,"updated":"2015-09-01 22:37:12.000000000","message":"Same comment about the CONSTANTs, but similarly don\u0027t care if it means we can get this in quicker.","commit_id":"96405c589f614267056017c610f50c83cfe947b7"}],"specs/version0.5/controller-worker.rst":[{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"6cf2d0e3ab46e8bc724052772561336bee967381","unresolved":false,"context_lines":[{"line_number":206,"context_line":"        \"\"\""},{"line_number":207,"context_line":"        raise NotImplementedError"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    def failover_amp(self, amphora_id):"},{"line_number":210,"context_line":"        \"\"\"Failover an amphora"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        :param amp_id: ID of the amphora to fail over"}],"source_content_type":"text/x-rst","patch_set":49,"id":"da20952f_e6081930","line":209,"updated":"2015-09-01 22:37:12.000000000","message":"Lol, was it really necessary to abbreviate this function name? :P","commit_id":"96405c589f614267056017c610f50c83cfe947b7"}]}
