diff --git a/dbaas/drivers/mysqldb.py b/dbaas/drivers/mysqldb.py index ed554c0d7..0fe187eb8 100644 --- a/dbaas/drivers/mysqldb.py +++ b/dbaas/drivers/mysqldb.py @@ -542,7 +542,7 @@ def get_start_pty_default(self): def create_db_params_changes(self, database): from physical.models import DatabaseInfraParameter - parameter = self.get_max_connections_parameter() + parameter = self.get_parameter(parameter_name='max_connections') value = self.get_max_connections_value(database) LOG.info('Parameter {} will be set to {}'.format(parameter.name, value)) @@ -552,13 +552,27 @@ def create_db_params_changes(self, database): parameter=parameter, value=value ) + + def create_static_db_params_changes(self, database): + from physical.models import DatabaseInfraParameter + + parameter = self.get_parameter(parameter_name='innodb_buffer_pool_size') + value = self.get_innodb_buffer_pool_size_value(database) + + LOG.info('Parameter {} will be set to {}'.format(parameter.name, value)) + + DatabaseInfraParameter.update_parameter_value( + databaseinfra=database.databaseinfra, + parameter=parameter, + value=value + ) - def get_max_connections_parameter(self): + def get_parameter(self, parameter_name): from physical.models import Parameter - param = Parameter.objects.filter(name='max_connections').first() + param = Parameter.objects.filter(name=parameter_name).first() if not param: - raise ObjectDoesNotExist('Parametro max_connections nao foi encontrado') + raise ObjectDoesNotExist('Parametro {} nao foi encontrado'.format(parameter_name)) return param @@ -572,7 +586,6 @@ def get_max_connections_value(self, database): offering = database.databaseinfra.offering return self.get_max_connections_value_from_steps(steps, offering) - def get_max_connections_value_from_steps(self, steps, offering): # steps ~= "0:1000,32768:2000,65536:4000" steps_list = steps.split(',') @@ -590,6 +603,24 @@ def get_max_connections_value_from_steps(self, steps, offering): return int(steps_map[ram]) + def get_innodb_buffer_pool_size_value(self, database): + # TODO: duplicated on configurations.py, could be improved (?) + offering = database.databaseinfra.offering + ram = offering.memory_size_mb + + # RAM -> 25% < 1GB - 60% < 16GB - 75% + if ram < 1024: + default = ram / 4 + elif ram < 8192: + default = ram * 0.5 + elif ram == 8192: + default = ram * 0.6 + else: + default = (ram * 3) / 4 + + return int(default) * 1048576 # MB to Byte (this parameter needs to be set in bytes) + + class MySQLFOXHA(MySQL): @classmethod diff --git a/dbaas/drivers/replication_topologies/base.py b/dbaas/drivers/replication_topologies/base.py index 466df52a2..89e21cd6c 100644 --- a/dbaas/drivers/replication_topologies/base.py +++ b/dbaas/drivers/replication_topologies/base.py @@ -740,6 +740,9 @@ def get_auto_upgrade_database_vm_offering(self): def get_configure_db_params_steps(self): raise NotImplementedError('Not implemented for topology') + def get_configure_static_db_params_steps(self): + raise NotImplementedError('Not implemented for topology') + def get_start_database_vm_steps(self): return [{ 'Starting VM': ( diff --git a/dbaas/drivers/replication_topologies/mysql.py b/dbaas/drivers/replication_topologies/mysql.py index 7497bac99..305ecbc16 100644 --- a/dbaas/drivers/replication_topologies/mysql.py +++ b/dbaas/drivers/replication_topologies/mysql.py @@ -220,6 +220,25 @@ def get_configure_db_params_steps(self): 'workflow.steps.util.database.UpdateKernelParameters', )}] + self.get_change_parameter_steps_final() + def get_configure_static_db_params_steps(self): + return [{ + 'Configuring Static DB Params': ( + 'workflow.steps.util.database.CreateStaticParameterChange', + 'workflow.steps.util.zabbix.DisableAlarms', + 'workflow.steps.util.db_monitor.DisableMonitoring', + 'workflow.steps.util.database.checkAndFixMySQLReplication', + 'workflow.steps.util.vm.ChangeMaster', + 'workflow.steps.util.database.CheckIfSwitchMaster', + 'workflow.steps.util.database.Stop', + 'workflow.steps.util.database.CheckIsDown', + 'workflow.steps.util.plan.ConfigureOnlyDBConfigFile', + 'workflow.steps.util.database.Start', + 'workflow.steps.util.database.CheckIsUp', + 'workflow.steps.util.db_monitor.EnableMonitoring', + 'workflow.steps.util.zabbix.EnableAlarms', + ) + }] + self.get_change_parameter_steps_final() + def get_host_migrate_steps(self): return [{ 'Migrating': ( diff --git a/dbaas/logical/templates/logical/database/details/parameters_tab.html b/dbaas/logical/templates/logical/database/details/parameters_tab.html index 3b0e66a50..dd65f7932 100644 --- a/dbaas/logical/templates/logical/database/details/parameters_tab.html +++ b/dbaas/logical/templates/logical/database/details/parameters_tab.html @@ -5,12 +5,24 @@