fixing issues with maximum documents and maximum size being set (#31998) (#32041)

* fixing issues with maximum documents and maximum size being set

* removing defaults from ES policy load and removing unneeded propTypes

* fixing react warnings about controlled -> uncontrolled

* fixing tests

* more fixes for react controlled -> uncontrolled errors

* better fix for react warnings through empty default phases

* removing unused translation

* removing unnecessary async/awaits in onChange handlers
This commit is contained in:
Bill McConaghy 2019-02-26 10:25:07 -05:00 committed by GitHub
parent ee4072be29
commit 4ea8ea373c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 138 additions and 136 deletions

View file

@ -29,6 +29,7 @@ import {
policyNameContainsSpaceErrorMessage,
policyNameMustBeDifferentErrorMessage,
policyNameAlreadyUsedErrorMessage,
maximumDocumentsRequiredMessage,
} from '../../public/store/selectors/lifecycle';
let server;
@ -184,7 +185,7 @@ describe('edit policy', () => {
maxAgeInput.simulate('change', { target: { value: '' } });
rendered.update();
save(rendered);
expectedErrorMessages(rendered, [maximumSizeRequiredMessage, maximumAgeRequiredMessage]);
expectedErrorMessages(rendered, [maximumSizeRequiredMessage, maximumAgeRequiredMessage, maximumDocumentsRequiredMessage]);
});
test('should show number above 0 required error when trying to save with -1 for max size', () => {
const rendered = mountWithIntl(component);

View file

@ -20,10 +20,6 @@ import {
import {
PHASE_COLD,
PHASE_ENABLED,
PHASE_ROLLOVER_ALIAS,
PHASE_ROLLOVER_MINIMUM_AGE,
PHASE_ROLLOVER_MINIMUM_AGE_UNITS,
PHASE_NODE_ATTRS,
PHASE_REPLICA_COUNT,
PHASE_FREEZE_ENABLED
} from '../../../../store/constants';
@ -40,15 +36,6 @@ class ColdPhaseUi extends PureComponent {
isShowingErrors: PropTypes.bool.isRequired,
errors: PropTypes.object.isRequired,
phaseData: PropTypes.shape({
[PHASE_ENABLED]: PropTypes.bool.isRequired,
[PHASE_ROLLOVER_ALIAS]: PropTypes.string.isRequired,
[PHASE_ROLLOVER_MINIMUM_AGE]: PropTypes.oneOfType([PropTypes.number, PropTypes.string])
.isRequired,
[PHASE_ROLLOVER_MINIMUM_AGE_UNITS]: PropTypes.string.isRequired,
[PHASE_NODE_ATTRS]: PropTypes.string.isRequired,
[PHASE_REPLICA_COUNT]: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,
}).isRequired,
};
render() {
const {
@ -100,8 +87,8 @@ class ColdPhaseUi extends PureComponent {
}
id={`${PHASE_COLD}-${PHASE_ENABLED}`}
checked={phaseData[PHASE_ENABLED]}
onChange={async e => {
await setPhaseData(PHASE_ENABLED, e.target.checked);
onChange={e => {
setPhaseData(PHASE_ENABLED, e.target.checked);
}}
aria-controls="coldPhaseContent"
/>
@ -157,8 +144,8 @@ class ColdPhaseUi extends PureComponent {
<EuiFieldNumber
id={`${PHASE_COLD}-${PHASE_REPLICA_COUNT}`}
value={phaseData[PHASE_REPLICA_COUNT]}
onChange={async e => {
await setPhaseData(PHASE_REPLICA_COUNT, e.target.value);
onChange={e => {
setPhaseData(PHASE_REPLICA_COUNT, e.target.value);
}}
min={0}
/>
@ -197,8 +184,8 @@ class ColdPhaseUi extends PureComponent {
<EuiSwitch
data-test-subj="freezeSwitch"
checked={phaseData[PHASE_FREEZE_ENABLED]}
onChange={async e => {
await setPhaseData(PHASE_FREEZE_ENABLED, e.target.checked);
onChange={e => {
setPhaseData(PHASE_FREEZE_ENABLED, e.target.checked);
}}
label={freezeLabel}
aria-label={freezeLabel}

View file

@ -19,8 +19,6 @@ import {
import {
PHASE_DELETE,
PHASE_ENABLED,
PHASE_ROLLOVER_MINIMUM_AGE,
PHASE_ROLLOVER_MINIMUM_AGE_UNITS,
} from '../../../../store/constants';
import { ActiveBadge, PhaseErrorMessage } from '../../../components';
@ -29,14 +27,6 @@ export class DeletePhase extends PureComponent {
setPhaseData: PropTypes.func.isRequired,
isShowingErrors: PropTypes.bool.isRequired,
errors: PropTypes.object.isRequired,
phaseData: PropTypes.shape({
[PHASE_ENABLED]: PropTypes.bool.isRequired,
[PHASE_ROLLOVER_MINIMUM_AGE]: PropTypes.oneOfType([
PropTypes.number,
PropTypes.string
]).isRequired,
[PHASE_ROLLOVER_MINIMUM_AGE_UNITS]: PropTypes.string.isRequired
}).isRequired
};
render() {
@ -85,8 +75,8 @@ export class DeletePhase extends PureComponent {
}
id={`${PHASE_DELETE}-${PHASE_ENABLED}`}
checked={phaseData[PHASE_ENABLED]}
onChange={async e => {
await setPhaseData(PHASE_ENABLED, e.target.checked);
onChange={e => {
setPhaseData(PHASE_ENABLED, e.target.checked);
}}
aria-controls="deletePhaseContent"
/>

View file

@ -21,13 +21,12 @@ import {
import { LearnMoreLink, ActiveBadge, PhaseErrorMessage } from '../../../components';
import {
PHASE_HOT,
PHASE_ROLLOVER_ALIAS,
PHASE_ROLLOVER_MAX_AGE,
PHASE_ROLLOVER_MAX_AGE_UNITS,
PHASE_ROLLOVER_MAX_DOCUMENTS,
PHASE_ROLLOVER_MAX_SIZE_STORED,
PHASE_ROLLOVER_MAX_SIZE_STORED_UNITS,
PHASE_ROLLOVER_ENABLED,
MAX_SIZE_TYPE_DOCUMENT
} from '../../../../store/constants';
import { SetPriorityInput } from '../set_priority_input';
@ -39,19 +38,6 @@ class HotPhaseUi extends PureComponent {
isShowingErrors: PropTypes.bool.isRequired,
errors: PropTypes.object.isRequired,
phaseData: PropTypes.shape({
[PHASE_ROLLOVER_ALIAS]: PropTypes.string.isRequired,
[PHASE_ROLLOVER_MAX_AGE]: PropTypes.oneOfType([
PropTypes.number,
PropTypes.string
]).isRequired,
[PHASE_ROLLOVER_MAX_AGE_UNITS]: PropTypes.string.isRequired,
[PHASE_ROLLOVER_MAX_SIZE_STORED]: PropTypes.oneOfType([
PropTypes.number,
PropTypes.string
]).isRequired,
[PHASE_ROLLOVER_MAX_SIZE_STORED_UNITS]: PropTypes.string.isRequired
}).isRequired
};
render() {
@ -63,7 +49,6 @@ class HotPhaseUi extends PureComponent {
intl,
setWarmPhaseOnRollover
} = this.props;
return (
<Fragment>
<EuiDescribedFormGroup
@ -150,8 +135,8 @@ class HotPhaseUi extends PureComponent {
<EuiFieldNumber
id={`${PHASE_HOT}-${PHASE_ROLLOVER_MAX_SIZE_STORED}`}
value={phaseData[PHASE_ROLLOVER_MAX_SIZE_STORED]}
onChange={async e => {
await setPhaseData(
onChange={e => {
setPhaseData(
PHASE_ROLLOVER_MAX_SIZE_STORED,
e.target.value
);
@ -174,8 +159,8 @@ class HotPhaseUi extends PureComponent {
defaultMessage: 'Maximum index size units'
})}
value={phaseData[PHASE_ROLLOVER_MAX_SIZE_STORED_UNITS]}
onChange={async e => {
await setPhaseData(
onChange={e => {
setPhaseData(
PHASE_ROLLOVER_MAX_SIZE_STORED_UNITS,
e.target.value
);
@ -185,9 +170,9 @@ class HotPhaseUi extends PureComponent {
id: 'xpack.indexLifecycleMgmt.hotPhase.gigabytesLabel',
defaultMessage: 'gigabytes'
}) },
{ value: MAX_SIZE_TYPE_DOCUMENT, text: intl.formatMessage({
id: 'xpack.indexLifecycleMgmt.hotPhase.documentsLabel',
defaultMessage: 'documents'
{ value: 'mb', text: intl.formatMessage({
id: 'xpack.indexLifecycleMgmt.hotPhase.megabytesLabel',
defaultMessage: 'megabytes'
}) }
]}
/>
@ -195,6 +180,33 @@ class HotPhaseUi extends PureComponent {
</EuiFlexItem>
</EuiFlexGroup>
<EuiSpacer />
<EuiFlexGroup>
<EuiFlexItem style={{ maxWidth: 188 }}>
<ErrableFormRow
id={`${PHASE_HOT}-${PHASE_ROLLOVER_MAX_DOCUMENTS}`}
label={intl.formatMessage({
id: 'xpack.indexLifecycleMgmt.hotPhase.maximumDocumentsLabel',
defaultMessage: 'Maximum documents'
})}
errorKey={PHASE_ROLLOVER_MAX_DOCUMENTS}
isShowingErrors={isShowingErrors}
errors={errors}
>
<EuiFieldNumber
id={`${PHASE_HOT}-${PHASE_ROLLOVER_MAX_DOCUMENTS}`}
value={phaseData[PHASE_ROLLOVER_MAX_DOCUMENTS]}
onChange={e => {
setPhaseData(
PHASE_ROLLOVER_MAX_DOCUMENTS,
e.target.value
);
}}
min={1}
/>
</ErrableFormRow>
</EuiFlexItem>
</EuiFlexGroup>
<EuiSpacer />
<EuiFlexGroup>
<EuiFlexItem style={{ maxWidth: 188 }}>
<ErrableFormRow
@ -210,8 +222,8 @@ class HotPhaseUi extends PureComponent {
<EuiFieldNumber
id={`${PHASE_HOT}-${PHASE_ROLLOVER_MAX_AGE}`}
value={phaseData[PHASE_ROLLOVER_MAX_AGE]}
onChange={async e => {
await setPhaseData(PHASE_ROLLOVER_MAX_AGE, e.target.value);
onChange={e => {
setPhaseData(PHASE_ROLLOVER_MAX_AGE, e.target.value);
}}
min={1}
/>
@ -231,8 +243,8 @@ class HotPhaseUi extends PureComponent {
defaultMessage: 'Maximum age units'
})}
value={phaseData[PHASE_ROLLOVER_MAX_AGE_UNITS]}
onChange={async e => {
await setPhaseData(
onChange={e => {
setPhaseData(
PHASE_ROLLOVER_MAX_AGE_UNITS,
e.target.value
);

View file

@ -88,8 +88,8 @@ class NodeAllocationUi extends Component {
id={`${phase}-${PHASE_NODE_ATTRS}`}
value={phaseData[PHASE_NODE_ATTRS] || ' '}
options={nodeOptions}
onChange={async e => {
await setPhaseData(PHASE_NODE_ATTRS, e.target.value);
onChange={e => {
setPhaseData(PHASE_NODE_ATTRS, e.target.value);
}}
/>

View file

@ -59,8 +59,8 @@ export const SetPriorityInput = props => {
<EuiFieldNumber
id={`${phase}-${PHASE_INDEX_PRIORITY}`}
value={phaseData[PHASE_INDEX_PRIORITY]}
onChange={async e => {
await setPhaseData(PHASE_INDEX_PRIORITY, e.target.value);
onChange={e => {
setPhaseData(PHASE_INDEX_PRIORITY, e.target.value);
}}
min={0}
/>

View file

@ -21,14 +21,10 @@ import {
PHASE_WARM,
PHASE_ENABLED,
WARM_PHASE_ON_ROLLOVER,
PHASE_ROLLOVER_ALIAS,
PHASE_FORCE_MERGE_ENABLED,
PHASE_FORCE_MERGE_SEGMENTS,
PHASE_NODE_ATTRS,
PHASE_PRIMARY_SHARD_COUNT,
PHASE_REPLICA_COUNT,
PHASE_ROLLOVER_MINIMUM_AGE,
PHASE_ROLLOVER_MINIMUM_AGE_UNITS,
PHASE_SHRINK_ENABLED,
} from '../../../../store/constants';
import { SetPriorityInput } from '../set_priority_input';
@ -43,21 +39,6 @@ class WarmPhaseUi extends PureComponent {
isShowingErrors: PropTypes.bool.isRequired,
errors: PropTypes.object.isRequired,
phaseData: PropTypes.shape({
[PHASE_ENABLED]: PropTypes.bool.isRequired,
[WARM_PHASE_ON_ROLLOVER]: PropTypes.bool.isRequired,
[PHASE_ROLLOVER_ALIAS]: PropTypes.string.isRequired,
[PHASE_FORCE_MERGE_ENABLED]: PropTypes.bool.isRequired,
[PHASE_FORCE_MERGE_SEGMENTS]: PropTypes.oneOfType([PropTypes.number, PropTypes.string])
.isRequired,
[PHASE_NODE_ATTRS]: PropTypes.string.isRequired,
[PHASE_PRIMARY_SHARD_COUNT]: PropTypes.oneOfType([PropTypes.number, PropTypes.string])
.isRequired,
[PHASE_REPLICA_COUNT]: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,
[PHASE_ROLLOVER_MINIMUM_AGE]: PropTypes.oneOfType([PropTypes.number, PropTypes.string])
.isRequired,
[PHASE_ROLLOVER_MINIMUM_AGE_UNITS]: PropTypes.string.isRequired,
}).isRequired,
};
render() {
const {
@ -117,8 +98,8 @@ class WarmPhaseUi extends PureComponent {
}
id={`${PHASE_WARM}-${PHASE_ENABLED}`}
checked={phaseData[PHASE_ENABLED]}
onChange={async e => {
await setPhaseData(PHASE_ENABLED, e.target.checked);
onChange={e => {
setPhaseData(PHASE_ENABLED, e.target.checked);
}}
aria-controls="warmPhaseContent"
/>
@ -138,8 +119,8 @@ class WarmPhaseUi extends PureComponent {
label={moveToWarmPhaseOnRolloverLabel}
id={`${PHASE_WARM}-${WARM_PHASE_ON_ROLLOVER}`}
checked={phaseData[WARM_PHASE_ON_ROLLOVER]}
onChange={async e => {
await setPhaseData(WARM_PHASE_ON_ROLLOVER, e.target.checked);
onChange={e => {
setPhaseData(WARM_PHASE_ON_ROLLOVER, e.target.checked);
}}
/>
</EuiFormRow>
@ -192,8 +173,8 @@ class WarmPhaseUi extends PureComponent {
<EuiFieldNumber
id={`${PHASE_WARM}-${PHASE_REPLICA_COUNT}`}
value={phaseData[PHASE_REPLICA_COUNT]}
onChange={async e => {
await setPhaseData(PHASE_REPLICA_COUNT, e.target.value);
onChange={e => {
setPhaseData(PHASE_REPLICA_COUNT, e.target.value);
}}
min={0}
/>
@ -233,8 +214,8 @@ class WarmPhaseUi extends PureComponent {
<EuiSwitch
data-test-subj="shrinkSwitch"
checked={phaseData[PHASE_SHRINK_ENABLED]}
onChange={async e => {
await setPhaseData(PHASE_SHRINK_ENABLED, e.target.checked);
onChange={e => {
setPhaseData(PHASE_SHRINK_ENABLED, e.target.checked);
}}
label={shrinkLabel}
aria-label={shrinkLabel}
@ -259,8 +240,8 @@ class WarmPhaseUi extends PureComponent {
<EuiFieldNumber
id={`${PHASE_WARM}-${PHASE_PRIMARY_SHARD_COUNT}`}
value={phaseData[PHASE_PRIMARY_SHARD_COUNT]}
onChange={async e => {
await setPhaseData(PHASE_PRIMARY_SHARD_COUNT, e.target.value);
onChange={e => {
setPhaseData(PHASE_PRIMARY_SHARD_COUNT, e.target.value);
}}
min={1}
/>
@ -299,8 +280,8 @@ class WarmPhaseUi extends PureComponent {
label={forcemergeLabel}
aria-label={forcemergeLabel}
checked={phaseData[PHASE_FORCE_MERGE_ENABLED]}
onChange={async e => {
await setPhaseData(PHASE_FORCE_MERGE_ENABLED, e.target.checked);
onChange={e => {
setPhaseData(PHASE_FORCE_MERGE_ENABLED, e.target.checked);
}}
aria-controls="forcemergeContent"
/>
@ -321,8 +302,8 @@ class WarmPhaseUi extends PureComponent {
<EuiFieldNumber
id={`${PHASE_WARM}-${PHASE_FORCE_MERGE_SEGMENTS}`}
value={phaseData[PHASE_FORCE_MERGE_SEGMENTS]}
onChange={async e => {
await setPhaseData(PHASE_FORCE_MERGE_SEGMENTS, e.target.value);
onChange={e => {
setPhaseData(PHASE_FORCE_MERGE_SEGMENTS, e.target.value);
}}
min={1}
/>

View file

@ -13,14 +13,13 @@ export const PHASE_DELETE = 'delete';
export const PHASE_ENABLED = 'phaseEnabled';
export const MAX_SIZE_TYPE_DOCUMENT = 'd';
export const PHASE_ROLLOVER_ENABLED = 'rolloverEnabled';
export const WARM_PHASE_ON_ROLLOVER = 'warmPhaseOnRollover';
export const PHASE_ROLLOVER_ALIAS = 'selectedAlias';
export const PHASE_ROLLOVER_MAX_AGE = 'selectedMaxAge';
export const PHASE_ROLLOVER_MAX_AGE_UNITS = 'selectedMaxAgeUnits';
export const PHASE_ROLLOVER_MAX_SIZE_STORED = 'selectedMaxSizeStored';
export const PHASE_ROLLOVER_MAX_DOCUMENTS = 'selectedMaxDocuments';
export const PHASE_ROLLOVER_MAX_SIZE_STORED_UNITS = 'selectedMaxSizeStoredUnits';
export const PHASE_ROLLOVER_MINIMUM_AGE = 'selectedMinimumAge';
export const PHASE_ROLLOVER_MINIMUM_AGE_UNITS = 'selectedMinimumAgeUnits';
@ -47,6 +46,7 @@ export const PHASE_ATTRIBUTES_THAT_ARE_NUMBERS = [
...PHASE_ATTRIBUTES_THAT_ARE_NUMBERS_VALIDATE,
PHASE_ROLLOVER_MAX_AGE,
PHASE_ROLLOVER_MAX_SIZE_STORED,
PHASE_ROLLOVER_MAX_DOCUMENTS
];
export const STRUCTURE_INDEX_TEMPLATE = 'indexTemplate';
@ -70,6 +70,7 @@ export const ERROR_STRUCTURE = {
[PHASE_ROLLOVER_MAX_AGE]: [],
[PHASE_ROLLOVER_MAX_AGE_UNITS]: [],
[PHASE_ROLLOVER_MAX_SIZE_STORED]: [],
[PHASE_ROLLOVER_MAX_DOCUMENTS]: [],
[PHASE_ROLLOVER_MAX_SIZE_STORED_UNITS]: [],
[PHASE_INDEX_PRIORITY]: []
},

View file

@ -23,4 +23,8 @@ export const defaultColdPhase = {
[PHASE_REPLICA_COUNT]: '',
[PHASE_FREEZE_ENABLED]: false,
[PHASE_INDEX_PRIORITY]: 0
};
export const defaultEmptyColdPhase = {
...defaultColdPhase,
[PHASE_INDEX_PRIORITY]: ''
};

View file

@ -17,4 +17,5 @@ export const defaultDeletePhase = {
[PHASE_ROLLOVER_ALIAS]: '',
[PHASE_ROLLOVER_MINIMUM_AGE]: '',
[PHASE_ROLLOVER_MINIMUM_AGE_UNITS]: 'd'
};
};
export const defaultEmptyDeletePhase = defaultDeletePhase;

View file

@ -9,18 +9,27 @@ import {
PHASE_ROLLOVER_MAX_AGE,
PHASE_ROLLOVER_MAX_AGE_UNITS,
PHASE_ROLLOVER_MAX_SIZE_STORED,
PHASE_ROLLOVER_MAX_DOCUMENTS,
PHASE_ROLLOVER_MAX_SIZE_STORED_UNITS,
PHASE_ROLLOVER_ALIAS,
PHASE_INDEX_PRIORITY
} from '../constants';
export const defaultHotPhase = {
[PHASE_ENABLED]: true,
[PHASE_ROLLOVER_ENABLED]: true,
[PHASE_ROLLOVER_ALIAS]: '',
[PHASE_ROLLOVER_MAX_AGE]: 30,
[PHASE_ROLLOVER_MAX_AGE_UNITS]: 'd',
[PHASE_ROLLOVER_MAX_SIZE_STORED]: 50,
[PHASE_ROLLOVER_MAX_SIZE_STORED_UNITS]: 'gb',
[PHASE_INDEX_PRIORITY]: 100
[PHASE_INDEX_PRIORITY]: 100,
[PHASE_ROLLOVER_MAX_DOCUMENTS]: ''
};
export const defaultEmptyHotPhase = {
...defaultHotPhase,
[PHASE_ENABLED]: false,
[PHASE_ROLLOVER_ENABLED]: false,
[PHASE_ROLLOVER_MAX_AGE]: '',
[PHASE_ROLLOVER_MAX_SIZE_STORED]: '',
[PHASE_INDEX_PRIORITY]: '',
[PHASE_ROLLOVER_MAX_DOCUMENTS]: ''
};

View file

@ -4,7 +4,7 @@
* you may not use this file except in compliance with the Elastic License.
*/
export { defaultDeletePhase } from './delete_phase';
export { defaultColdPhase } from './cold_phase';
export { defaultHotPhase } from './hot_phase';
export { defaultWarmPhase } from './warm_phase';
export * from './delete_phase';
export * from './cold_phase';
export * from './hot_phase';
export * from './warm_phase';

View file

@ -31,4 +31,9 @@ export const defaultWarmPhase = {
[PHASE_REPLICA_COUNT]: '',
[WARM_PHASE_ON_ROLLOVER]: true,
[PHASE_INDEX_PRIORITY]: 50
};
export const defaultEmptyWarmPhase = {
...defaultWarmPhase,
[WARM_PHASE_ON_ROLLOVER]: false,
[PHASE_INDEX_PRIORITY]: ''
};

View file

@ -23,7 +23,8 @@ import {
PHASE_FORCE_MERGE_SEGMENTS,
PHASE_REPLICA_COUNT,
WARM_PHASE_ON_ROLLOVER,
PHASE_INDEX_PRIORITY
PHASE_INDEX_PRIORITY,
PHASE_ROLLOVER_MAX_DOCUMENTS
} from '../constants';
import {
getPhase,
@ -49,6 +50,10 @@ export const maximumSizeRequiredMessage =
i18n.translate('xpack.indexLifecycleMgmt.editPolicy.maximumIndexSizeMissingError', {
defaultMessage: 'A maximum index size is required.'
});
export const maximumDocumentsRequiredMessage =
i18n.translate('xpack.indexLifecycleMgmt.editPolicy.maximumDocumentsMissingError', {
defaultMessage: 'Maximum documents is required.'
});
export const positiveNumbersAboveZeroErrorMessage =
i18n.translate('xpack.indexLifecycleMgmt.editPolicy.positiveNumberAboveZeroRequiredError', {
defaultMessage: 'Only numbers above 0 are allowed.'
@ -97,8 +102,9 @@ export const validatePhase = (type, phase, errors) => {
}
if (phase[PHASE_ROLLOVER_ENABLED]) {
if (
!isNumber(phase[PHASE_ROLLOVER_MAX_AGE]) &&
!isNumber(phase[PHASE_ROLLOVER_MAX_SIZE_STORED])
!isNumber(phase[PHASE_ROLLOVER_MAX_AGE])
&& !isNumber(phase[PHASE_ROLLOVER_MAX_SIZE_STORED])
&& !isNumber(phase[PHASE_ROLLOVER_MAX_DOCUMENTS])
) {
phaseErrors[PHASE_ROLLOVER_MAX_AGE] = [
maximumAgeRequiredMessage
@ -106,6 +112,9 @@ export const validatePhase = (type, phase, errors) => {
phaseErrors[PHASE_ROLLOVER_MAX_SIZE_STORED] = [
maximumSizeRequiredMessage
];
phaseErrors[PHASE_ROLLOVER_MAX_DOCUMENTS] = [
maximumDocumentsRequiredMessage
];
}
if (isNumber(phase[PHASE_ROLLOVER_MAX_AGE]) && phase[PHASE_ROLLOVER_MAX_AGE] < 1) {
phaseErrors[PHASE_ROLLOVER_MAX_AGE] = [
@ -117,6 +126,11 @@ export const validatePhase = (type, phase, errors) => {
positiveNumbersAboveZeroErrorMessage
];
}
if (isNumber(phase[PHASE_ROLLOVER_MAX_DOCUMENTS]) && phase[PHASE_ROLLOVER_MAX_DOCUMENTS] < 1) {
phaseErrors[PHASE_ROLLOVER_MAX_DOCUMENTS] = [
positiveNumbersAboveZeroErrorMessage
];
}
}
if (phase[PHASE_SHRINK_ENABLED]) {
if (!isNumber(phase[PHASE_PRIMARY_SHARD_COUNT])) {

View file

@ -8,12 +8,6 @@
import { createSelector } from 'reselect';
import { Pager } from '@elastic/eui';
import {
defaultColdPhase,
defaultDeletePhase,
defaultHotPhase,
defaultWarmPhase,
} from '../defaults';
import {
PHASE_HOT,
PHASE_WARM,
@ -33,12 +27,18 @@ import {
PHASE_REPLICA_COUNT,
PHASE_ENABLED,
PHASE_ATTRIBUTES_THAT_ARE_NUMBERS,
MAX_SIZE_TYPE_DOCUMENT,
WARM_PHASE_ON_ROLLOVER,
PHASE_SHRINK_ENABLED,
PHASE_FREEZE_ENABLED,
PHASE_INDEX_PRIORITY
PHASE_INDEX_PRIORITY,
PHASE_ROLLOVER_MAX_DOCUMENTS
} from '../constants';
import {
defaultEmptyDeletePhase,
defaultEmptyColdPhase,
defaultEmptyWarmPhase,
defaultEmptyHotPhase
} from '../defaults';
import { filterItems, sortTable } from '../../services';
@ -127,15 +127,14 @@ export const isEmptyObject = (obj) => {
return Object.entries(obj).length === 0 && obj.constructor === Object;
};
export const phaseFromES = (phase, phaseName, defaultPolicy) => {
const policy = { ...defaultPolicy };
export const phaseFromES = (phase, phaseName, defaultEmptyPolicy) => {
const policy = { ...defaultEmptyPolicy };
if (!phase) {
return policy;
}
policy[PHASE_ENABLED] = true;
policy[PHASE_ROLLOVER_ENABLED] = false;
if (phase.min_age) {
if (phaseName === PHASE_WARM && phase.min_age === '0ms') {
@ -149,7 +148,8 @@ export const phaseFromES = (phase, phaseName, defaultPolicy) => {
}
}
if (phaseName === PHASE_WARM) {
policy[PHASE_SHRINK_ENABLED] = !!(phase.actions && phase.actions.shrink);
policy[PHASE_SHRINK_ENABLED] = false;
policy[PHASE_FORCE_MERGE_ENABLED] = false;
}
if (phase.actions) {
const actions = phase.actions;
@ -172,8 +172,7 @@ export const phaseFromES = (phase, phaseName, defaultPolicy) => {
policy[PHASE_ROLLOVER_MAX_SIZE_STORED_UNITS] = maxSizeUnits;
}
if (rollover.max_docs) {
policy[PHASE_ROLLOVER_MAX_SIZE_STORED] = rollover.max_docs;
policy[PHASE_ROLLOVER_MAX_SIZE_STORED_UNITS] = MAX_SIZE_TYPE_DOCUMENT;
policy[PHASE_ROLLOVER_MAX_DOCUMENTS] = rollover.max_docs;
}
}
@ -214,10 +213,10 @@ export const policyFromES = (policy) => {
return {
name,
phases: {
[PHASE_HOT]: phaseFromES(phases[PHASE_HOT], PHASE_HOT, defaultHotPhase),
[PHASE_WARM]: phaseFromES(phases[PHASE_WARM], PHASE_WARM, defaultWarmPhase),
[PHASE_COLD]: phaseFromES(phases[PHASE_COLD], PHASE_COLD, defaultColdPhase),
[PHASE_DELETE]: phaseFromES(phases[PHASE_DELETE], PHASE_DELETE, defaultDeletePhase)
[PHASE_HOT]: phaseFromES(phases[PHASE_HOT], PHASE_HOT, defaultEmptyHotPhase),
[PHASE_WARM]: phaseFromES(phases[PHASE_WARM], PHASE_WARM, defaultEmptyWarmPhase),
[PHASE_COLD]: phaseFromES(phases[PHASE_COLD], PHASE_COLD, defaultEmptyColdPhase),
[PHASE_DELETE]: phaseFromES(phases[PHASE_DELETE], PHASE_DELETE, defaultEmptyDeletePhase)
},
isNew: false,
saveAsNew: false
@ -245,13 +244,12 @@ export const phaseToES = (phase, originalEsPhase) => {
}`;
}
if (isNumber(phase[PHASE_ROLLOVER_MAX_SIZE_STORED])) {
if (phase[PHASE_ROLLOVER_MAX_SIZE_STORED_UNITS] === MAX_SIZE_TYPE_DOCUMENT) {
esPhase.actions.rollover.max_docs = phase[PHASE_ROLLOVER_MAX_SIZE_STORED];
} else {
esPhase.actions.rollover.max_size = `${phase[PHASE_ROLLOVER_MAX_SIZE_STORED]}${
phase[PHASE_ROLLOVER_MAX_SIZE_STORED_UNITS]
}`;
}
esPhase.actions.rollover.max_size = `${phase[PHASE_ROLLOVER_MAX_SIZE_STORED]}${
phase[PHASE_ROLLOVER_MAX_SIZE_STORED_UNITS]
}`;
}
if (isNumber(phase[PHASE_ROLLOVER_MAX_DOCUMENTS])) {
esPhase.actions.rollover.max_docs = phase[PHASE_ROLLOVER_MAX_DOCUMENTS];
}
} else {
delete esPhase.actions.rollover;

View file

@ -4227,7 +4227,6 @@
"xpack.indexLifecycleMgmt.editPolicy.warmPhase.warmPhaseDescriptionMessage": "您仍在查询自己的索引,但其为只读。您可以将分片分配给效率较低的硬件。为了获取更快的搜索,您可以减少分片数目并强制合并段。",
"xpack.indexLifecycleMgmt.editPolicy.warmPhase.warmPhaseLabel": "温阶段",
"xpack.indexLifecycleMgmt.hotPhase.daysLabel": "天",
"xpack.indexLifecycleMgmt.hotPhase.documentsLabel": "文档",
"xpack.indexLifecycleMgmt.hotPhase.enableRolloverLabel": "启用滚动更新",
"xpack.indexLifecycleMgmt.hotPhase.gigabytesLabel": "千兆字节",
"xpack.indexLifecycleMgmt.hotPhase.hoursLabel": "小时",