Warn about too small number of failure domains
parent
a0246d89c1
commit
56df2248ef
25
main.js
25
main.js
|
@ -19,6 +19,7 @@ class Calc extends preact.Component
|
|||
eager: false,
|
||||
same_host: true,
|
||||
result: 0,
|
||||
error: null,
|
||||
use_speed: true,
|
||||
sim: true,
|
||||
}
|
||||
|
@ -39,7 +40,16 @@ class Calc extends preact.Component
|
|||
this._timer = setTimeout(() => this.calc(null, true), 200);
|
||||
return;
|
||||
}
|
||||
// !( >= ) not the same as < because of NaN
|
||||
if (!(parseInt(st.hosts) >= (st.ec ? parseInt(st.ec_data)+parseInt(st.ec_parity) : parseInt(st.replicas))))
|
||||
{
|
||||
st.error = 'Число серверов (доменов отказа) меньше числа дисков в PG, расчёт невозможен';
|
||||
st.result = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
const fn = st.sim ? cluster_afr_bruteforce : cluster_afr;
|
||||
st.error = null;
|
||||
st.result = 100*fn({
|
||||
n_hosts: st.hosts,
|
||||
n_drives: st.drives,
|
||||
|
@ -57,7 +67,8 @@ class Calc extends preact.Component
|
|||
degraded_replacement: st.eager,
|
||||
down_out_interval: 600,
|
||||
});
|
||||
this.setState(empty_st ? { result: st.result } : st);
|
||||
}
|
||||
this.setState(empty_st ? { error: st.error, result: st.result } : st);
|
||||
}
|
||||
|
||||
setter(field)
|
||||
|
@ -137,7 +148,7 @@ class Calc extends preact.Component
|
|||
if (c)
|
||||
i++;
|
||||
}
|
||||
return s;
|
||||
return s[s.length-1] == '.' ? '0' : s;
|
||||
}
|
||||
|
||||
componentDidMount()
|
||||
|
@ -171,7 +182,7 @@ class Calc extends preact.Component
|
|||
</div>
|
||||
<table>
|
||||
<tr>
|
||||
<th>Число серверов</th>
|
||||
<th>Число <abbr title="Серверов либо других доменов отказа, если у вас домен отказа другой">серверов</abbr></th>
|
||||
<td><input type="text" value={state.hosts} onchange={this.setter('hosts')} /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
@ -250,9 +261,13 @@ class Calc extends preact.Component
|
|||
<div style="text-align: center; font-size: 150%; margin: 20px 0; font-weight: bold">
|
||||
Вероятность потери данных в течение года:
|
||||
</div>
|
||||
<div style="text-align: center; font-size: 200%; margin: 20px 0; font-weight: bold">
|
||||
{this.format4(state.result)} %
|
||||
{state.error
|
||||
? <div style="text-align: center; color: red; margin: 20px 0">
|
||||
{state.error}
|
||||
</div>
|
||||
: <div style="text-align: center; font-size: 200%; margin: 20px 0; font-weight: bold">
|
||||
{this.format4(state.result)} %
|
||||
</div>}
|
||||
<div style="text-align: center; color: #aaa; margin: 10px 0">
|
||||
© Виталий Филиппов 2020+ <a style="color: inherit" href="https://yourcmc.ru/git/vitalif/ceph-afr-calc">(исходники)</a>
|
||||
</div>
|
||||
|
|
Loading…
Reference in New Issue