def _add_read_only_instances(request, database): try: check_is_database_dead(database.id, 'Add read-only instances') check_is_database_enabled(database.id, 'Add read-only instances') except DisabledDatabase as err: messages.add_message(request, messages.ERROR, err.message) return if not database.plan.replication_topology.has_horizontal_scalability: messages.add_message( request, messages.ERROR, 'Database topology do not have horizontal scalability') return if 'add_read_qtd' not in request.POST: messages.add_message(request, messages.ERROR, 'Quantity is required') return max_read_hosts = Configuration.get_by_name_as_int('max_read_hosts', 5) qtd_new_hosts = int(request.POST['add_read_qtd']) current_read_nodes = len(database.infra.instances.filter(read_only=True)) total_read_hosts = qtd_new_hosts + current_read_nodes if total_read_hosts > max_read_hosts: messages.add_message( request, messages.ERROR, 'Current limit of read only hosts is {} and you are trying to setup {}' .format(max_read_hosts, total_read_hosts)) return TaskRegister.database_add_instances(database=database, user=request.user, number_of_instances=qtd_new_hosts)
def execute(self): self.load_number_of_instances() if not self.number_of_instances: raise exceptions.RequiredNumberOfInstances( 'Number of instances is required' ) status, message = self.check_database_status() if not status: raise exceptions.DatabaseNotAvailable(message) if not self.is_ha(): raise exceptions.DatabaseIsNotHA( 'Database topology do not have horizontal scalability' ) max_read_hosts = Configuration.get_by_name_as_int('max_read_hosts', 5) qtd_new_hosts = self.number_of_instances current_read_nodes = len(self.database.infra.instances.filter(read_only=True)) total_read_hosts = qtd_new_hosts + current_read_nodes if total_read_hosts > max_read_hosts: raise exceptions.ReadOnlyHostsLimit( ('Current limit of read only hosts is {} and you are trying ' 'to setup {}').format( max_read_hosts, total_read_hosts ) ) self.task_params = dict( database=self.database, user=self.request.user, number_of_instances=qtd_new_hosts, number_of_instances_before_task=self.number_of_instances_before ) if self.retry: since_step = self.manager.current_step self.task_params['since_step'] = since_step TaskRegister.database_add_instances(**self.task_params)
def _add_read_only_instances(request, database): try: check_is_database_dead(database.id, 'Add read-only instances') check_is_database_enabled(database.id, 'Add read-only instances') except DisabledDatabase as err: messages.add_message(request, messages.ERROR, err.message) return if not database.plan.replication_topology.has_horizontal_scalability: messages.add_message( request, messages.ERROR, 'Database topology do not have horizontal scalability' ) return if 'add_read_qtd' not in request.POST: messages.add_message(request, messages.ERROR, 'Quantity is required') return max_read_hosts = Configuration.get_by_name_as_int('max_read_hosts', 5) qtd_new_hosts = int(request.POST['add_read_qtd']) current_read_nodes = len(database.infra.instances.filter(read_only=True)) total_read_hosts = qtd_new_hosts + current_read_nodes if total_read_hosts > max_read_hosts: messages.add_message( request, messages.ERROR, 'Current limit of read only hosts is {} and you are trying to setup {}'.format( max_read_hosts, total_read_hosts ) ) return TaskRegister.database_add_instances( database=database, user=request.user, number_of_instances=qtd_new_hosts )