mirror of
https://github.com/ceph/ceph
synced 2025-02-23 02:57:21 +00:00
mgr/dashboard: Allow the decrease of pg's of an existing pool (#27785)
mgr/dashboard: Allow the decrease of pg's of an existing pool Reviewed-by: Alfonso Martínez <almartin@redhat.com> Reviewed-by: Laura Paduano <lpaduano@suse.com> Reviewed-by: Tiago Melo <tmelo@suse.com>
This commit is contained in:
commit
22d6a82ad9
@ -235,7 +235,10 @@ class PoolTest(DashboardTestCase):
|
||||
# they can't recover from the resulting warning state.
|
||||
# Feel free to test it locally.
|
||||
# {
|
||||
# 'pg_num': '8',
|
||||
# 'pg_num': '2', # Decrease PGs
|
||||
# },
|
||||
# {
|
||||
# 'pg_num': '8', # Increase PGs
|
||||
# },
|
||||
{
|
||||
'application_metadata': ['rgw'],
|
||||
|
@ -97,10 +97,6 @@
|
||||
<span class="help-block"
|
||||
*ngIf="form.showError('pgNum', formDir, '34')"
|
||||
i18n>Your cluster can't handle this many PGs. Please recalculate the PG amount needed.</span>
|
||||
<span class="help-block"
|
||||
*ngIf="form.showError('pgNum', formDir, 'noDecrease')"
|
||||
i18n>You can only increase the number of PGs of an existing pool.
|
||||
Currently your pool has {{ data.pool.pg_num }} PGs.</span>
|
||||
<span class="help-block">
|
||||
<a i18n
|
||||
target="_blank"
|
||||
|
@ -48,6 +48,16 @@ describe('PoolFormComponent', () => {
|
||||
return control;
|
||||
};
|
||||
|
||||
const testPgUpdate = (pgs, jump, returnValue) => {
|
||||
if (pgs) {
|
||||
setPgNum(pgs);
|
||||
}
|
||||
if (jump) {
|
||||
setPgNum(form.getValue('pgNum') + jump);
|
||||
}
|
||||
expect(form.getValue('pgNum')).toBe(returnValue);
|
||||
};
|
||||
|
||||
const createCrushRule = ({
|
||||
id = 0,
|
||||
name = 'somePoolName',
|
||||
@ -260,7 +270,7 @@ describe('PoolFormComponent', () => {
|
||||
component.ngOnInit(); // Switches form into edit mode
|
||||
formHelper.setValue('poolType', 'erasure');
|
||||
fixture.detectChanges();
|
||||
formHelper.expectError(setPgNum('8'), 'noDecrease');
|
||||
formHelper.expectValid(setPgNum('8'));
|
||||
});
|
||||
|
||||
it('is valid if pgNum, poolType and name are valid', () => {
|
||||
@ -579,21 +589,6 @@ describe('PoolFormComponent', () => {
|
||||
});
|
||||
|
||||
describe('pg number changes', () => {
|
||||
const setPgs = (pgs) => {
|
||||
formHelper.setValue('pgNum', pgs);
|
||||
fixture.debugElement.query(By.css('#pgNum')).nativeElement.dispatchEvent(new Event('blur'));
|
||||
};
|
||||
|
||||
const testPgUpdate = (pgs, jump, returnValue) => {
|
||||
if (pgs) {
|
||||
setPgs(pgs);
|
||||
}
|
||||
if (jump) {
|
||||
setPgs(form.getValue('pgNum') + jump);
|
||||
}
|
||||
expect(form.getValue('pgNum')).toBe(returnValue);
|
||||
};
|
||||
|
||||
beforeEach(() => {
|
||||
formHelper.setValue('crushRule', {
|
||||
min_size: 1,
|
||||
@ -1050,9 +1045,14 @@ describe('PoolFormComponent', () => {
|
||||
expect(form.getValue('ratio')).toBe(pool.options.compression_required_ratio);
|
||||
});
|
||||
|
||||
it('is only be possible to use the same or more pgs like before', () => {
|
||||
it('updates pgs on every change', () => {
|
||||
testPgUpdate(undefined, -1, 16);
|
||||
testPgUpdate(undefined, -1, 8);
|
||||
});
|
||||
|
||||
it('is possible to use less or more pgs than before', () => {
|
||||
formHelper.expectValid(setPgNum(64));
|
||||
formHelper.expectError(setPgNum(4), 'noDecrease');
|
||||
formHelper.expectValid(setPgNum(4));
|
||||
});
|
||||
|
||||
describe('submit', () => {
|
||||
|
@ -115,7 +115,7 @@ export class PoolFormComponent implements OnInit {
|
||||
this.form = new CdFormGroup(
|
||||
{
|
||||
name: new FormControl('', {
|
||||
validators: [Validators.pattern(/^[\.A-Za-z0-9_/-]+$/), Validators.required]
|
||||
validators: [Validators.pattern(/^[.A-Za-z0-9_/-]+$/), Validators.required]
|
||||
}),
|
||||
poolType: new FormControl('', {
|
||||
validators: [Validators.required]
|
||||
@ -230,6 +230,7 @@ export class PoolFormComponent implements OnInit {
|
||||
this.form.silentSet(controlName, value);
|
||||
}
|
||||
});
|
||||
this.data.pgs = this.form.getValue('pgNum');
|
||||
this.data.applications.selected = pool.application_metadata;
|
||||
}
|
||||
|
||||
@ -402,11 +403,6 @@ export class PoolFormComponent implements OnInit {
|
||||
|
||||
private setComplexValidators() {
|
||||
if (this.editing) {
|
||||
this.form
|
||||
.get('pgNum')
|
||||
.setValidators(
|
||||
CdValidators.custom('noDecrease', (pgs) => this.data.pool && pgs < this.data.pool.pg_num)
|
||||
);
|
||||
this.form
|
||||
.get('name')
|
||||
.setValidators([
|
||||
|
@ -1347,11 +1347,11 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/ceph/pool/pool-form/pool-form.component.html</context>
|
||||
<context context-type="linenumber">218</context>
|
||||
<context context-type="linenumber">214</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/ceph/pool/pool-form/pool-form.component.html</context>
|
||||
<context context-type="linenumber">341</context>
|
||||
<context context-type="linenumber">337</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/ceph/rgw/rgw-bucket-form/rgw-bucket-form.component.html</context>
|
||||
@ -1884,7 +1884,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/ceph/pool/pool-form/pool-form.component.html</context>
|
||||
<context context-type="linenumber">455</context>
|
||||
<context context-type="linenumber">451</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/ceph/rgw/rgw-bucket-form/rgw-bucket-form.component.html</context>
|
||||
@ -2126,7 +2126,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/ceph/pool/pool-form/pool-form.component.html</context>
|
||||
<context context-type="linenumber">270</context>
|
||||
<context context-type="linenumber">266</context>
|
||||
</context-group>
|
||||
</trans-unit><trans-unit id="6834fa6b43d1ecbdf147c48dd9c4d72f1484571d" datatype="html">
|
||||
<source>Source</source>
|
||||
@ -3136,7 +3136,7 @@
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/ceph/pool/pool-form/pool-form.component.html</context>
|
||||
<context context-type="linenumber">314</context>
|
||||
<context context-type="linenumber">310</context>
|
||||
</context-group>
|
||||
</trans-unit><trans-unit id="32ca348ef926b0a6a7a780b8b64c3a8239895cec" datatype="html">
|
||||
<source>Peer clusters must be removed prior to disabling mirror.</source>
|
||||
@ -3397,205 +3397,198 @@
|
||||
<context context-type="sourcefile">app/ceph/pool/pool-form/pool-form.component.html</context>
|
||||
<context context-type="linenumber">99</context>
|
||||
</context-group>
|
||||
</trans-unit><trans-unit id="62148abc31999dcfa38220cb09c33c8148b4b53a" datatype="html">
|
||||
<source>You can only increase the number of PGs of an existing pool.
|
||||
Currently your pool has <x id="INTERPOLATION" equiv-text="{{ data.pool.pg_num }}"/> PGs.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/ceph/pool/pool-form/pool-form.component.html</context>
|
||||
<context context-type="linenumber">102</context>
|
||||
</context-group>
|
||||
</trans-unit><trans-unit id="80ac68cd883369dac20688bc32b4cb33291b5e50" datatype="html">
|
||||
<source>Calculation help</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/ceph/pool/pool-form/pool-form.component.html</context>
|
||||
<context context-type="linenumber">107</context>
|
||||
<context context-type="linenumber">103</context>
|
||||
</context-group>
|
||||
</trans-unit><trans-unit id="37dd747f97e873d4280500da71b0076805f530a1" datatype="html">
|
||||
<source>The current PGs settings were calculated for you, you
|
||||
should make sure the values suit your needs before submit.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/ceph/pool/pool-form/pool-form.component.html</context>
|
||||
<context context-type="linenumber">111</context>
|
||||
<context context-type="linenumber">107</context>
|
||||
</context-group>
|
||||
</trans-unit><trans-unit id="33150f22ce5348aa6c499bd092c3f4f3695d62cc" datatype="html">
|
||||
<source>Crush ruleset</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/ceph/pool/pool-form/pool-form.component.html</context>
|
||||
<context context-type="linenumber">122</context>
|
||||
<context context-type="linenumber">118</context>
|
||||
</context-group>
|
||||
</trans-unit><trans-unit id="73a6b31116b3cc322af951daa0bafdc169e6c42e" datatype="html">
|
||||
<source>-- Select a crush rule --</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/ceph/pool/pool-form/pool-form.component.html</context>
|
||||
<context context-type="linenumber">130</context>
|
||||
<context context-type="linenumber">126</context>
|
||||
</context-group>
|
||||
</trans-unit><trans-unit id="92da80699921e89fb19372e25b8d0f3b9fa427fc" datatype="html">
|
||||
<source>Crush rule</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/ceph/pool/pool-form/pool-form.component.html</context>
|
||||
<context context-type="linenumber">151</context>
|
||||
<context context-type="linenumber">147</context>
|
||||
</context-group>
|
||||
</trans-unit><trans-unit id="5489e9f96835f469f6f728a00d8efa88ea5bc940" datatype="html">
|
||||
<source>Crush steps</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/ceph/pool/pool-form/pool-form.component.html</context>
|
||||
<context context-type="linenumber">157</context>
|
||||
<context context-type="linenumber">153</context>
|
||||
</context-group>
|
||||
</trans-unit><trans-unit id="54a53b1b402aafff5b992ee9b64e409fbfe9074f" datatype="html">
|
||||
<source>The rule can't be used in the current cluster as it has
|
||||
to few OSDs to meet the minimum required OSD by this rule.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/ceph/pool/pool-form/pool-form.component.html</context>
|
||||
<context context-type="linenumber">168</context>
|
||||
<context context-type="linenumber">164</context>
|
||||
</context-group>
|
||||
</trans-unit><trans-unit id="a43b2695131b48b76cebba676aba98a2bee17515" datatype="html">
|
||||
<source>Replicated size</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/ceph/pool/pool-form/pool-form.component.html</context>
|
||||
<context context-type="linenumber">179</context>
|
||||
<context context-type="linenumber">175</context>
|
||||
</context-group>
|
||||
</trans-unit><trans-unit id="7bff144a4c4dc63b0e18fff2617d61a7ebdf2b6c" datatype="html">
|
||||
<source>Minimum: <x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/></source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/ceph/pool/pool-form/pool-form.component.html</context>
|
||||
<context context-type="linenumber">193</context>
|
||||
<context context-type="linenumber">189</context>
|
||||
</context-group>
|
||||
</trans-unit><trans-unit id="1a9c54b41f6d58a74e5d0aa3429ed0c87a482551" datatype="html">
|
||||
<source>Maximum: <x id="INTERPOLATION" equiv-text="{{ getMaxSize() }}"/></source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/ceph/pool/pool-form/pool-form.component.html</context>
|
||||
<context context-type="linenumber">194</context>
|
||||
<context context-type="linenumber">190</context>
|
||||
</context-group>
|
||||
</trans-unit><trans-unit id="43c6dd9233d6a8242cec2b025d25c273244d8d61" datatype="html">
|
||||
<source>The size specified is out of range. A value from
|
||||
<x id="INTERPOLATION" equiv-text="{{ getMinSize() }}"/> to <x id="INTERPOLATION_1" equiv-text="{{ getMaxSize() }}"/> is valid.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/ceph/pool/pool-form/pool-form.component.html</context>
|
||||
<context context-type="linenumber">199</context>
|
||||
<context context-type="linenumber">195</context>
|
||||
</context-group>
|
||||
</trans-unit><trans-unit id="9de7dde00e2139cc4bd03b1837afbe72ad15a1ff" datatype="html">
|
||||
<source>Erasure code profile</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/ceph/pool/pool-form/pool-form.component.html</context>
|
||||
<context context-type="linenumber">209</context>
|
||||
<context context-type="linenumber">205</context>
|
||||
</context-group>
|
||||
</trans-unit><trans-unit id="39b4620e6bd444e0a57a0a5c03fa8c96d7fe5235" datatype="html">
|
||||
<source>-- No erasure code profile available --</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/ceph/pool/pool-form/pool-form.component.html</context>
|
||||
<context context-type="linenumber">221</context>
|
||||
<context context-type="linenumber">217</context>
|
||||
</context-group>
|
||||
</trans-unit><trans-unit id="498561757390d5528b263ce450d5f38efb00266d" datatype="html">
|
||||
<source>-- Select an erasure code profile --</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/ceph/pool/pool-form/pool-form.component.html</context>
|
||||
<context context-type="linenumber">224</context>
|
||||
<context context-type="linenumber">220</context>
|
||||
</context-group>
|
||||
</trans-unit><trans-unit id="1c870fb00256b8a5b9cb9cd1a124e6390b9bc639" datatype="html">
|
||||
<source>EC Overwrites</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/ceph/pool/pool-form/pool-form.component.html</context>
|
||||
<context context-type="linenumber">278</context>
|
||||
<context context-type="linenumber">274</context>
|
||||
</context-group>
|
||||
</trans-unit><trans-unit id="f1abafaeb40ce52355ddcc24686e3cd17b64e08a" datatype="html">
|
||||
<source>Applications</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/ceph/pool/pool-form/pool-form.component.html</context>
|
||||
<context context-type="linenumber">289</context>
|
||||
<context context-type="linenumber">285</context>
|
||||
</context-group>
|
||||
</trans-unit><trans-unit id="2208d63d5940ce656006a220102b1eb2b5e553da" datatype="html">
|
||||
<source>Compression</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/ceph/pool/pool-form/pool-form.component.html</context>
|
||||
<context context-type="linenumber">308</context>
|
||||
<context context-type="linenumber">304</context>
|
||||
</context-group>
|
||||
</trans-unit><trans-unit id="6c6f25c47da62ec597c6057a36ddfc3209811ec5" datatype="html">
|
||||
<source>Algorithm</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/ceph/pool/pool-form/pool-form.component.html</context>
|
||||
<context context-type="linenumber">333</context>
|
||||
<context context-type="linenumber">329</context>
|
||||
</context-group>
|
||||
</trans-unit><trans-unit id="4903231d42089325a28892c0fde1aed46b733ae6" datatype="html">
|
||||
<source>-- No erasure compression algorithm available --</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/ceph/pool/pool-form/pool-form.component.html</context>
|
||||
<context context-type="linenumber">344</context>
|
||||
<context context-type="linenumber">340</context>
|
||||
</context-group>
|
||||
</trans-unit><trans-unit id="5d68ddb254275f8f44221e9ad6d8ceeb59ca46a6" datatype="html">
|
||||
<source>Minimum blob size</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/ceph/pool/pool-form/pool-form.component.html</context>
|
||||
<context context-type="linenumber">358</context>
|
||||
<context context-type="linenumber">354</context>
|
||||
</context-group>
|
||||
</trans-unit><trans-unit id="fb2f176df80647137cbb02bbeb29e5dec707a400" datatype="html">
|
||||
<source>e.g., 128KiB</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/ceph/pool/pool-form/pool-form.component.html</context>
|
||||
<context context-type="linenumber">367</context>
|
||||
<context context-type="linenumber">363</context>
|
||||
</context-group>
|
||||
</trans-unit><trans-unit id="1b7f6e53a4521c6eb3ced4c007fdd4cf80bb7707" datatype="html">
|
||||
<source>Value should be greater than 0</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/ceph/pool/pool-form/pool-form.component.html</context>
|
||||
<context context-type="linenumber">372</context>
|
||||
<context context-type="linenumber">368</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/ceph/pool/pool-form/pool-form.component.html</context>
|
||||
<context context-type="linenumber">397</context>
|
||||
<context context-type="linenumber">393</context>
|
||||
</context-group>
|
||||
</trans-unit><trans-unit id="54be22af9625a595ee5d70917ee1fb116be7c4be" datatype="html">
|
||||
<source>Value should be greater than the maximum blob size</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/ceph/pool/pool-form/pool-form.component.html</context>
|
||||
<context context-type="linenumber">375</context>
|
||||
<context context-type="linenumber">371</context>
|
||||
</context-group>
|
||||
</trans-unit><trans-unit id="151efb127a9a4dd25259a0b2055442318a141f5b" datatype="html">
|
||||
<source>Maximum blob size</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/ceph/pool/pool-form/pool-form.component.html</context>
|
||||
<context context-type="linenumber">384</context>
|
||||
<context context-type="linenumber">380</context>
|
||||
</context-group>
|
||||
</trans-unit><trans-unit id="0c656f0e346bbadf46eb1a5d20d0307a3bd20ba8" datatype="html">
|
||||
<source>e.g., 512KiB</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/ceph/pool/pool-form/pool-form.component.html</context>
|
||||
<context context-type="linenumber">392</context>
|
||||
<context context-type="linenumber">388</context>
|
||||
</context-group>
|
||||
</trans-unit><trans-unit id="0a65a24eee8a026f3b1113fe9e157e9a0dd69486" datatype="html">
|
||||
<source>Value should be greater than the minimum blob size</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/ceph/pool/pool-form/pool-form.component.html</context>
|
||||
<context context-type="linenumber">400</context>
|
||||
<context context-type="linenumber">396</context>
|
||||
</context-group>
|
||||
</trans-unit><trans-unit id="261ba09c4a59de83f48f52a23fd328da37e61ff4" datatype="html">
|
||||
<source>Ratio</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/ceph/pool/pool-form/pool-form.component.html</context>
|
||||
<context context-type="linenumber">409</context>
|
||||
<context context-type="linenumber">405</context>
|
||||
</context-group>
|
||||
</trans-unit><trans-unit id="c1430457a9c3c66366e51d76bf10396014c576be" datatype="html">
|
||||
<source>Compression ratio</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/ceph/pool/pool-form/pool-form.component.html</context>
|
||||
<context context-type="linenumber">420</context>
|
||||
<context context-type="linenumber">416</context>
|
||||
</context-group>
|
||||
</trans-unit><trans-unit id="ae5ce6de352cde949998fb10754459c3a4eb183b" datatype="html">
|
||||
<source>Value should be between 0.0 and 1.0</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/ceph/pool/pool-form/pool-form.component.html</context>
|
||||
<context context-type="linenumber">423</context>
|
||||
<context context-type="linenumber">419</context>
|
||||
</context-group>
|
||||
</trans-unit><trans-unit id="4b673e771a3f6b056837b22ef19a825386046095" datatype="html">
|
||||
<source>It's not possible to create an RBD pool with '/' in the name.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/ceph/pool/pool-form/pool-form.component.html</context>
|
||||
<context context-type="linenumber">443</context>
|
||||
<context context-type="linenumber">439</context>
|
||||
</context-group>
|
||||
</trans-unit><trans-unit id="a9c02674c6e4936562d1146e1ecf0c4240dfcf96" datatype="html">
|
||||
<source>Please change the name or remove 'rbd' from the applications list.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">app/ceph/pool/pool-form/pool-form.component.html</context>
|
||||
<context context-type="linenumber">445</context>
|
||||
<context context-type="linenumber">441</context>
|
||||
</context-group>
|
||||
</trans-unit><trans-unit id="3938a411d76796f8ae73b72ea4c77661207453bd" datatype="html">
|
||||
<source>Cache Tiers Details</source>
|
||||
|
Loading…
Reference in New Issue
Block a user