)]}'
{"trove/guestagent/datastore/experimental/db2/manager.py":[{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"cbdb6d2b82a1d68a17fe900e9257001b9b4826c0","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        self.app \u003d service.DB2App(self.appStatus)"},{"line_number":38,"context_line":"        self.admin \u003d service.DB2Admin()"},{"line_number":39,"context_line":"        super(Manager, self).__init__(\u0027db2\u0027)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    @property"},{"line_number":42,"context_line":"    def status(self):"},{"line_number":43,"context_line":"        return self.appStatus"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_2ce62644","line":40,"updated":"2016-08-29 18:13:09.000000000","message":"Since we now have the configuration manager you will probably want to implement the \u0027configuration_manager\u0027 property from the base Manager calss.\n\n@property\ndef configuration_manager(self):\n    return self.app.configuration_manager","commit_id":"0e22d733c822a583e890da338530409fb3f431f6"},{"author":{"_account_id":10295,"name":"mariam john","email":"mariamj@us.ibm.com","username":"mariamj"},"change_message_id":"26820551af98b6117e474d83375524bddf1319e1","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        self.app \u003d service.DB2App(self.appStatus)"},{"line_number":38,"context_line":"        self.admin \u003d service.DB2Admin()"},{"line_number":39,"context_line":"        super(Manager, self).__init__(\u0027db2\u0027)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    @property"},{"line_number":42,"context_line":"    def status(self):"},{"line_number":43,"context_line":"        return self.appStatus"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_0524a95b","line":40,"in_reply_to":"fa7ab95a_2ce62644","updated":"2016-08-30 16:21:58.000000000","message":"Done.","commit_id":"0e22d733c822a583e890da338530409fb3f431f6"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"cbdb6d2b82a1d68a17fe900e9257001b9b4826c0","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        if backup_info:"},{"line_number":61,"context_line":"            self._perform_restore(backup_info, context, mount_point)"},{"line_number":62,"context_line":"        if config_contents:"},{"line_number":63,"context_line":"                self.app.configuration_manager.save_configuration("},{"line_number":64,"context_line":"                    config_contents)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def restart(self, context):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_b1245160","line":63,"range":{"start_line":63,"start_character":8,"end_line":63,"end_character":16},"updated":"2016-08-29 18:13:09.000000000","message":"seems like too many indents?","commit_id":"0e22d733c822a583e890da338530409fb3f431f6"},{"author":{"_account_id":10295,"name":"mariam john","email":"mariamj@us.ibm.com","username":"mariamj"},"change_message_id":"26820551af98b6117e474d83375524bddf1319e1","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        if backup_info:"},{"line_number":61,"context_line":"            self._perform_restore(backup_info, context, mount_point)"},{"line_number":62,"context_line":"        if config_contents:"},{"line_number":63,"context_line":"                self.app.configuration_manager.save_configuration("},{"line_number":64,"context_line":"                    config_contents)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def restart(self, context):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_451a3118","line":63,"range":{"start_line":63,"start_character":8,"end_line":63,"end_character":16},"in_reply_to":"fa7ab95a_b1245160","updated":"2016-08-30 16:21:58.000000000","message":"Done","commit_id":"0e22d733c822a583e890da338530409fb3f431f6"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"cbdb6d2b82a1d68a17fe900e9257001b9b4826c0","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        if remove:"},{"line_number":144,"context_line":"            self.app.remove_overrides()"},{"line_number":145,"context_line":"        else:"},{"line_number":146,"context_line":"            self.app.update_overrides(context, overrides, remove)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def apply_overrides(self, context, overrides):"},{"line_number":149,"context_line":"        if overrides:"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_8c6ad2ec","line":146,"range":{"start_line":146,"start_character":58,"end_line":146,"end_character":64},"updated":"2016-08-29 18:13:09.000000000","message":"There is probably no need to pass this in since the case is already handled above.","commit_id":"0e22d733c822a583e890da338530409fb3f431f6"},{"author":{"_account_id":10295,"name":"mariam john","email":"mariamj@us.ibm.com","username":"mariamj"},"change_message_id":"26820551af98b6117e474d83375524bddf1319e1","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        if remove:"},{"line_number":144,"context_line":"            self.app.remove_overrides()"},{"line_number":145,"context_line":"        else:"},{"line_number":146,"context_line":"            self.app.update_overrides(context, overrides, remove)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def apply_overrides(self, context, overrides):"},{"line_number":149,"context_line":"        if overrides:"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_305ab1f2","line":146,"range":{"start_line":146,"start_character":58,"end_line":146,"end_character":64},"in_reply_to":"fa7ab95a_8c6ad2ec","updated":"2016-08-30 16:21:58.000000000","message":"Done","commit_id":"0e22d733c822a583e890da338530409fb3f431f6"}],"trove/guestagent/datastore/experimental/db2/service.py":[{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"cbdb6d2b82a1d68a17fe900e9257001b9b4826c0","unresolved":false,"context_lines":[{"line_number":77,"context_line":"            operating_system.write_file(FAKE_CFG, \u0027\u0027, as_root\u003dTrue)"},{"line_number":78,"context_line":"            operating_system.chown(FAKE_CFG, system.DB2_INSTANCE_OWNER,"},{"line_number":79,"context_line":"                                   system.DB2_INSTANCE_OWNER, as_root\u003dTrue)"},{"line_number":80,"context_line":"            operating_system.chmod(FAKE_CFG, FileMode.ADD_GRP_RX_OTH_RX(),"},{"line_number":81,"context_line":"                                   as_root\u003dTrue)"},{"line_number":82,"context_line":"        self.configuration_manager \u003d ("},{"line_number":83,"context_line":"            ConfigurationManager(FAKE_CFG, system.DB2_INSTANCE_OWNER,"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_ac8076f8","line":80,"range":{"start_line":80,"start_character":54,"end_line":80,"end_character":71},"updated":"2016-08-29 18:13:09.000000000","message":"So, since this file is ever used only by Trove should we even add any other permissions?","commit_id":"0e22d733c822a583e890da338530409fb3f431f6"},{"author":{"_account_id":10295,"name":"mariam john","email":"mariamj@us.ibm.com","username":"mariamj"},"change_message_id":"26820551af98b6117e474d83375524bddf1319e1","unresolved":false,"context_lines":[{"line_number":77,"context_line":"            operating_system.write_file(FAKE_CFG, \u0027\u0027, as_root\u003dTrue)"},{"line_number":78,"context_line":"            operating_system.chown(FAKE_CFG, system.DB2_INSTANCE_OWNER,"},{"line_number":79,"context_line":"                                   system.DB2_INSTANCE_OWNER, as_root\u003dTrue)"},{"line_number":80,"context_line":"            operating_system.chmod(FAKE_CFG, FileMode.ADD_GRP_RX_OTH_RX(),"},{"line_number":81,"context_line":"                                   as_root\u003dTrue)"},{"line_number":82,"context_line":"        self.configuration_manager \u003d ("},{"line_number":83,"context_line":"            ConfigurationManager(FAKE_CFG, system.DB2_INSTANCE_OWNER,"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_65a57545","line":80,"range":{"start_line":80,"start_character":54,"end_line":80,"end_character":71},"in_reply_to":"fa7ab95a_ac8076f8","updated":"2016-08-30 16:21:58.000000000","message":"Done","commit_id":"0e22d733c822a583e890da338530409fb3f431f6"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"cbdb6d2b82a1d68a17fe900e9257001b9b4826c0","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        text-file operations. Configuration overrides are implemented using"},{"line_number":67,"context_line":"        the ImportOverrideStrategy of the guestagent configuration manager."},{"line_number":68,"context_line":"        \"\"\""},{"line_number":69,"context_line":"        LOG.debug(\"Initialize DB2 configuration\")"},{"line_number":70,"context_line":"        revision_dir \u003d ("},{"line_number":71,"context_line":"            guestagent_utils.build_file_path("},{"line_number":72,"context_line":"                os.path.join(MOUNT_POINT,"},{"line_number":73,"context_line":"                             os.path.dirname(system.DB2_INSTANCE_OWNER)),"},{"line_number":74,"context_line":"                ConfigurationManager.DEFAULT_STRATEGY_OVERRIDES_SUB_DIR)"},{"line_number":75,"context_line":"        )"},{"line_number":76,"context_line":"        if not operating_system.exists(FAKE_CFG):"},{"line_number":77,"context_line":"            operating_system.write_file(FAKE_CFG, \u0027\u0027, as_root\u003dTrue)"},{"line_number":78,"context_line":"            operating_system.chown(FAKE_CFG, system.DB2_INSTANCE_OWNER,"},{"line_number":79,"context_line":"                                   system.DB2_INSTANCE_OWNER, as_root\u003dTrue)"},{"line_number":80,"context_line":"            operating_system.chmod(FAKE_CFG, FileMode.ADD_GRP_RX_OTH_RX(),"},{"line_number":81,"context_line":"                                   as_root\u003dTrue)"},{"line_number":82,"context_line":"        self.configuration_manager \u003d ("},{"line_number":83,"context_line":"            ConfigurationManager(FAKE_CFG, system.DB2_INSTANCE_OWNER,"},{"line_number":84,"context_line":"                                 system.DB2_INSTANCE_OWNER,"},{"line_number":85,"context_line":"                                 PropertiesCodec(delimiter\u003d\u0027\u003d\u0027),"},{"line_number":86,"context_line":"                                 requires_root\u003dTrue,"},{"line_number":87,"context_line":"                                 override_strategy\u003dImportOverrideStrategy("},{"line_number":88,"context_line":"                                     revision_dir, \"cnf\"))"},{"line_number":89,"context_line":"        )"},{"line_number":90,"context_line":"        \u0027\u0027\u0027"},{"line_number":91,"context_line":"        Below we are getting the database manager default configuration and"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_ac079616","line":88,"range":{"start_line":69,"start_character":8,"end_line":88,"end_character":58},"updated":"2016-08-29 18:13:09.000000000","message":"The Configuration Manager will need to be constructed in the App\u0027s __init__(). Currently, \u0027init_config\u0027 seems to be called only from prepare, but that gets called only once when the instance is created. Think about what happens if the guestagent restarts.","commit_id":"0e22d733c822a583e890da338530409fb3f431f6"},{"author":{"_account_id":10295,"name":"mariam john","email":"mariamj@us.ibm.com","username":"mariamj"},"change_message_id":"26820551af98b6117e474d83375524bddf1319e1","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        text-file operations. Configuration overrides are implemented using"},{"line_number":67,"context_line":"        the ImportOverrideStrategy of the guestagent configuration manager."},{"line_number":68,"context_line":"        \"\"\""},{"line_number":69,"context_line":"        LOG.debug(\"Initialize DB2 configuration\")"},{"line_number":70,"context_line":"        revision_dir \u003d ("},{"line_number":71,"context_line":"            guestagent_utils.build_file_path("},{"line_number":72,"context_line":"                os.path.join(MOUNT_POINT,"},{"line_number":73,"context_line":"                             os.path.dirname(system.DB2_INSTANCE_OWNER)),"},{"line_number":74,"context_line":"                ConfigurationManager.DEFAULT_STRATEGY_OVERRIDES_SUB_DIR)"},{"line_number":75,"context_line":"        )"},{"line_number":76,"context_line":"        if not operating_system.exists(FAKE_CFG):"},{"line_number":77,"context_line":"            operating_system.write_file(FAKE_CFG, \u0027\u0027, as_root\u003dTrue)"},{"line_number":78,"context_line":"            operating_system.chown(FAKE_CFG, system.DB2_INSTANCE_OWNER,"},{"line_number":79,"context_line":"                                   system.DB2_INSTANCE_OWNER, as_root\u003dTrue)"},{"line_number":80,"context_line":"            operating_system.chmod(FAKE_CFG, FileMode.ADD_GRP_RX_OTH_RX(),"},{"line_number":81,"context_line":"                                   as_root\u003dTrue)"},{"line_number":82,"context_line":"        self.configuration_manager \u003d ("},{"line_number":83,"context_line":"            ConfigurationManager(FAKE_CFG, system.DB2_INSTANCE_OWNER,"},{"line_number":84,"context_line":"                                 system.DB2_INSTANCE_OWNER,"},{"line_number":85,"context_line":"                                 PropertiesCodec(delimiter\u003d\u0027\u003d\u0027),"},{"line_number":86,"context_line":"                                 requires_root\u003dTrue,"},{"line_number":87,"context_line":"                                 override_strategy\u003dImportOverrideStrategy("},{"line_number":88,"context_line":"                                     revision_dir, \"cnf\"))"},{"line_number":89,"context_line":"        )"},{"line_number":90,"context_line":"        \u0027\u0027\u0027"},{"line_number":91,"context_line":"        Below we are getting the database manager default configuration and"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_5023b555","line":88,"range":{"start_line":69,"start_character":8,"end_line":88,"end_character":58},"in_reply_to":"fa7ab95a_ac079616","updated":"2016-08-30 16:21:58.000000000","message":"fixed this Petr.","commit_id":"0e22d733c822a583e890da338530409fb3f431f6"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"cbdb6d2b82a1d68a17fe900e9257001b9b4826c0","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        \u0027\u0027\u0027"},{"line_number":108,"context_line":"        run_command(system.GET_DBM_CONFIGURATION % {"},{"line_number":109,"context_line":"            \"dbm_config\": DB2_DEFAULT_CFG})"},{"line_number":110,"context_line":"        operating_system.chmod(DB2_DEFAULT_CFG, FileMode.ADD_READ_ALL(),"},{"line_number":111,"context_line":"                               as_root\u003dTrue)"},{"line_number":112,"context_line":"        self.process_default_dbm_config()"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_aea22bac","line":110,"updated":"2016-08-29 18:13:09.000000000","message":"Note: a root-owned file can be read without permanently changing the permissions with:\n\noperating_system.read_file(\u003cfile\u003e, as_root\u003dTrue)\n\nthis could be used to read the file contents on line 125","commit_id":"0e22d733c822a583e890da338530409fb3f431f6"},{"author":{"_account_id":10295,"name":"mariam john","email":"mariamj@us.ibm.com","username":"mariamj"},"change_message_id":"26820551af98b6117e474d83375524bddf1319e1","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        \u0027\u0027\u0027"},{"line_number":108,"context_line":"        run_command(system.GET_DBM_CONFIGURATION % {"},{"line_number":109,"context_line":"            \"dbm_config\": DB2_DEFAULT_CFG})"},{"line_number":110,"context_line":"        operating_system.chmod(DB2_DEFAULT_CFG, FileMode.ADD_READ_ALL(),"},{"line_number":111,"context_line":"                               as_root\u003dTrue)"},{"line_number":112,"context_line":"        self.process_default_dbm_config()"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_4344cd48","line":110,"in_reply_to":"fa7ab95a_aea22bac","updated":"2016-08-30 16:21:58.000000000","message":"The only reason I didn\u0027t use operating_system.read_file to process this is because of the format/contents of the configuration file to be processed. An example of the content is given in line 121. The actual configuration parameter is DFT_MON_BUFPOOL which is in the parentheses following the description. I wanted to process this so that the dictionary would contain only the parameter name as keys and not the entire contents to the left side of \u0027\u003d\u0027. Hope that makes sense. Not sure if there is another way to accomplish the above.","commit_id":"0e22d733c822a583e890da338530409fb3f431f6"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"cbdb6d2b82a1d68a17fe900e9257001b9b4826c0","unresolved":false,"context_lines":[{"line_number":109,"context_line":"            \"dbm_config\": DB2_DEFAULT_CFG})"},{"line_number":110,"context_line":"        operating_system.chmod(DB2_DEFAULT_CFG, FileMode.ADD_READ_ALL(),"},{"line_number":111,"context_line":"                               as_root\u003dTrue)"},{"line_number":112,"context_line":"        self.process_default_dbm_config()"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def process_default_dbm_config(self):"},{"line_number":115,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_ce64cfba","line":112,"updated":"2016-08-29 18:13:09.000000000","message":"Again, this won\u0027t be called if the guestagent restarts.","commit_id":"0e22d733c822a583e890da338530409fb3f431f6"},{"author":{"_account_id":10295,"name":"mariam john","email":"mariamj@us.ibm.com","username":"mariamj"},"change_message_id":"26820551af98b6117e474d83375524bddf1319e1","unresolved":false,"context_lines":[{"line_number":109,"context_line":"            \"dbm_config\": DB2_DEFAULT_CFG})"},{"line_number":110,"context_line":"        operating_system.chmod(DB2_DEFAULT_CFG, FileMode.ADD_READ_ALL(),"},{"line_number":111,"context_line":"                               as_root\u003dTrue)"},{"line_number":112,"context_line":"        self.process_default_dbm_config()"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def process_default_dbm_config(self):"},{"line_number":115,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_a35cb919","line":112,"in_reply_to":"fa7ab95a_ce64cfba","updated":"2016-08-30 16:21:58.000000000","message":"Should be taken care of in the latest patch. Thanks Petr.","commit_id":"0e22d733c822a583e890da338530409fb3f431f6"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"cbdb6d2b82a1d68a17fe900e9257001b9b4826c0","unresolved":false,"context_lines":[{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    def apply_overrides(self, overrides):"},{"line_number":237,"context_line":"        self.configuration_manager.apply_user_override(overrides)"},{"line_number":238,"context_line":"        self._apply_config(overrides)"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"    def _reset_config(self, config):"},{"line_number":241,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_2e79bbc8","line":238,"updated":"2016-08-29 18:13:09.000000000","message":"Would it make sense to swap these two lines? i.e. if the runtime apply fails should we still store the configuration record? (remove_overrides also first executes the runtime command and only then updates the config manager)","commit_id":"0e22d733c822a583e890da338530409fb3f431f6"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"cbdb6d2b82a1d68a17fe900e9257001b9b4826c0","unresolved":false,"context_lines":[{"line_number":260,"context_line":"    def _apply_config(self, config):"},{"line_number":261,"context_line":"        try:"},{"line_number":262,"context_line":"            for k, v in config.iteritems():"},{"line_number":263,"context_line":"                out, err \u003d run_command("},{"line_number":264,"context_line":"                    system.UPDATE_DBM_CONFIGURATION % {"},{"line_number":265,"context_line":"                        \u0027parameter\u0027: str(k),"},{"line_number":266,"context_line":"                        \u0027value\u0027: str(v)})"},{"line_number":267,"context_line":"                if err:"},{"line_number":268,"context_line":"                    if err.is_warning():"},{"line_number":269,"context_line":"                        LOG.warning(err)"},{"line_number":270,"context_line":"                    else:"},{"line_number":271,"context_line":"                        LOG.error(err)"},{"line_number":272,"context_line":"                        raise RuntimeError(_(\"Failed to apply config %s\") % k)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        except Exception:"},{"line_number":275,"context_line":"            LOG.exception(_(\"DB2 configuration apply failed\"))"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_6ee3c3a4","line":272,"range":{"start_line":263,"start_character":16,"end_line":272,"end_character":78},"updated":"2016-08-29 18:13:09.000000000","message":"I\u0027d suggest putting this into its own utility method (that takes the parameter name and value) and reusing it in \u0027_reset_config\u0027.","commit_id":"0e22d733c822a583e890da338530409fb3f431f6"},{"author":{"_account_id":10295,"name":"mariam john","email":"mariamj@us.ibm.com","username":"mariamj"},"change_message_id":"26820551af98b6117e474d83375524bddf1319e1","unresolved":false,"context_lines":[{"line_number":260,"context_line":"    def _apply_config(self, config):"},{"line_number":261,"context_line":"        try:"},{"line_number":262,"context_line":"            for k, v in config.iteritems():"},{"line_number":263,"context_line":"                out, err \u003d run_command("},{"line_number":264,"context_line":"                    system.UPDATE_DBM_CONFIGURATION % {"},{"line_number":265,"context_line":"                        \u0027parameter\u0027: str(k),"},{"line_number":266,"context_line":"                        \u0027value\u0027: str(v)})"},{"line_number":267,"context_line":"                if err:"},{"line_number":268,"context_line":"                    if err.is_warning():"},{"line_number":269,"context_line":"                        LOG.warning(err)"},{"line_number":270,"context_line":"                    else:"},{"line_number":271,"context_line":"                        LOG.error(err)"},{"line_number":272,"context_line":"                        raise RuntimeError(_(\"Failed to apply config %s\") % k)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        except Exception:"},{"line_number":275,"context_line":"            LOG.exception(_(\"DB2 configuration apply failed\"))"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_23a7c90b","line":272,"range":{"start_line":263,"start_character":16,"end_line":272,"end_character":78},"in_reply_to":"fa7ab95a_6ee3c3a4","updated":"2016-08-30 16:21:58.000000000","message":"Done","commit_id":"0e22d733c822a583e890da338530409fb3f431f6"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"0956b24897ef761f88accdc58e3f36b5db311708","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def init_config(self):"},{"line_number":60,"context_line":"        if not operating_system.exists(MOUNT_POINT, True):"},{"line_number":61,"context_line":"            operating_system.create_directory(MOUNT_POINT,"},{"line_number":62,"context_line":"                                              system.DB2_INSTANCE_OWNER,"},{"line_number":63,"context_line":"                                              system.DB2_INSTANCE_OWNER,"},{"line_number":64,"context_line":"                                              as_root\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa7ab95a_d56ccc0a","line":61,"updated":"2016-08-31 15:52:50.000000000","message":"Why do we need to create this directory? I thought mount_point had already been initialized in prepare (manager)?","commit_id":"30304d928c8d97c817736d8ca7cd83077552d9b2"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"0956b24897ef761f88accdc58e3f36b5db311708","unresolved":false,"context_lines":[{"line_number":83,"context_line":"            operating_system.write_file(FAKE_CFG, \u0027\u0027, as_root\u003dTrue)"},{"line_number":84,"context_line":"            operating_system.chown(FAKE_CFG, system.DB2_INSTANCE_OWNER,"},{"line_number":85,"context_line":"                                   system.DB2_INSTANCE_OWNER, as_root\u003dTrue)"},{"line_number":86,"context_line":"            operating_system.chmod(FAKE_CFG, FileMode.ADD_GRP_RX_OTH_RX(),"},{"line_number":87,"context_line":"                                   as_root\u003dTrue)"},{"line_number":88,"context_line":"        self.configuration_manager \u003d ("},{"line_number":89,"context_line":"            ConfigurationManager(FAKE_CFG, system.DB2_INSTANCE_OWNER,"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa7ab95a_a078e490","line":86,"updated":"2016-08-31 15:52:50.000000000","message":"I still thing we don\u0027t need to add any additional mods here. The file was created by Trove itself and hence should be readable by Trove. Nobody else seems to be using it.","commit_id":"30304d928c8d97c817736d8ca7cd83077552d9b2"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"0956b24897ef761f88accdc58e3f36b5db311708","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        We need to process this so that we key it on the configuration"},{"line_number":128,"context_line":"        parameter DFT_MON_BUFPOOL."},{"line_number":129,"context_line":"        \"\"\""},{"line_number":130,"context_line":"        with open(DB2_DEFAULT_CFG) as cfg_file:"},{"line_number":131,"context_line":"            for line in cfg_file:"},{"line_number":132,"context_line":"                if \u0027\u003d\u0027 in line:"},{"line_number":133,"context_line":"                    item \u003d line.rstrip(\u0027\\n\u0027).split(\u0027 \u003d \u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa7ab95a_40be3800","line":130,"updated":"2016-08-31 15:52:50.000000000","message":"I was suggesting that operating_system.read_file(DB2_DEFAULT_CFG, as_root\u003dTrue) could be used if it requires root without need to add \u0027a+r\u0027 on it. But this should be fine too if it\u0027s ok to read it with Trove creds only.","commit_id":"30304d928c8d97c817736d8ca7cd83077552d9b2"},{"author":{"_account_id":10295,"name":"mariam john","email":"mariamj@us.ibm.com","username":"mariamj"},"change_message_id":"559bdc45e988282beeef3d84cb017f1f43589239","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                                              system.DB2_INSTANCE_OWNER,"},{"line_number":63,"context_line":"                                              system.DB2_INSTANCE_OWNER,"},{"line_number":64,"context_line":"                                              as_root\u003dTrue)"},{"line_number":65,"context_line":"        \"\"\""},{"line_number":66,"context_line":"        The database manager configuration file - db2systm is stored  under the"},{"line_number":67,"context_line":"        /home/db2inst1/sqllib directory. To update the configuration"},{"line_number":68,"context_line":"        parameters, DB2 recommends using the command - UPDATE DBM CONFIGURATION"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a89bdaa_700b832a","line":65,"updated":"2016-09-07 20:02:50.000000000","message":"Petr, the MOUNT_POINT is created here because the prepare() method in manager class is called after the DB2App is initialized. The configuration manager is initialized in the DB2App constructor. The corresponding change is made in the do_prepare method to migrate the data if this MOUNT_POINT already exists.","commit_id":"52ef377af3ea9eda95fa0f44cbbba926ac37a76d"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"45b7bbe30961e1f5d38228de90ab9a58b1226c43","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                                              system.DB2_INSTANCE_OWNER,"},{"line_number":63,"context_line":"                                              system.DB2_INSTANCE_OWNER,"},{"line_number":64,"context_line":"                                              as_root\u003dTrue)"},{"line_number":65,"context_line":"        \"\"\""},{"line_number":66,"context_line":"        The database manager configuration file - db2systm is stored  under the"},{"line_number":67,"context_line":"        /home/db2inst1/sqllib directory. To update the configuration"},{"line_number":68,"context_line":"        parameters, DB2 recommends using the command - UPDATE DBM CONFIGURATION"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a89bdaa_64b8f22a","line":65,"in_reply_to":"9a89bdaa_700b832a","updated":"2016-09-08 16:15:58.000000000","message":"ok","commit_id":"52ef377af3ea9eda95fa0f44cbbba926ac37a76d"}],"trove/tests/scenario/helpers/db2_helper.py":[{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"0956b24897ef761f88accdc58e3f36b5db311708","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from trove.tests.scenario.helpers.test_helper import TestHelper"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class DB2Helper(TestHelper):"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def __init__(self, expected_override_name, report):"},{"line_number":25,"context_line":"        super(DB2Helper, self).__init__(expected_override_name, report,"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa7ab95a_a0a544b6","line":22,"range":{"start_line":22,"start_character":16,"end_line":22,"end_character":26},"updated":"2016-08-31 15:52:50.000000000","message":"This could be extending the SQLHelper if there is a SQLAlchemy driver for it. That should give us data operations for free...","commit_id":"30304d928c8d97c817736d8ca7cd83077552d9b2"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"0956b24897ef761f88accdc58e3f36b5db311708","unresolved":false,"context_lines":[{"line_number":35,"context_line":"                {\u0027name\u0027: \u0027user3\u0027, \u0027password\u0027: \u0027password1\u0027,"},{"line_number":36,"context_line":"                 \u0027databases\u0027: [{\u0027name\u0027: \u0027db1\u0027}, {\u0027name\u0027: \u0027db2\u0027}]}]"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def add_actual_data(self, *args, **kwargs):"},{"line_number":39,"context_line":"        raise SkipTest(\"Adding data to DB2 is not implemented\")"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def verify_actual_data(self, *args, **kwargs):"},{"line_number":42,"context_line":"        raise SkipTest(\"Verifying data in DB2 is not implemented\")"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def remove_actual_data(self, *args, **kwargs):"},{"line_number":45,"context_line":"        raise SkipTest(\"Removing data from DB2 is not implemented\")"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def get_dynamic_group(self):"},{"line_number":48,"context_line":"        return {\u0027MON_HEAP_SZ\u0027: 40}"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa7ab95a_a093844e","line":45,"range":{"start_line":38,"start_character":4,"end_line":45,"end_character":67},"updated":"2016-08-31 15:52:50.000000000","message":"There is no need to implement these if skipped. The base implementation skips by default.","commit_id":"30304d928c8d97c817736d8ca7cd83077552d9b2"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"fc36abd847954159ab86a0a1394a3b21d853dc03","unresolved":false,"context_lines":[{"line_number":35,"context_line":"                {\u0027name\u0027: \u0027user3\u0027, \u0027password\u0027: \u0027password1\u0027,"},{"line_number":36,"context_line":"                 \u0027databases\u0027: [{\u0027name\u0027: \u0027db1\u0027}, {\u0027name\u0027: \u0027db2\u0027}]}]"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def add_actual_data(self, *args, **kwargs):"},{"line_number":39,"context_line":"        raise SkipTest(\"Adding data to DB2 is not implemented\")"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def verify_actual_data(self, *args, **kwargs):"},{"line_number":42,"context_line":"        raise SkipTest(\"Verifying data in DB2 is not implemented\")"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def remove_actual_data(self, *args, **kwargs):"},{"line_number":45,"context_line":"        raise SkipTest(\"Removing data from DB2 is not implemented\")"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def get_dynamic_group(self):"},{"line_number":48,"context_line":"        return {\u0027MON_HEAP_SZ\u0027: 40}"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a89bdaa_083acb36","line":45,"range":{"start_line":38,"start_character":4,"end_line":45,"end_character":67},"in_reply_to":"fa7ab95a_a093844e","updated":"2016-09-02 21:05:26.000000000","message":"And I think it prints out a message that the method needs to be implemented, or something to that effect.  Either way, if you can extend the SQLHelper class then you\u0027ll get these for free.","commit_id":"30304d928c8d97c817736d8ca7cd83077552d9b2"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"ea2311ea271f28a08b701e433bc04037ce832351","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from trove.tests.scenario.helpers.test_helper import TestHelper"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class DB2Helper(TestHelper):"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def __init__(self, expected_override_name, report):"},{"line_number":25,"context_line":"        super(DB2Helper, self).__init__(expected_override_name, report,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a89bdaa_b4621615","line":22,"range":{"start_line":22,"start_character":7,"end_line":22,"end_character":8},"updated":"2016-09-03 00:49:39.000000000","message":"This will also have to be in lower case (since the name is generated, only the first character is capitalized in the datastore name).","commit_id":"41c0a191abc5884ebbfdcec73f9e244d8ea96a02"},{"author":{"_account_id":10295,"name":"mariam john","email":"mariamj@us.ibm.com","username":"mariamj"},"change_message_id":"559bdc45e988282beeef3d84cb017f1f43589239","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from trove.tests.scenario.helpers.test_helper import TestHelper"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class Db2Helper(TestHelper):"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def __init__(self, expected_override_name, report):"},{"line_number":25,"context_line":"        super(Db2Helper, self).__init__(expected_override_name, report)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a89bdaa_2b5b4ef7","line":22,"updated":"2016-09-07 20:02:50.000000000","message":"DB2 requires a different dialect(protocol) for the SQLAlchemy driver. It requires the python driver for sqlalchemy: ibm_db_sa. I am thinking of continuing this work including getting the required libraries in a separate patch as it might be too late to get libraries into requirements for Newton.","commit_id":"52ef377af3ea9eda95fa0f44cbbba926ac37a76d"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"45b7bbe30961e1f5d38228de90ab9a58b1226c43","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from trove.tests.scenario.helpers.test_helper import TestHelper"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class Db2Helper(TestHelper):"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def __init__(self, expected_override_name, report):"},{"line_number":25,"context_line":"        super(Db2Helper, self).__init__(expected_override_name, report)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a89bdaa_e4a322fe","line":22,"in_reply_to":"9a89bdaa_2b5b4ef7","updated":"2016-09-08 16:15:58.000000000","message":"SqlHelper actually has \u0027protocol\u0027 and \u0027port\u0027 as its init parameters. You can still use it. The user would just need to install the driver (which would eventually be done in redstack).","commit_id":"52ef377af3ea9eda95fa0f44cbbba926ac37a76d"}]}
