)]}'
{"trove/conductor/manager.py":[{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"235a6b5a0d8d194419de15e49e1236798f0e0f8e","unresolved":false,"context_lines":[{"line_number":149,"context_line":"                        message, exception):"},{"line_number":150,"context_line":"        notification \u003d SerializableNotification.deserialize("},{"line_number":151,"context_line":"            context, serialized_notification)"},{"line_number":152,"context_line":"        LOG.error(\"Guest exception on request %s:\\n%s\""},{"line_number":153,"context_line":"                  % (notification.request_id, exception))"},{"line_number":154,"context_line":"        notification.notify_exc_info(message, exception)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ac371cc_3b78562b","line":152,"updated":"2016-08-16 11:34:29.000000000","message":"You need to _ this","commit_id":"1d724258c0674c67943913299eda789e6206ed54"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"23f4fa6e750df1161cfb82a04f31b1f9cdba97d2","unresolved":false,"context_lines":[{"line_number":149,"context_line":"                        message, exception):"},{"line_number":150,"context_line":"        notification \u003d SerializableNotification.deserialize("},{"line_number":151,"context_line":"            context, serialized_notification)"},{"line_number":152,"context_line":"        LOG.error(\"Guest exception on request %s:\\n%s\""},{"line_number":153,"context_line":"                  % (notification.request_id, exception))"},{"line_number":154,"context_line":"        notification.notify_exc_info(message, exception)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ac371cc_7672caae","line":152,"in_reply_to":"3ac371cc_3b78562b","updated":"2016-08-17 16:25:57.000000000","message":"Done","commit_id":"1d724258c0674c67943913299eda789e6206ed54"}],"trove/guestagent/datastore/mysql_common/manager.py":[{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"235a6b5a0d8d194419de15e49e1236798f0e0f8e","unresolved":false,"context_lines":[{"line_number":245,"context_line":"    def pre_upgrade(self, context):"},{"line_number":246,"context_line":"        app \u003d self.mysql_app(self.mysql_app_status.get())"},{"line_number":247,"context_line":"        data_dir \u003d app.get_data_dir()"},{"line_number":248,"context_line":"        mount_point, _data \u003d os.path.split(data_dir)"},{"line_number":249,"context_line":"        save_dir \u003d \"%s/etc_mysql\" % mount_point"},{"line_number":250,"context_line":"        save_etc_dir \u003d \"%s/etc\" % mount_point"},{"line_number":251,"context_line":"        home_save \u003d \"%s/trove_user\" % mount_point"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ac371cc_bb98c61c","line":248,"updated":"2016-08-16 11:34:29.000000000","message":"isn\u0027t mount point available in CONF?","commit_id":"1d724258c0674c67943913299eda789e6206ed54"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"65a71f23a60d763ddea22ae0aad348eccae47902","unresolved":false,"context_lines":[{"line_number":245,"context_line":"    def pre_upgrade(self, context):"},{"line_number":246,"context_line":"        app \u003d self.mysql_app(self.mysql_app_status.get())"},{"line_number":247,"context_line":"        data_dir \u003d app.get_data_dir()"},{"line_number":248,"context_line":"        mount_point, _data \u003d os.path.split(data_dir)"},{"line_number":249,"context_line":"        save_dir \u003d \"%s/etc_mysql\" % mount_point"},{"line_number":250,"context_line":"        save_etc_dir \u003d \"%s/etc\" % mount_point"},{"line_number":251,"context_line":"        home_save \u003d \"%s/trove_user\" % mount_point"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa7ab95a_9284c10b","line":248,"in_reply_to":"3ac371cc_06d08f1e","updated":"2016-09-01 19:49:40.000000000","message":"but if that happened, wouldn\u0027t mount_point still be valid?","commit_id":"1d724258c0674c67943913299eda789e6206ed54"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"23f4fa6e750df1161cfb82a04f31b1f9cdba97d2","unresolved":false,"context_lines":[{"line_number":245,"context_line":"    def pre_upgrade(self, context):"},{"line_number":246,"context_line":"        app \u003d self.mysql_app(self.mysql_app_status.get())"},{"line_number":247,"context_line":"        data_dir \u003d app.get_data_dir()"},{"line_number":248,"context_line":"        mount_point, _data \u003d os.path.split(data_dir)"},{"line_number":249,"context_line":"        save_dir \u003d \"%s/etc_mysql\" % mount_point"},{"line_number":250,"context_line":"        save_etc_dir \u003d \"%s/etc\" % mount_point"},{"line_number":251,"context_line":"        home_save \u003d \"%s/trove_user\" % mount_point"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ac371cc_06d08f1e","line":248,"in_reply_to":"3ac371cc_bb98c61c","updated":"2016-08-17 16:25:57.000000000","message":"I thought about that at the time, but since the filesystem we are talking about was mounted to app.get_data_dir, even if that was derived from something in CONF, we should retrieve the mount point from get_data_dir in case its implementation changes in the future.","commit_id":"1d724258c0674c67943913299eda789e6206ed54"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"2e2be36215b661d5670b2bb3ddcb03cdcd8a27a8","unresolved":false,"context_lines":[{"line_number":245,"context_line":"    def pre_upgrade(self, context):"},{"line_number":246,"context_line":"        app \u003d self.mysql_app(self.mysql_app_status.get())"},{"line_number":247,"context_line":"        data_dir \u003d app.get_data_dir()"},{"line_number":248,"context_line":"        mount_point, _data \u003d os.path.split(data_dir)"},{"line_number":249,"context_line":"        save_dir \u003d \"%s/etc_mysql\" % mount_point"},{"line_number":250,"context_line":"        save_etc_dir \u003d \"%s/etc\" % mount_point"},{"line_number":251,"context_line":"        home_save \u003d \"%s/trove_user\" % mount_point"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a89bdaa_c67ca1b7","line":248,"in_reply_to":"fa7ab95a_9284c10b","updated":"2016-09-07 17:35:40.000000000","message":"Not if the implentation changed to not get the mount point from CONF, or from a different CONF setting.","commit_id":"1d724258c0674c67943913299eda789e6206ed54"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"235a6b5a0d8d194419de15e49e1236798f0e0f8e","unresolved":false,"context_lines":[{"line_number":253,"context_line":"        app.status.begin_restart()"},{"line_number":254,"context_line":"        app.stop_db()"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"        if operating_system.exists(\"/etc/my.cnf\", as_root\u003dTrue):"},{"line_number":257,"context_line":"            operating_system.create_directory(save_etc_dir, as_root\u003dTrue)"},{"line_number":258,"context_line":"            operating_system.copy(\"/etc/my.cnf\", save_etc_dir,"},{"line_number":259,"context_line":"                                  preserve\u003dTrue, as_root\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ac371cc_9b822a93","line":256,"updated":"2016-08-16 11:34:29.000000000","message":"shouldn\u0027t these paths come out of service.py?","commit_id":"1d724258c0674c67943913299eda789e6206ed54"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"23f4fa6e750df1161cfb82a04f31b1f9cdba97d2","unresolved":false,"context_lines":[{"line_number":253,"context_line":"        app.status.begin_restart()"},{"line_number":254,"context_line":"        app.stop_db()"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"        if operating_system.exists(\"/etc/my.cnf\", as_root\u003dTrue):"},{"line_number":257,"context_line":"            operating_system.create_directory(save_etc_dir, as_root\u003dTrue)"},{"line_number":258,"context_line":"            operating_system.copy(\"/etc/my.cnf\", save_etc_dir,"},{"line_number":259,"context_line":"                                  preserve\u003dTrue, as_root\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ac371cc_414d516b","line":256,"in_reply_to":"3ac371cc_9b822a93","updated":"2016-08-17 16:25:57.000000000","message":"Did you mean system.py?  There is no system.py for mysql_common, and since system.py is not pythonic, I\u0027m not inclined to create one (and how can a \"common\" module be system specific, anyways).  Now, we could define abstract base methods for these and override them in specific implementations, but I figured in that case there would probably be more than paths involved and it would need a whole new method anyways.","commit_id":"1d724258c0674c67943913299eda789e6206ed54"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"235a6b5a0d8d194419de15e49e1236798f0e0f8e","unresolved":false,"context_lines":[{"line_number":261,"context_line":"        operating_system.copy(\"/etc/mysql/.\", save_dir,"},{"line_number":262,"context_line":"                              preserve\u003dTrue, as_root\u003dTrue)"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"        operating_system.copy(\"%s/.\" % os.path.expanduser(\u0027~\u0027), home_save,"},{"line_number":265,"context_line":"                              preserve\u003dTrue, as_root\u003dTrue)"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"        self.unmount_volume(context, mount_point\u003ddata_dir)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ac371cc_7e191c79","line":264,"updated":"2016-08-16 11:34:29.000000000","message":"shouldn\u0027t recursive be also specified? it does not appear to default.","commit_id":"1d724258c0674c67943913299eda789e6206ed54"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"23f4fa6e750df1161cfb82a04f31b1f9cdba97d2","unresolved":false,"context_lines":[{"line_number":261,"context_line":"        operating_system.copy(\"/etc/mysql/.\", save_dir,"},{"line_number":262,"context_line":"                              preserve\u003dTrue, as_root\u003dTrue)"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"        operating_system.copy(\"%s/.\" % os.path.expanduser(\u0027~\u0027), home_save,"},{"line_number":265,"context_line":"                              preserve\u003dTrue, as_root\u003dTrue)"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"        self.unmount_volume(context, mount_point\u003ddata_dir)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ac371cc_c23660e6","line":264,"in_reply_to":"3ac371cc_7e191c79","updated":"2016-08-17 16:25:57.000000000","message":"It appears to default in operating_system.copy, no?","commit_id":"1d724258c0674c67943913299eda789e6206ed54"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"235a6b5a0d8d194419de15e49e1236798f0e0f8e","unresolved":false,"context_lines":[{"line_number":289,"context_line":"        operating_system.copy(\"%s/.\" % upgrade_info[\u0027home_save\u0027],"},{"line_number":290,"context_line":"                              os.path.expanduser(\u0027~\u0027),"},{"line_number":291,"context_line":"                              preserve\u003dTrue, as_root\u003dTrue)"},{"line_number":292,"context_line":"        app.start_mysql()"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"    def restart(self, context):"},{"line_number":295,"context_line":"        app \u003d self.mysql_app(self.mysql_app_status.get())"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ac371cc_3e3de4bb","line":292,"updated":"2016-08-16 11:34:29.000000000","message":"will the turds left in save_dir, home_save, and save_etc_dir get cleaned up?\n\nif not, what happens on a subsequent upgrade attempt?","commit_id":"1d724258c0674c67943913299eda789e6206ed54"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"23f4fa6e750df1161cfb82a04f31b1f9cdba97d2","unresolved":false,"context_lines":[{"line_number":289,"context_line":"        operating_system.copy(\"%s/.\" % upgrade_info[\u0027home_save\u0027],"},{"line_number":290,"context_line":"                              os.path.expanduser(\u0027~\u0027),"},{"line_number":291,"context_line":"                              preserve\u003dTrue, as_root\u003dTrue)"},{"line_number":292,"context_line":"        app.start_mysql()"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"    def restart(self, context):"},{"line_number":295,"context_line":"        app \u003d self.mysql_app(self.mysql_app_status.get())"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ac371cc_a259a400","line":292,"in_reply_to":"3ac371cc_3e3de4bb","updated":"2016-08-17 16:25:57.000000000","message":"Yeah, I debated between cleaning or reserving the space and went for the latter.  Since everything in the save directory was copied into the appropriate target, wouldn\u0027t we just copy it back on the next upgrade anyways?  Also, the delete would take time and I wanted to return from the call ASAP to reduce downtime (though you could argue the db is available even if the trove call hasn\u0027t returned, but the user wouldn\u0027t know that).","commit_id":"1d724258c0674c67943913299eda789e6206ed54"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"e663624ebede44e6d5165bdfc6f9bbe9f2d4ac86","unresolved":false,"context_lines":[{"line_number":242,"context_line":"        if snapshot:"},{"line_number":243,"context_line":"            self.attach_replica(context, snapshot, snapshot[\u0027config\u0027])"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    def pre_upgrade(self, context):"},{"line_number":246,"context_line":"        app \u003d self.mysql_app(self.mysql_app_status.get())"},{"line_number":247,"context_line":"        data_dir \u003d app.get_data_dir()"},{"line_number":248,"context_line":"        mount_point, _data \u003d os.path.split(data_dir)"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a89bdaa_8e023a6e","line":245,"updated":"2016-09-09 14:15:13.000000000","message":"pre_upgrade and post_upgrade as shown in this implementation work (I\u0027ve extended them for SQLServer for shits and giggles) but I think they present a heavy weight approach to doing things.\n\nin this model, you need to implement pre_upgrade and post_upgrade for each datastore that must support upgrade. I think this is less than ideal.\n\nI would much rather pre_upgrade and post_upgrade be driven by configuration in the datastore identifying where the implementation stores stuff (so mysql would merely identify /etc/my.cnf, and a set of files or directories) and a common implementation would make sure that these were preserved across the upgrade.\n\nEach datastore would then merely have to identify the nuggets, rather than provide the implementation for moving said nuggets.\n\nI think this is something that can be improved later, I\u0027ve logged a bug for this.","commit_id":"41e6e385f26f94af4636edb70ac3d26431f42a01"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"e663624ebede44e6d5165bdfc6f9bbe9f2d4ac86","unresolved":false,"context_lines":[{"line_number":245,"context_line":"    def pre_upgrade(self, context):"},{"line_number":246,"context_line":"        app \u003d self.mysql_app(self.mysql_app_status.get())"},{"line_number":247,"context_line":"        data_dir \u003d app.get_data_dir()"},{"line_number":248,"context_line":"        mount_point, _data \u003d os.path.split(data_dir)"},{"line_number":249,"context_line":"        save_dir \u003d \"%s/etc_mysql\" % mount_point"},{"line_number":250,"context_line":"        save_etc_dir \u003d \"%s/etc\" % mount_point"},{"line_number":251,"context_line":"        home_save \u003d \"%s/trove_user\" % mount_point"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a89bdaa_0e462abf","line":248,"range":{"start_line":248,"start_character":8,"end_line":248,"end_character":19},"updated":"2016-09-09 14:15:13.000000000","message":"and I continue to be not impressed by the reason(s) to do this. There\u0027s a configuration parameter ...","commit_id":"41e6e385f26f94af4636edb70ac3d26431f42a01"}],"trove/instance/service.py":[{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"235a6b5a0d8d194419de15e49e1236798f0e0f8e","unresolved":false,"context_lines":[{"line_number":312,"context_line":"                return configuration_id"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    def _modify_instance(self, context, req, instance, **kwargs):"},{"line_number":315,"context_line":"        \"\"\"Modifies the instance using the specified keyword arguments"},{"line_number":316,"context_line":"        \u0027detach_replica\u0027: ignored if not present or False, if True,"},{"line_number":317,"context_line":"        specifies the instance is a replica that will be detached from"},{"line_number":318,"context_line":"        its master"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ac371cc_de3770ae","line":315,"updated":"2016-08-16 11:34:29.000000000","message":"either delete or update the comment here.","commit_id":"1d724258c0674c67943913299eda789e6206ed54"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"23f4fa6e750df1161cfb82a04f31b1f9cdba97d2","unresolved":false,"context_lines":[{"line_number":312,"context_line":"                return configuration_id"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    def _modify_instance(self, context, req, instance, **kwargs):"},{"line_number":315,"context_line":"        \"\"\"Modifies the instance using the specified keyword arguments"},{"line_number":316,"context_line":"        \u0027detach_replica\u0027: ignored if not present or False, if True,"},{"line_number":317,"context_line":"        specifies the instance is a replica that will be detached from"},{"line_number":318,"context_line":"        its master"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ac371cc_f69b5a70","line":315,"in_reply_to":"3ac371cc_de3770ae","updated":"2016-08-17 16:25:57.000000000","message":"Done","commit_id":"1d724258c0674c67943913299eda789e6206ed54"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"235a6b5a0d8d194419de15e49e1236798f0e0f8e","unresolved":false,"context_lines":[{"line_number":349,"context_line":"                notification.DBaaSInstanceUpgrade(context, request\u003dreq))"},{"line_number":350,"context_line":"            with StartNotification(context, instance_id\u003dinstance.id,"},{"line_number":351,"context_line":"                                   datastore_version_id\u003ddatastore_version.id):"},{"line_number":352,"context_line":"                instance.unassign_configuration()"},{"line_number":353,"context_line":"                instance.upgrade(datastore_version)"},{"line_number":354,"context_line":"        if kwargs:"},{"line_number":355,"context_line":"            instance.update_db(**kwargs)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ac371cc_de5e50e8","line":352,"updated":"2016-08-16 11:34:29.000000000","message":"why unassign_configuration()","commit_id":"1d724258c0674c67943913299eda789e6206ed54"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"23f4fa6e750df1161cfb82a04f31b1f9cdba97d2","unresolved":false,"context_lines":[{"line_number":349,"context_line":"                notification.DBaaSInstanceUpgrade(context, request\u003dreq))"},{"line_number":350,"context_line":"            with StartNotification(context, instance_id\u003dinstance.id,"},{"line_number":351,"context_line":"                                   datastore_version_id\u003ddatastore_version.id):"},{"line_number":352,"context_line":"                instance.unassign_configuration()"},{"line_number":353,"context_line":"                instance.upgrade(datastore_version)"},{"line_number":354,"context_line":"        if kwargs:"},{"line_number":355,"context_line":"            instance.update_db(**kwargs)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ac371cc_a23c04e3","line":352,"in_reply_to":"3ac371cc_de5e50e8","updated":"2016-08-17 16:25:57.000000000","message":"Probably a C\u0026P error, I guess, but it was 6 weeks ago, so who knows.  Guess I\u0027ll take it out and we\u0027ll see what happens.","commit_id":"1d724258c0674c67943913299eda789e6206ed54"}]}
