)]}'
{"neutron_tempest_plugin/api/test_security_groups.py":[{"author":{"_account_id":31450,"name":"Alex Katz","email":"akatz@redhat.com","username":"akatz"},"change_message_id":"43c0a345fbbb9233778df0784ee9a5fd1dd076ee","unresolved":false,"context_lines":[{"line_number":300,"context_line":"        \"\"\""},{"line_number":301,"context_line":"        values \u003d [-1, 0, 10, 2147483647]"},{"line_number":302,"context_line":"        for value in values:"},{"line_number":303,"context_line":"            self._set_sg_rules_quota(value)"},{"line_number":304,"context_line":"            self.assertEqual(value, self._get_sg_rules_quota())"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1fa4df85_d9a143ab","line":303,"range":{"start_line":303,"start_character":17,"end_line":303,"end_character":36},"updated":"2020-03-19 12:05:06.000000000","message":"depends on the order of the tests we can get quota to be 2^31 in the beginning of the \"test_sg_rules_quota_increased\" test. So we need to specify some kind of cleanup by the end of each test. I would say that we need to do that for both: quota and rules. The following examples may help:\nBaseSecGroupQuota._set_sg_quota\nBaseSecGroupQuota._create_security_groups","commit_id":"9cd833821b5b34e6cfafb39eef21518a14d0f7d1"},{"author":{"_account_id":21302,"name":"Gena","email":"gcheresh@redhat.com","username":"gcheresh"},"change_message_id":"c0b87c69b8054f8b2ebf3dc72d8c02cd850faa33","unresolved":false,"context_lines":[{"line_number":300,"context_line":"        \"\"\""},{"line_number":301,"context_line":"        values \u003d [-1, 0, 10, 2147483647]"},{"line_number":302,"context_line":"        for value in values:"},{"line_number":303,"context_line":"            self._set_sg_rules_quota(value)"},{"line_number":304,"context_line":"            self.assertEqual(value, self._get_sg_rules_quota())"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"df33271e_5bce12b4","line":303,"range":{"start_line":303,"start_character":17,"end_line":303,"end_character":36},"in_reply_to":"1fa4df85_d9a143ab","updated":"2020-03-31 14:48:41.000000000","message":"Indeed it could be problematic, this case could break test_sg_rules_quata_values if the update there happens and the creation of new rules begins and after that the update in this test changes value to the smaller number. In this situation the previous test will fail. Need to run several times gates to see if it happens.\nAnyway I don\u0027t understand how cleanup can help in this situation. And I don\u0027t understand what this cleanup should do, change value to what?","commit_id":"9cd833821b5b34e6cfafb39eef21518a14d0f7d1"},{"author":{"_account_id":31450,"name":"Alex Katz","email":"akatz@redhat.com","username":"akatz"},"change_message_id":"c07a013bac0c1758ecaf4a4836c2b735b312cf7e","unresolved":false,"context_lines":[{"line_number":300,"context_line":"        \"\"\""},{"line_number":301,"context_line":"        values \u003d [-1, 0, 10, 2147483647]"},{"line_number":302,"context_line":"        for value in values:"},{"line_number":303,"context_line":"            self._set_sg_rules_quota(value)"},{"line_number":304,"context_line":"            self.assertEqual(value, self._get_sg_rules_quota())"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"df33271e_b2de49d7","line":303,"range":{"start_line":303,"start_character":17,"end_line":303,"end_character":36},"in_reply_to":"df33271e_52d8a2ed","updated":"2020-04-01 12:28:01.000000000","message":"As per documentation [1] all the tests from one class are executed one by one and not in parallel. And as far as I know tenant is created for each test class. Please correct me if I\u0027m wrong.\n\n[1] https://docs.openstack.org/tempest/latest/write_tests.html#adding-a-new-testcase","commit_id":"9cd833821b5b34e6cfafb39eef21518a14d0f7d1"},{"author":{"_account_id":21302,"name":"Gena","email":"gcheresh@redhat.com","username":"gcheresh"},"change_message_id":"92be2a193d1bcfb3bf6ae6c41c5607a98ee9b794","unresolved":false,"context_lines":[{"line_number":300,"context_line":"        \"\"\""},{"line_number":301,"context_line":"        values \u003d [-1, 0, 10, 2147483647]"},{"line_number":302,"context_line":"        for value in values:"},{"line_number":303,"context_line":"            self._set_sg_rules_quota(value)"},{"line_number":304,"context_line":"            self.assertEqual(value, self._get_sg_rules_quota())"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"df33271e_b215a9e7","line":303,"range":{"start_line":303,"start_character":17,"end_line":303,"end_character":36},"in_reply_to":"df33271e_52d8a2ed","updated":"2020-04-01 12:13:33.000000000","message":"We had the same situation in kuryr-tempest-plugin, so we used  @lockutils.synchronized decorator.\nYou can take a look in kuryr-tempest-plugin/kuryr_tempest_plugin/tests/scenario/test_port_pool.py\n\nThe question is do you really want it. If statistically the problem doesn\u0027t occur (my understanding is that it doesn\u0027t) maybe you can go with this solution and check the alternatives when the test will start failing","commit_id":"9cd833821b5b34e6cfafb39eef21518a14d0f7d1"},{"author":{"_account_id":31450,"name":"Alex Katz","email":"akatz@redhat.com","username":"akatz"},"change_message_id":"d3995d337acf47a9e0e5f2edeb53d0d0f38e4a68","unresolved":false,"context_lines":[{"line_number":300,"context_line":"        \"\"\""},{"line_number":301,"context_line":"        values \u003d [-1, 0, 10, 2147483647]"},{"line_number":302,"context_line":"        for value in values:"},{"line_number":303,"context_line":"            self._set_sg_rules_quota(value)"},{"line_number":304,"context_line":"            self.assertEqual(value, self._get_sg_rules_quota())"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"df33271e_7c3930d5","line":303,"range":{"start_line":303,"start_character":17,"end_line":303,"end_character":36},"in_reply_to":"df33271e_55f24707","updated":"2020-04-01 15:42:05.000000000","message":"Ok. You are correct. It can happen if you will remove or change the \"group_regex\" in the stestr configuration file. By default it has \"([^\\.]*\\.)*\" so the \"config_file.py\" [1] creates a method to group all tests by the class name. Each group is executed by it\u0027s worker so all the tests within one class are serialized.\n\nSo I don\u0027t think that lockutils is required here as all our tests are executed with the default regex.\n\n[1] https://github.com/mtreinish/stestr/blob/master/stestr/config_file.py#L156","commit_id":"9cd833821b5b34e6cfafb39eef21518a14d0f7d1"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"e7a4b61793c73d0d2b11cc116d39042adf3f2e6c","unresolved":false,"context_lines":[{"line_number":300,"context_line":"        \"\"\""},{"line_number":301,"context_line":"        values \u003d [-1, 0, 10, 2147483647]"},{"line_number":302,"context_line":"        for value in values:"},{"line_number":303,"context_line":"            self._set_sg_rules_quota(value)"},{"line_number":304,"context_line":"            self.assertEqual(value, self._get_sg_rules_quota())"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"df33271e_52d8a2ed","line":303,"range":{"start_line":303,"start_character":17,"end_line":303,"end_character":36},"in_reply_to":"df33271e_5bce12b4","updated":"2020-04-01 09:46:55.000000000","message":"That is true, those tests can have impact on each other. And cleanup after test may not help also as in corner case both tests can be run in parallel and this one will set quota to 2^31 and the other one will want to double it in same time.\nIMO the only solution for that would be to use different tenants in each of those tests.","commit_id":"9cd833821b5b34e6cfafb39eef21518a14d0f7d1"},{"author":{"_account_id":21302,"name":"Gena","email":"gcheresh@redhat.com","username":"gcheresh"},"change_message_id":"b2448e09dbe74a753d080969878da125943c85db","unresolved":false,"context_lines":[{"line_number":300,"context_line":"        \"\"\""},{"line_number":301,"context_line":"        values \u003d [-1, 0, 10, 2147483647]"},{"line_number":302,"context_line":"        for value in values:"},{"line_number":303,"context_line":"            self._set_sg_rules_quota(value)"},{"line_number":304,"context_line":"            self.assertEqual(value, self._get_sg_rules_quota())"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"df33271e_55f24707","line":303,"range":{"start_line":303,"start_character":17,"end_line":303,"end_character":36},"in_reply_to":"df33271e_b2de49d7","updated":"2020-04-01 12:44:52.000000000","message":"In the example I provided all the tests reside under the same class and they run in parallel, so I am not sure we can count on this documentation, but I am not 100% sure in this case","commit_id":"9cd833821b5b34e6cfafb39eef21518a14d0f7d1"},{"author":{"_account_id":31450,"name":"Alex Katz","email":"akatz@redhat.com","username":"akatz"},"change_message_id":"749708d1ffdad88d686a217f2ed381c6297d0404","unresolved":false,"context_lines":[{"line_number":222,"context_line":"        port_index +\u003d sg_rules_to_create"},{"line_number":223,"context_line":"        self._create_security_group_rules(sg_rules_to_create,"},{"line_number":224,"context_line":"                                          port_index\u003dport_index)"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    def _create_security_group_rules(self, amount, port_index\u003d1):"},{"line_number":227,"context_line":"        for i in range(amount):"},{"line_number":228,"context_line":"            self.create_security_group_rule(**{"}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_5cf26c07","line":225,"updated":"2020-04-01 15:46:24.000000000","message":"I would add cleanup call for the _create_max_allowed_sg_rules_amount method too. It is not critical in this particular case but might be critical in any further","commit_id":"80d59cca7ecf92eec94cb46b3e43631e7761b9a2"},{"author":{"_account_id":21302,"name":"Gena","email":"gcheresh@redhat.com","username":"gcheresh"},"change_message_id":"67ed8c7a729b5e53771c6217f5bc7cc607dd0e6e","unresolved":false,"context_lines":[{"line_number":252,"context_line":"        self.admin_client.update_quotas(project_id,"},{"line_number":253,"context_line":"                                        **{\u0027security_group_rule\u0027: val})"},{"line_number":254,"context_line":"        self.addCleanup(self.admin_client.update_quotas,"},{"line_number":255,"context_line":"                        project_id, **{\u0027security_group_rule\u0027: sg_rules_quota})"},{"line_number":256,"context_line":"        LOG.info(\u0027Trying to update security group rule quota {} \u0027.format(val))"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"    def _get_sg_rules_quota(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_817bed25","line":255,"updated":"2020-04-01 15:20:35.000000000","message":"if the tests run in parallel it doesn\u0027t solve the problem we were talking about.\nIf not you are returning to the default value after each iteration. Maybe it\u0027s better to do it only once when you finish the test_sg_rules_quota_values (once again only in case tests do not run in parallel)","commit_id":"80d59cca7ecf92eec94cb46b3e43631e7761b9a2"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"a57ad4db5ae8595e52e3b5c72efba6f8772ae6fa","unresolved":false,"context_lines":[{"line_number":252,"context_line":"        self.admin_client.update_quotas(project_id,"},{"line_number":253,"context_line":"                                        **{\u0027security_group_rule\u0027: val})"},{"line_number":254,"context_line":"        self.addCleanup(self.admin_client.update_quotas,"},{"line_number":255,"context_line":"                        project_id, **{\u0027security_group_rule\u0027: sg_rules_quota})"},{"line_number":256,"context_line":"        LOG.info(\u0027Trying to update security group rule quota {} \u0027.format(val))"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"    def _get_sg_rules_quota(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_4baa8d18","line":255,"in_reply_to":"df33271e_0bd24528","updated":"2020-04-02 10:33:03.000000000","message":"as we discussed in the irc with Eran, tests from one class will not be run in parallel so it should be good.\nYou\u0027re right that there will be all cleanups added but still IMHO it\u0027s making test to be longer then needed and that is not necessary :)","commit_id":"80d59cca7ecf92eec94cb46b3e43631e7761b9a2"},{"author":{"_account_id":31450,"name":"Alex Katz","email":"akatz@redhat.com","username":"akatz"},"change_message_id":"423af5b09e88ff2f6b4fb0a70e30690b1e347219","unresolved":false,"context_lines":[{"line_number":252,"context_line":"        self.admin_client.update_quotas(project_id,"},{"line_number":253,"context_line":"                                        **{\u0027security_group_rule\u0027: val})"},{"line_number":254,"context_line":"        self.addCleanup(self.admin_client.update_quotas,"},{"line_number":255,"context_line":"                        project_id, **{\u0027security_group_rule\u0027: sg_rules_quota})"},{"line_number":256,"context_line":"        LOG.info(\u0027Trying to update security group rule quota {} \u0027.format(val))"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"    def _get_sg_rules_quota(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_4e757bf9","line":255,"in_reply_to":"df33271e_4baa8d18","updated":"2020-04-02 11:07:41.000000000","message":"I do agree with you that test will take more time. From my point of view this is just the most transparent way to revert changes back. As the second option I can see is to add cleanup in the beginning of each test but if someone will write a new test he/she needs to keep that in mind.\nInvoke cleanup from the setup (test level) method has the disadvantage too as we don\u0027t know if there will be any changes in each test so we can initiate excess API call (or several - for each resource type).","commit_id":"80d59cca7ecf92eec94cb46b3e43631e7761b9a2"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"999541b319d11ebe98e87a12fa42cb00a97dbbd2","unresolved":false,"context_lines":[{"line_number":252,"context_line":"        self.admin_client.update_quotas(project_id,"},{"line_number":253,"context_line":"                                        **{\u0027security_group_rule\u0027: val})"},{"line_number":254,"context_line":"        self.addCleanup(self.admin_client.update_quotas,"},{"line_number":255,"context_line":"                        project_id, **{\u0027security_group_rule\u0027: sg_rules_quota})"},{"line_number":256,"context_line":"        LOG.info(\u0027Trying to update security group rule quota {} \u0027.format(val))"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"    def _get_sg_rules_quota(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_abcd19b8","line":255,"in_reply_to":"df33271e_817bed25","updated":"2020-04-02 10:04:16.000000000","message":"I agree that You should get original amount of sg in setUp method or at the begin of the test, so between L304 and 305 and add cleanup there.\nNow it\u0027s as Genadi said - You will always end with cleanup which will set value from the previous iteration, not what was originally set.","commit_id":"80d59cca7ecf92eec94cb46b3e43631e7761b9a2"},{"author":{"_account_id":31450,"name":"Alex Katz","email":"akatz@redhat.com","username":"akatz"},"change_message_id":"658d6ce9a67d0860704f7e40a9a95db97fba7e3f","unresolved":false,"context_lines":[{"line_number":252,"context_line":"        self.admin_client.update_quotas(project_id,"},{"line_number":253,"context_line":"                                        **{\u0027security_group_rule\u0027: val})"},{"line_number":254,"context_line":"        self.addCleanup(self.admin_client.update_quotas,"},{"line_number":255,"context_line":"                        project_id, **{\u0027security_group_rule\u0027: sg_rules_quota})"},{"line_number":256,"context_line":"        LOG.info(\u0027Trying to update security group rule quota {} \u0027.format(val))"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"    def _get_sg_rules_quota(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_0bd24528","line":255,"in_reply_to":"df33271e_abcd19b8","updated":"2020-04-02 10:14:45.000000000","message":"There will be cleanup for each _set_sg_rules_quota iteration but in the reverse order (stack). So in the end of the test there will be the same value as it was before the test has been started.\nIt will not solve the issue with the parallel execution but we shouldn\u0027t face the parallel execution if we will configure the tempest run correctly.","commit_id":"80d59cca7ecf92eec94cb46b3e43631e7761b9a2"},{"author":{"_account_id":21302,"name":"Gena","email":"gcheresh@redhat.com","username":"gcheresh"},"change_message_id":"4c268922e9f832330d7aa75d44f331faf35655d9","unresolved":false,"context_lines":[{"line_number":287,"context_line":"        new_quota \u003d self._increase_sg_rules_quota()"},{"line_number":288,"context_line":"        port_index \u003d new_quota"},{"line_number":289,"context_line":"        self._create_max_allowed_sg_rules_amount(port_index)"},{"line_number":290,"context_line":"        sg_rules_quota \u003d self._get_sg_rules_quota()"},{"line_number":291,"context_line":"        quota_set \u003d self._get_sg_rules_quota()"},{"line_number":292,"context_line":"        self.assertEqual(quota_set, self._get_sg_rules_amount(),"},{"line_number":293,"context_line":"                         \"Amount of security groups rules doesn\u0027t match quota\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_fd396c3f","line":290,"updated":"2020-04-05 11:44:34.000000000","message":"why is it needed here?","commit_id":"aad01500e511853c39ff7cd86456e12b256a3435"},{"author":{"_account_id":19118,"name":"Eran Kuris","email":"ekuris@redhat.com","username":"ekuris"},"change_message_id":"5a306a763f5203b533680c9c5d39c993f008dcce","unresolved":false,"context_lines":[{"line_number":287,"context_line":"        new_quota \u003d self._increase_sg_rules_quota()"},{"line_number":288,"context_line":"        port_index \u003d new_quota"},{"line_number":289,"context_line":"        self._create_max_allowed_sg_rules_amount(port_index)"},{"line_number":290,"context_line":"        sg_rules_quota \u003d self._get_sg_rules_quota()"},{"line_number":291,"context_line":"        quota_set \u003d self._get_sg_rules_quota()"},{"line_number":292,"context_line":"        self.assertEqual(quota_set, self._get_sg_rules_amount(),"},{"line_number":293,"context_line":"                         \"Amount of security groups rules doesn\u0027t match quota\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_3de0f496","line":290,"in_reply_to":"df33271e_fd396c3f","updated":"2020-04-05 12:21:49.000000000","message":"its not  you are right, added by mistake","commit_id":"aad01500e511853c39ff7cd86456e12b256a3435"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"3e83d6140dad5a9fc6802ab57b808da6c0df432b","unresolved":false,"context_lines":[{"line_number":304,"context_line":"        for value in values:"},{"line_number":305,"context_line":"            self._set_sg_rules_quota(value)"},{"line_number":306,"context_line":"            self.assertEqual(value, self._get_sg_rules_quota())"},{"line_number":307,"context_line":"        self.addCleanup(self.admin_client.update_quotas,"},{"line_number":308,"context_line":"                        project_id, **{\u0027security_group_rule\u0027: sg_rules_quota})"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"class SecGroupProtocolTest(base.BaseNetworkTest):"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_9cec982a","line":308,"range":{"start_line":307,"start_character":8,"end_line":308,"end_character":78},"updated":"2020-04-06 10:06:16.000000000","message":"You need to add this cleanup between L301 and L302.\nNow, if for any reason assertion in L306 will fail, You will never reach to this point to add and do this cleanup.","commit_id":"0f8aae0c595656f0dc6f0df7b8a10636d945877b"},{"author":{"_account_id":19118,"name":"Eran Kuris","email":"ekuris@redhat.com","username":"ekuris"},"change_message_id":"dfad6f46ee47980b4c9e3d1036e3ca0fdb75cf1e","unresolved":false,"context_lines":[{"line_number":304,"context_line":"        for value in values:"},{"line_number":305,"context_line":"            self._set_sg_rules_quota(value)"},{"line_number":306,"context_line":"            self.assertEqual(value, self._get_sg_rules_quota())"},{"line_number":307,"context_line":"        self.addCleanup(self.admin_client.update_quotas,"},{"line_number":308,"context_line":"                        project_id, **{\u0027security_group_rule\u0027: sg_rules_quota})"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"class SecGroupProtocolTest(base.BaseNetworkTest):"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_8b90c750","line":308,"range":{"start_line":307,"start_character":8,"end_line":308,"end_character":78},"in_reply_to":"df33271e_0b831806","updated":"2020-04-06 14:53:02.000000000","message":"Done","commit_id":"0f8aae0c595656f0dc6f0df7b8a10636d945877b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"bb89f28b7f02a334aa2bf9f8302cabed2b86896f","unresolved":false,"context_lines":[{"line_number":304,"context_line":"        for value in values:"},{"line_number":305,"context_line":"            self._set_sg_rules_quota(value)"},{"line_number":306,"context_line":"            self.assertEqual(value, self._get_sg_rules_quota())"},{"line_number":307,"context_line":"        self.addCleanup(self.admin_client.update_quotas,"},{"line_number":308,"context_line":"                        project_id, **{\u0027security_group_rule\u0027: sg_rules_quota})"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"class SecGroupProtocolTest(base.BaseNetworkTest):"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_3cabb51d","line":308,"range":{"start_line":307,"start_character":8,"end_line":308,"end_character":78},"in_reply_to":"df33271e_9cec982a","updated":"2020-04-07 08:36:53.000000000","message":"Good catch!","commit_id":"0f8aae0c595656f0dc6f0df7b8a10636d945877b"},{"author":{"_account_id":21302,"name":"Gena","email":"gcheresh@redhat.com","username":"gcheresh"},"change_message_id":"9326ca77b1d85fe151f4c9d3a95254a7e56782c8","unresolved":false,"context_lines":[{"line_number":304,"context_line":"        for value in values:"},{"line_number":305,"context_line":"            self._set_sg_rules_quota(value)"},{"line_number":306,"context_line":"            self.assertEqual(value, self._get_sg_rules_quota())"},{"line_number":307,"context_line":"        self.addCleanup(self.admin_client.update_quotas,"},{"line_number":308,"context_line":"                        project_id, **{\u0027security_group_rule\u0027: sg_rules_quota})"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"class SecGroupProtocolTest(base.BaseNetworkTest):"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_0b831806","line":308,"range":{"start_line":307,"start_character":8,"end_line":308,"end_character":78},"in_reply_to":"df33271e_9cec982a","updated":"2020-04-06 14:50:26.000000000","message":"Makes sense","commit_id":"0f8aae0c595656f0dc6f0df7b8a10636d945877b"}]}
