diff --git a/public/app/percona/dbaas/components/DBCluster/EditDBClusterPage/DBClusterAdvancedOptions/Configurations/Configuration.constants.ts b/public/app/percona/dbaas/components/DBCluster/EditDBClusterPage/DBClusterAdvancedOptions/Configurations/Configuration.constants.ts new file mode 100644 index 0000000000000..051b13d34b691 --- /dev/null +++ b/public/app/percona/dbaas/components/DBCluster/EditDBClusterPage/DBClusterAdvancedOptions/Configurations/Configuration.constants.ts @@ -0,0 +1,12 @@ +import { Databases } from 'app/percona/shared/core'; +export const PXCDefaultConfiguration = + 'Configuration: [mysqld]\n' + + 'wsrep_provider_options="gcache.size=600M"\n' + + "wsrep_trx_fragment_unit='bytes'\n" + + 'wsrep_trx_fragment_size=3670018'; +export const PSMDBDefaultConfiguration = ' Configuration: \n' + ' operationProfiling:\n' + ' mode: slowOp'; + +export const DefaultDatabaseConfiguration: Partial> = { + [Databases.mysql]: PXCDefaultConfiguration, + [Databases.mongodb]: PSMDBDefaultConfiguration, +}; diff --git a/public/app/percona/dbaas/components/DBCluster/EditDBClusterPage/DBClusterBasicOptions/DBClusterBasicOptions.tsx b/public/app/percona/dbaas/components/DBCluster/EditDBClusterPage/DBClusterBasicOptions/DBClusterBasicOptions.tsx index 351bbcd8dcc51..dca9bd8827194 100644 --- a/public/app/percona/dbaas/components/DBCluster/EditDBClusterPage/DBClusterBasicOptions/DBClusterBasicOptions.tsx +++ b/public/app/percona/dbaas/components/DBCluster/EditDBClusterPage/DBClusterBasicOptions/DBClusterBasicOptions.tsx @@ -53,6 +53,7 @@ export const DBClusterBasicOptions: FC = ({ kubernet const onChangeDatabase = useCallback((databaseType) => { change(BasicOptionsFields.databaseType, databaseType); form.mutators.setClusterName(databaseType.value); + form.mutators.changeConfiguration(databaseType.value); // eslint-disable-next-line react-hooks/exhaustive-deps }, []); diff --git a/public/app/percona/dbaas/components/DBCluster/EditDBClusterPage/EditDBClusterPage.test.tsx b/public/app/percona/dbaas/components/DBCluster/EditDBClusterPage/EditDBClusterPage.test.tsx index 6c430ba6c2621..0312a857df1c0 100644 --- a/public/app/percona/dbaas/components/DBCluster/EditDBClusterPage/EditDBClusterPage.test.tsx +++ b/public/app/percona/dbaas/components/DBCluster/EditDBClusterPage/EditDBClusterPage.test.tsx @@ -1,9 +1,10 @@ -import { render, screen, waitFor } from '@testing-library/react'; +import { render, screen, waitFor, fireEvent } from '@testing-library/react'; import React from 'react'; import { Provider } from 'react-redux'; import { Router } from 'react-router-dom'; import { locationService } from '@grafana/runtime/src'; +import { PSMDBDefaultConfiguration } from 'app/percona/dbaas/components/DBCluster/EditDBClusterPage/DBClusterAdvancedOptions/Configurations/Configuration.constants'; import { configureStore } from 'app/store/configureStore'; import { StoreState } from 'app/types'; @@ -171,4 +172,45 @@ describe('EditDBClusterPage::', () => { expect(screen.getByTestId('empty-block')).toBeInTheDocument(); }); + + it('show default database configuration in create mode', async () => { + locationService.push(DB_CLUSTER_CREATION_URL); + + render( + + + + + + ); + + expect(screen.findByRole('form')).toBeTruthy(); + const advancedSettingsButton = screen.getByTestId('dbCluster-advanced-settings'); + await waitFor(() => fireEvent.click(advancedSettingsButton)); + + expect(screen.getByTestId('configuration-textarea-input')).toContainHTML(PSMDBDefaultConfiguration); + }); }); diff --git a/public/app/percona/dbaas/components/DBCluster/EditDBClusterPage/EditDBClusterPage.tsx b/public/app/percona/dbaas/components/DBCluster/EditDBClusterPage/EditDBClusterPage.tsx index 3ef56109b314c..6b3580e9a0c94 100644 --- a/public/app/percona/dbaas/components/DBCluster/EditDBClusterPage/EditDBClusterPage.tsx +++ b/public/app/percona/dbaas/components/DBCluster/EditDBClusterPage/EditDBClusterPage.tsx @@ -5,7 +5,9 @@ import { Form } from 'react-final-form'; import { Redirect, useHistory } from 'react-router-dom'; import { Spinner, useStyles2 } from '@grafana/ui/src'; +import { DefaultDatabaseConfiguration } from 'app/percona/dbaas/components/DBCluster/EditDBClusterPage/DBClusterAdvancedOptions/Configurations/Configuration.constants'; import { useShowPMMAddressWarning } from 'app/percona/shared/components/hooks/showPMMAddressWarning'; +import { Databases } from 'app/percona/shared/core'; import { useSelector, useDispatch } from 'app/types'; import { FeatureLoader } from '../../../../shared/components/Elements/FeatureLoader'; @@ -93,6 +95,11 @@ export const EditDBClusterPage: FC = () => { trimConfiguration: ([configuration]: string[], state, { changeValue }) => { changeValue(state, ConfigurationFields.configuration, () => configuration.trim()); }, + changeConfiguration: (databaseTypeValue: Databases, state, { changeValue }) => { + changeValue(state, ConfigurationFields.configuration, () => + databaseTypeValue ? DefaultDatabaseConfiguration[databaseTypeValue] : '' + ); + }, ...arrayMutators, }} render={({ form, handleSubmit, valid, pristine, ...props }) => ( diff --git a/public/app/percona/dbaas/components/DBCluster/EditDBClusterPage/EditDBClusterPage.utils.ts b/public/app/percona/dbaas/components/DBCluster/EditDBClusterPage/EditDBClusterPage.utils.ts index d0f5875321864..46990b38972af 100644 --- a/public/app/percona/dbaas/components/DBCluster/EditDBClusterPage/EditDBClusterPage.utils.ts +++ b/public/app/percona/dbaas/components/DBCluster/EditDBClusterPage/EditDBClusterPage.utils.ts @@ -1,3 +1,5 @@ +import { DefaultDatabaseConfiguration } from 'app/percona/dbaas/components/DBCluster/EditDBClusterPage/DBClusterAdvancedOptions/Configurations/Configuration.constants'; +import { ConfigurationFields } from 'app/percona/dbaas/components/DBCluster/EditDBClusterPage/DBClusterAdvancedOptions/Configurations/Configurations.types'; import { logger } from 'app/percona/shared/helpers/logger'; import { DATABASE_LABELS } from '../../../../shared/core'; @@ -37,8 +39,12 @@ export const getAddInitialValues = ( initialValues[BasicOptionsFields.kubernetesCluster] = initialCluster; if (activeOperators.length > 0) { const databaseDefaultOperator = getDatabaseOptionFromOperator(activeOperators[0]); + const defaultConfiguration = databaseDefaultOperator?.value + ? DefaultDatabaseConfiguration[databaseDefaultOperator?.value] + : ''; initialValues[BasicOptionsFields.databaseType] = databaseDefaultOperator; initialValues[BasicOptionsFields.name] = `${databaseDefaultOperator?.value}-${generateUID()}`; + initialValues[ConfigurationFields.configuration] = defaultConfiguration; } } } @@ -80,7 +86,10 @@ export const getEditInitialValues = ( cpu, disk, memory, - configuration: configuration?.params?.pxc?.configuration || configuration?.params?.replicaset?.configuration, + configuration: + selectedDBCluster?.configuration || + configuration?.params?.pxc?.configuration || + configuration?.params?.replicaset?.configuration, expose: configuration?.exposed, internetFacing: configuration?.internet_facing, sourceRanges: sourceRangesArray, diff --git a/public/app/percona/dbaas/components/DBCluster/PSMDB.service.ts b/public/app/percona/dbaas/components/DBCluster/PSMDB.service.ts index b4d5632054fdd..b7315b393ca10 100644 --- a/public/app/percona/dbaas/components/DBCluster/PSMDB.service.ts +++ b/public/app/percona/dbaas/components/DBCluster/PSMDB.service.ts @@ -150,6 +150,7 @@ export class PSMDBService extends DBClusterService { availableImage: dbCluster.available_image, template: dbCluster.template, sourceRanges: dbCluster.source_ranges, + configuration: dbCluster.params.replicaset?.configuration, }; } } @@ -169,6 +170,7 @@ const toAPI = (dbCluster: DBCluster): DBClusterPayload => ({ }, storage_class: dbCluster.storageClass, disk_size: dbCluster.disk * BILLION, + configuration: dbCluster.configuration, }, image: dbCluster.databaseImage, ...(dbCluster.backup && { diff --git a/public/app/percona/dbaas/components/DBCluster/XtraDB.service.ts b/public/app/percona/dbaas/components/DBCluster/XtraDB.service.ts index 6d40e91f01d8b..860771f4d000c 100644 --- a/public/app/percona/dbaas/components/DBCluster/XtraDB.service.ts +++ b/public/app/percona/dbaas/components/DBCluster/XtraDB.service.ts @@ -159,6 +159,7 @@ export class XtraDBService extends DBClusterService { availableImage: dbCluster.available_image, template: dbCluster.template, sourceRanges: dbCluster.source_ranges, + configuration: dbCluster.params.pxc?.configuration, }; } }