)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"394fb6f4cf7b422bdc1e85db5ad4bbbc83299198","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"7bdaca83_ef70c603","updated":"2022-07-21 14:57:40.000000000","message":"recheck","commit_id":"10f4a37053788a996158cf6e613030c1f8e74ade"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"5129457276a133155cc9c560e2182c29fcd1c814","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"958a8b01_379d7a29","updated":"2022-07-21 16:38:55.000000000","message":"recheck","commit_id":"10f4a37053788a996158cf6e613030c1f8e74ade"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"0b385f545454cd5d1f9bc2b9353c88f9e2dd683e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"e664ad6b_9c1aed49","updated":"2022-07-22 07:58:09.000000000","message":"recheck\n\nmirrors fixed","commit_id":"10f4a37053788a996158cf6e613030c1f8e74ade"},{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"115522f02544fc0409bd5be99f78f260992be368","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"62311b26_203ff8ea","updated":"2022-07-28 13:51:55.000000000","message":"recheck","commit_id":"e5fe2a33b991a5c8dc4a77b08bf7228d692e557b"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"bdf169cca3a44b08b5b6ea4d9f173c5d95142b84","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"c089b045_d41fe985","updated":"2022-07-28 12:33:25.000000000","message":"recheck\n\n(the nodes have failed)","commit_id":"e5fe2a33b991a5c8dc4a77b08bf7228d692e557b"}],"docker/proxysql/Dockerfile.j2":[{"author":{"_account_id":24072,"name":"Marcin Juszkiewicz","email":"mjuszkiewicz@redhat.com","username":"hrw"},"change_message_id":"2034ff3f2fd03965d35d3d822893da3799732370","unresolved":true,"context_lines":[{"line_number":30,"context_line":"RUN chmod 755 /usr/local/bin/kolla_proxysql_config_sync \\"},{"line_number":31,"context_line":"    \u0026\u0026 chmod 644 /usr/local/bin/kolla_extend_start"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"RUN mkdir -p /var/lib/kolla/proxysql \\"},{"line_number":34,"context_line":"    \u0026\u0026 chown proxysql:proxysql /var/lib/kolla/proxysql \\"},{"line_number":35,"context_line":"    \u0026\u0026 chmod 770 /var/lib/kolla/proxysql \\"},{"line_number":36,"context_line":"    \u0026\u0026 touch /etc/proxysql.cnf \\"},{"line_number":37,"context_line":"    \u0026\u0026 chown proxysql:proxysql /etc/proxysql.cnf \\"},{"line_number":38,"context_line":"    \u0026\u0026 chmod 600 /etc/proxysql.cnf"}],"source_content_type":"text/x-jinja2","patch_set":3,"id":"51bd9fa0_dba4080e","line":35,"range":{"start_line":33,"start_character":4,"end_line":35,"end_character":42},"updated":"2022-07-26 08:13:19.000000000","message":"install -g proxysql -o proxysql -m 770 -d /var/lib/kolla/proxysql\n\n3 commands in one","commit_id":"c5b9cca9b88a7e9223507618e1cdab34e68b771b"},{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"c439682227ca191c916fd86aef82030bc3ca7f3b","unresolved":false,"context_lines":[{"line_number":30,"context_line":"RUN chmod 755 /usr/local/bin/kolla_proxysql_config_sync \\"},{"line_number":31,"context_line":"    \u0026\u0026 chmod 644 /usr/local/bin/kolla_extend_start"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"RUN mkdir -p /var/lib/kolla/proxysql \\"},{"line_number":34,"context_line":"    \u0026\u0026 chown proxysql:proxysql /var/lib/kolla/proxysql \\"},{"line_number":35,"context_line":"    \u0026\u0026 chmod 770 /var/lib/kolla/proxysql \\"},{"line_number":36,"context_line":"    \u0026\u0026 touch /etc/proxysql.cnf \\"},{"line_number":37,"context_line":"    \u0026\u0026 chown proxysql:proxysql /etc/proxysql.cnf \\"},{"line_number":38,"context_line":"    \u0026\u0026 chmod 600 /etc/proxysql.cnf"}],"source_content_type":"text/x-jinja2","patch_set":3,"id":"2fb26401_d25641e2","line":35,"range":{"start_line":33,"start_character":4,"end_line":35,"end_character":42},"in_reply_to":"51bd9fa0_dba4080e","updated":"2022-07-28 09:52:30.000000000","message":"Done","commit_id":"c5b9cca9b88a7e9223507618e1cdab34e68b771b"}],"docker/proxysql/kolla_proxysql_config_sync":[{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"0a07aae533d0a0852933624550d6e5e1c83b2782","unresolved":true,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def write_config(self):"},{"line_number":138,"context_line":"        LOG.info(\"Writing config to {}\".format(self.conf_file))"},{"line_number":139,"context_line":"        if os.path.exists(self.conf_file):"},{"line_number":140,"context_line":"            with open(self.conf_file, \u0027r+\u0027) as f:"},{"line_number":141,"context_line":"                f.truncate(0)"},{"line_number":142,"context_line":"        for k, v in self.config.items():"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"0f69180d_153fb13f","line":139,"range":{"start_line":139,"start_character":8,"end_line":139,"end_character":42},"updated":"2022-07-21 16:33:20.000000000","message":"well, now we know it always exists; no need to check","commit_id":"10f4a37053788a996158cf6e613030c1f8e74ade"},{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"440cca12c83908f2850c0138393fc228cd6735c9","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def write_config(self):"},{"line_number":138,"context_line":"        LOG.info(\"Writing config to {}\".format(self.conf_file))"},{"line_number":139,"context_line":"        if os.path.exists(self.conf_file):"},{"line_number":140,"context_line":"            with open(self.conf_file, \u0027r+\u0027) as f:"},{"line_number":141,"context_line":"                f.truncate(0)"},{"line_number":142,"context_line":"        for k, v in self.config.items():"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"4c461afe_73f60ad5","line":139,"range":{"start_line":139,"start_character":8,"end_line":139,"end_character":42},"in_reply_to":"0f69180d_153fb13f","updated":"2022-07-22 11:53:17.000000000","message":"Done","commit_id":"10f4a37053788a996158cf6e613030c1f8e74ade"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"0a07aae533d0a0852933624550d6e5e1c83b2782","unresolved":true,"context_lines":[{"line_number":137,"context_line":"    def write_config(self):"},{"line_number":138,"context_line":"        LOG.info(\"Writing config to {}\".format(self.conf_file))"},{"line_number":139,"context_line":"        if os.path.exists(self.conf_file):"},{"line_number":140,"context_line":"            with open(self.conf_file, \u0027r+\u0027) as f:"},{"line_number":141,"context_line":"                f.truncate(0)"},{"line_number":142,"context_line":"        for k, v in self.config.items():"},{"line_number":143,"context_line":"            if isinstance(v, dict):"},{"line_number":144,"context_line":"                self._write_dict(k, v)"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"88816943_e0ba387c","line":141,"range":{"start_line":140,"start_character":12,"end_line":141,"end_character":29},"updated":"2022-07-21 16:33:20.000000000","message":"you can also open with mode \u0027wb\u0027 and simply pass in the body; I think that would be the most performant one (not that it matters much); it could use a comment though that this is for file reset","commit_id":"10f4a37053788a996158cf6e613030c1f8e74ade"},{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"440cca12c83908f2850c0138393fc228cd6735c9","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    def write_config(self):"},{"line_number":138,"context_line":"        LOG.info(\"Writing config to {}\".format(self.conf_file))"},{"line_number":139,"context_line":"        if os.path.exists(self.conf_file):"},{"line_number":140,"context_line":"            with open(self.conf_file, \u0027r+\u0027) as f:"},{"line_number":141,"context_line":"                f.truncate(0)"},{"line_number":142,"context_line":"        for k, v in self.config.items():"},{"line_number":143,"context_line":"            if isinstance(v, dict):"},{"line_number":144,"context_line":"                self._write_dict(k, v)"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"dd707104_11e98993","line":141,"range":{"start_line":140,"start_character":12,"end_line":141,"end_character":29},"in_reply_to":"88816943_e0ba387c","updated":"2022-07-22 11:53:17.000000000","message":"Done","commit_id":"10f4a37053788a996158cf6e613030c1f8e74ade"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"3190146cf2cdf288b151aa596bed51821739292b","unresolved":true,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def write_config(self):"},{"line_number":138,"context_line":"        LOG.info(\"Writing config to {}\".format(self.conf_file))"},{"line_number":139,"context_line":"        with open(self.conf_file, \u0027wb\u0027) as f:"},{"line_number":140,"context_line":"            pass"},{"line_number":141,"context_line":"        for k, v in self.config.items():"},{"line_number":142,"context_line":"            if isinstance(v, dict):"}],"source_content_type":"application/octet-stream","patch_set":3,"id":"75aba3d6_ea823903","line":139,"range":{"start_line":139,"start_character":39,"end_line":139,"end_character":44},"updated":"2022-07-22 14:54:01.000000000","message":"nit: not used; I wonder why no linter hated it, but I don\u0027t mind much","commit_id":"c5b9cca9b88a7e9223507618e1cdab34e68b771b"},{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"d4086fe475e77d1a53867d74541885c0cbb16fdc","unresolved":true,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def write_config(self):"},{"line_number":138,"context_line":"        LOG.info(\"Writing config to {}\".format(self.conf_file))"},{"line_number":139,"context_line":"        with open(self.conf_file, \u0027wb\u0027) as f:"},{"line_number":140,"context_line":"            pass"},{"line_number":141,"context_line":"        for k, v in self.config.items():"},{"line_number":142,"context_line":"            if isinstance(v, dict):"}],"source_content_type":"application/octet-stream","patch_set":3,"id":"482d3cac_46369f45","line":139,"range":{"start_line":139,"start_character":39,"end_line":139,"end_character":44},"in_reply_to":"22db3f98_1d3bab06","updated":"2022-07-26 12:34:33.000000000","message":"Well, proxysql container was running as root user, but It\u0027s better to run under proxysql user - as there is no need to run as root.\n\nAnd that\u0027s point, in proxysql is script which is reading proxysql.yaml, users/ rules and generate new proxysql.cnf which is read by proxysql itself.\n\nAs before script was using os.remove(\"/etc/proxysql.cnf\") and it was OK for root user, for proxysql user it\u0027s not ok.\n\nSo, now in image I just touch that file, set ownership and don\u0027t check existence ..because it\u0027s burned into image. Moreover, os.remove was replaced with truncate.","commit_id":"c5b9cca9b88a7e9223507618e1cdab34e68b771b"},{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"c439682227ca191c916fd86aef82030bc3ca7f3b","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def write_config(self):"},{"line_number":138,"context_line":"        LOG.info(\"Writing config to {}\".format(self.conf_file))"},{"line_number":139,"context_line":"        with open(self.conf_file, \u0027wb\u0027) as f:"},{"line_number":140,"context_line":"            pass"},{"line_number":141,"context_line":"        for k, v in self.config.items():"},{"line_number":142,"context_line":"            if isinstance(v, dict):"}],"source_content_type":"application/octet-stream","patch_set":3,"id":"0fb2cdd5_36c427bd","line":139,"range":{"start_line":139,"start_character":39,"end_line":139,"end_character":44},"in_reply_to":"482d3cac_46369f45","updated":"2022-07-28 09:52:30.000000000","message":"Done","commit_id":"c5b9cca9b88a7e9223507618e1cdab34e68b771b"},{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"aa3be1638a82f14540acf6702e1359d955aa766d","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def write_config(self):"},{"line_number":138,"context_line":"        LOG.info(\"Writing config to {}\".format(self.conf_file))"},{"line_number":139,"context_line":"        with open(self.conf_file, \u0027wb\u0027) as f:"},{"line_number":140,"context_line":"            pass"},{"line_number":141,"context_line":"        for k, v in self.config.items():"},{"line_number":142,"context_line":"            if isinstance(v, dict):"}],"source_content_type":"application/octet-stream","patch_set":3,"id":"a6ebfbe4_a5fcb905","line":139,"range":{"start_line":139,"start_character":39,"end_line":139,"end_character":44},"in_reply_to":"75aba3d6_ea823903","updated":"2022-07-23 18:14:38.000000000","message":"If you don\u0027t, i will not reupload to not loose +2 :D","commit_id":"c5b9cca9b88a7e9223507618e1cdab34e68b771b"},{"author":{"_account_id":24072,"name":"Marcin Juszkiewicz","email":"mjuszkiewicz@redhat.com","username":"hrw"},"change_message_id":"2034ff3f2fd03965d35d3d822893da3799732370","unresolved":true,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def write_config(self):"},{"line_number":138,"context_line":"        LOG.info(\"Writing config to {}\".format(self.conf_file))"},{"line_number":139,"context_line":"        with open(self.conf_file, \u0027wb\u0027) as f:"},{"line_number":140,"context_line":"            pass"},{"line_number":141,"context_line":"        for k, v in self.config.items():"},{"line_number":142,"context_line":"            if isinstance(v, dict):"}],"source_content_type":"application/octet-stream","patch_set":3,"id":"22db3f98_1d3bab06","line":139,"range":{"start_line":139,"start_character":39,"end_line":139,"end_character":44},"in_reply_to":"a6ebfbe4_a5fcb905","updated":"2022-07-26 08:13:19.000000000","message":"\"if file exists, do nothing\" instead of \"if file exists then remove it\" makes me wonder what happens with new code if file does not exist.","commit_id":"c5b9cca9b88a7e9223507618e1cdab34e68b771b"}]}
