Commit 1dab5820 authored by Boris Vasilenko's avatar Boris Vasilenko
Browse files

NAS-113790: "Mixing disks of different sizes in a vdev is not allowed."

parent 6dacb453
Showing with 43 additions and 31 deletions
+43 -31
import { marker as T } from '@biesbjerg/ngx-translate-extract-marker';
export default {
vdev_diskSizeErrorMsg: T('Mixing disks of different sizes in a vdev is not allowed.'),
vdev_diskSizeErrorMsg: T('Mixing disks of different sizes in a vdev is not recommended.'),
vdev_type_tooltip: T('Arrange the disks according to capacity, redundancy, and \
performance considerations. More types become available as more disks are added to the vdev.<br> \
A <i>Stripe</i> uses the entire capacity of the disks for storage and <b>has no redundancy</b>. \
......
......@@ -58,7 +58,7 @@
</div>
</div>
<div fxFlex="100%" *ngIf="poolError" class="sizeMessage red" [innerHTML]="poolError"></div>
<div fxFlex="100%" *ngIf="poolError" class="size-message red" [innerHTML]="poolError"></div>
<div fxFlex="100%" class="button-bar">
<div><button id="pool-manager__reset-layout-button" mat-button class="btn btn-accent mat-accent" [disabled]="!dirty" (click)="resetLayout()">{{"Reset Layout" | translate}}</button></div>
......@@ -377,11 +377,11 @@
</div>
</div>
<div class="sizeMessage">{{ sizeMessage | translate}}: {{ size }}</div>
<div *ngIf="disknumError" class="sizeMessage red" [innerHTML]="disknumError"></div>
<div *ngIf="vdevtypeError" class="sizeMessage red" [innerHTML]="vdevtypeError"></div>
<div *ngIf="stripeVdevTypeError" class="sizeMessage red" [innerHTML]="stripeVdevTypeError"></div>
<div *ngIf="logVdevTypeWarning" class="sizeMessage orange" [innerHTML]="logVdevTypeWarning"></div>
<div *ngIf="error" class="sizeMessage red" [innerHTML]="error"></div>
<div *ngIf="disknumError" class="size-message red" [innerHTML]="disknumError"></div>
<div *ngIf="vdevtypeError" class="size-message red" [innerHTML]="vdevtypeError"></div>
<div *ngIf="stripeVdevTypeError" class="size-message red" [innerHTML]="stripeVdevTypeError"></div>
<div *ngIf="logVdevTypeWarning" class="size-message orange" [innerHTML]="logVdevTypeWarning"></div>
<div *ngIf="error" class="size-message red" [innerHTML]="error"></div>
<div class="forceCreateCheckbox" *ngIf="hasSavableErrors">
<mat-checkbox color="primary" id="pool-manager__force-submit-checkbox" [(ngModel)]="force" (click)="forceCheckboxChecked()">{{'Force' | translate}}</mat-checkbox>
</div>
......
......@@ -64,7 +64,7 @@ h4 {
display: auto;
}
.sizeMessage {
.size-message {
margin: 0.5rem 1rem;
&.red {
......
......@@ -95,7 +95,7 @@ export class ManagerComponent implements OnInit, AfterViewInit {
logVdevTypeWarning: string = null;
vdevdisksError = false;
vdevdisksSizeError = false;
hasVdevDiskSizeError = false;
diskAddWarning = helptext.manager_diskAddWarning;
diskExtendWarning = helptext.manager_diskExtendWarning;
......@@ -397,7 +397,7 @@ export class ManagerComponent implements OnInit, AfterViewInit {
this.vdevdisksError = false;
this.stripeVdevTypeError = null;
this.logVdevTypeWarning = null;
this.vdevdisksSizeError = false;
this.hasVdevDiskSizeError = false;
this.hasSavableErrors = false;
this.emptyDataVdev = false;
......@@ -441,8 +441,8 @@ export class ManagerComponent implements OnInit, AfterViewInit {
if (vdev.vdev_disks_error) {
this.vdevdisksError = true;
}
if (vdev.vdev_disks_size_error) {
this.vdevdisksSizeError = true;
if (vdev.showDiskSizeError) {
this.hasVdevDiskSizeError = true;
this.hasSavableErrors = true;
}
if (['dedup', 'log', 'special', 'data'].includes(vdev.group)) {
......@@ -535,7 +535,7 @@ export class ManagerComponent implements OnInit, AfterViewInit {
forceCheckboxChecked(): void {
if (!this.force) {
let warnings: string = helptext.force_warning;
if (this.vdevdisksSizeError) {
if (this.hasVdevDiskSizeError) {
warnings = warnings + '<br/><br/>' + helptext.force_warnings['diskSizeWarning'];
}
if (this.stripeVdevTypeError) {
......
......@@ -93,6 +93,7 @@
</button>
</div>
</div>
<div *ngIf="error" [style.color]="'red'" [innerHTML]="error" class="datainfo"></div>
<div *ngIf="error" [innerHTML]="error" class="size-message red"></div>
<div *ngIf="showDiskSizeError" class="size-message orange">{{ diskSizeErrorMsg }}</div>
</div>
</div>
......@@ -59,3 +59,15 @@
display: inline-block;
margin-left: 16px;
}
.size-message {
margin: 0.5rem 1rem;
&.red {
color: var(--red);
}
&.orange {
color: var(--orange);
}
}
......@@ -36,7 +36,7 @@ export class VdevComponent implements OnInit {
diskSizeErrorMsg = helptext.vdev_diskSizeErrorMsg;
vdev_type_tooltip = helptext.vdev_type_tooltip;
vdev_disks_error: boolean;
vdev_disks_size_error: boolean;
showDiskSizeError: boolean;
vdev_type_disabled = false;
private ten_mib = 10 * 1024 * 1024;
protected mindisks: any = {
......@@ -132,7 +132,7 @@ export class VdevComponent implements OnInit {
let smallestdisk = 0;
let estimate = 0;
const swapsize = this.manager.swapondrive * 1024 * 1024 * 1024;
this.vdev_disks_size_error = false;
this.showDiskSizeError = false;
for (let i = 0; i < this.disks.length; i++) {
const size = this.disks[i].real_capacity - swapsize;
stripeSize += size;
......@@ -141,8 +141,7 @@ export class VdevComponent implements OnInit {
this.firstdisksize = size;
}
if (size > smallestdisk + this.ten_mib || size < smallestdisk - this.ten_mib) {
this.vdev_disks_size_error = true;
this.error = this.diskSizeErrorMsg;
this.showDiskSizeError = true;
}
if (this.disks[i].real_capacity < smallestdisk) {
smallestdisk = size;
......
......@@ -2140,7 +2140,7 @@
"Minutes when this task will run.": "",
"Minutes/Hours/Days": "",
"Mirror": "",
"Mixing disks of different sizes in a vdev is not allowed.": "",
"Mixing disks of different sizes in a vdev is not recommended.": "",
"Mode": "",
"Model": "",
"Model:": "",
......
......@@ -2140,7 +2140,7 @@
"Minutes when this task will run.": "",
"Minutes/Hours/Days": "",
"Mirror": "",
"Mixing disks of different sizes in a vdev is not allowed.": "",
"Mixing disks of different sizes in a vdev is not recommended.": "",
"Mode": "",
"Model": "",
"Model:": "",
......
......@@ -2140,7 +2140,7 @@
"Minutes when this task will run.": "",
"Minutes/Hours/Days": "",
"Mirror": "",
"Mixing disks of different sizes in a vdev is not allowed.": "",
"Mixing disks of different sizes in a vdev is not recommended.": "",
"Mode": "",
"Model": "",
"Model:": "",
......
......@@ -2140,7 +2140,7 @@
"Minutes when this task will run.": "",
"Minutes/Hours/Days": "",
"Mirror": "",
"Mixing disks of different sizes in a vdev is not allowed.": "",
"Mixing disks of different sizes in a vdev is not recommended.": "",
"Mode": "",
"Model": "",
"Model:": "",
......
......@@ -2140,7 +2140,7 @@
"Minutes when this task will run.": "",
"Minutes/Hours/Days": "",
"Mirror": "",
"Mixing disks of different sizes in a vdev is not allowed.": "",
"Mixing disks of different sizes in a vdev is not recommended.": "",
"Mode": "",
"Model": "",
"Model:": "",
......
......@@ -2140,7 +2140,7 @@
"Minutes when this task will run.": "",
"Minutes/Hours/Days": "",
"Mirror": "",
"Mixing disks of different sizes in a vdev is not allowed.": "",
"Mixing disks of different sizes in a vdev is not recommended.": "",
"Mode": "",
"Model": "",
"Model:": "",
......
......@@ -2140,7 +2140,7 @@
"Minutes when this task will run.": "",
"Minutes/Hours/Days": "",
"Mirror": "",
"Mixing disks of different sizes in a vdev is not allowed.": "",
"Mixing disks of different sizes in a vdev is not recommended.": "",
"Mode": "",
"Model": "",
"Model:": "",
......
......@@ -2140,7 +2140,7 @@
"Minutes when this task will run.": "",
"Minutes/Hours/Days": "",
"Mirror": "",
"Mixing disks of different sizes in a vdev is not allowed.": "",
"Mixing disks of different sizes in a vdev is not recommended.": "",
"Mode": "",
"Model": "",
"Model:": "",
......
......@@ -2140,7 +2140,7 @@
"Minutes when this task will run.": "",
"Minutes/Hours/Days": "",
"Mirror": "",
"Mixing disks of different sizes in a vdev is not allowed.": "",
"Mixing disks of different sizes in a vdev is not recommended.": "",
"Mode": "",
"Model": "",
"Model:": "",
......
......@@ -2140,7 +2140,7 @@
"Minutes when this task will run.": "",
"Minutes/Hours/Days": "",
"Mirror": "",
"Mixing disks of different sizes in a vdev is not allowed.": "",
"Mixing disks of different sizes in a vdev is not recommended.": "",
"Mode": "",
"Model": "",
"Model:": "",
......
......@@ -1775,7 +1775,7 @@
"Minutes of inactivity before the drive enters standby mode. This <a href=\"https://forums.freenas.org/index.php?threads/how-to-find-out-if-a-drive-is-spinning-down-properly.2068/\" target=\"_blank\">forum post</a> describes identifying spun down drives. Temperature monitoring is disabled for standby disks.": "",
"Minutes when this task will run.": "",
"Minutes/Hours/Days": "",
"Mixing disks of different sizes in a vdev is not allowed.": "",
"Mixing disks of different sizes in a vdev is not recommended.": "",
"Model": "",
"Model:": "",
"Modify": "",
......
......@@ -2140,7 +2140,7 @@
"Minutes when this task will run.": "",
"Minutes/Hours/Days": "",
"Mirror": "",
"Mixing disks of different sizes in a vdev is not allowed.": "",
"Mixing disks of different sizes in a vdev is not recommended.": "",
"Mode": "",
"Model": "",
"Model:": "",
......
......@@ -2140,7 +2140,7 @@
"Minutes when this task will run.": "",
"Minutes/Hours/Days": "",
"Mirror": "",
"Mixing disks of different sizes in a vdev is not allowed.": "",
"Mixing disks of different sizes in a vdev is not recommended.": "",
"Mode": "",
"Model": "",
"Model:": "",
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment