link watcher switch to event based instead of polling
This commit is contained in:
@@ -284,11 +284,11 @@ export default function Network() {
|
||||
|
||||
function openEnableWatcherModal(bridgeName: string) {
|
||||
setWatcherBridgeName(bridgeName);
|
||||
watcherForm.setFieldsValue({ poll_interval_seconds: 0.25 });
|
||||
watcherForm.setFieldsValue({ recovery_holdoff_seconds: 1.0 });
|
||||
setWatcherModalVisible(true);
|
||||
}
|
||||
|
||||
function handleEnableWatcher(values: { poll_interval_seconds: number }) {
|
||||
function handleEnableWatcher(values: { recovery_holdoff_seconds: number }) {
|
||||
if (!watcherBridgeName) {
|
||||
return;
|
||||
}
|
||||
@@ -434,8 +434,9 @@ export default function Network() {
|
||||
>
|
||||
<Descriptions size="small" column={4} style={{ marginBottom: members.length ? 12 : 0 }}>
|
||||
<Descriptions.Item label="Members">{bridge.members.map((member) => member.ifname).join(', ') || '—'}</Descriptions.Item>
|
||||
<Descriptions.Item label="Poll interval">
|
||||
{watcher?.poll_interval_seconds ? `${watcher.poll_interval_seconds}s` : '—'}
|
||||
<Descriptions.Item label="Mode">{watcher?.event_driven ? 'netlink events' : '—'}</Descriptions.Item>
|
||||
<Descriptions.Item label="Recovery holdoff">
|
||||
{watcher?.recovery_holdoff_seconds ? `${watcher.recovery_holdoff_seconds}s` : '—'}
|
||||
</Descriptions.Item>
|
||||
<Descriptions.Item label="Suppressed">
|
||||
{watcher?.suppressed_members.length ? watcher.suppressed_members.join(', ') : 'none'}
|
||||
@@ -501,16 +502,21 @@ export default function Network() {
|
||||
}}
|
||||
onOk={() => watcherForm.submit()}
|
||||
>
|
||||
<Form form={watcherForm} layout="vertical" onFinish={handleEnableWatcher} initialValues={{ poll_interval_seconds: 0.25 }}>
|
||||
<Form
|
||||
form={watcherForm}
|
||||
layout="vertical"
|
||||
onFinish={handleEnableWatcher}
|
||||
initialValues={{ recovery_holdoff_seconds: 1.0 }}
|
||||
>
|
||||
<Form.Item
|
||||
name="poll_interval_seconds"
|
||||
label="Poll interval (seconds)"
|
||||
rules={[{ required: true, message: 'Please provide a poll interval' }]}
|
||||
name="recovery_holdoff_seconds"
|
||||
label="Recovery holdoff (seconds)"
|
||||
rules={[{ required: true, message: 'Please provide a recovery holdoff' }]}
|
||||
>
|
||||
<InputNumber min={0.05} max={10} step={0.05} precision={2} style={{ width: '100%' }} />
|
||||
</Form.Item>
|
||||
<Paragraph type="secondary" style={{ marginBottom: 0 }}>
|
||||
When enabled, the backend suppresses sibling bridge ports if one member loses link and restores them after recovery.
|
||||
The backend reacts to kernel link events and waits for this holdoff before restoring sibling ports after recovery.
|
||||
</Paragraph>
|
||||
</Form>
|
||||
</Modal>
|
||||
|
||||
@@ -52,7 +52,7 @@ export interface BridgeRemoveRequest {
|
||||
}
|
||||
|
||||
export interface BridgeLinkStateEnableRequest {
|
||||
poll_interval_seconds: number;
|
||||
recovery_holdoff_seconds: number;
|
||||
}
|
||||
|
||||
export interface BridgeMemberLinkStateInfo {
|
||||
@@ -67,11 +67,12 @@ export interface BridgeMemberLinkStateInfo {
|
||||
export interface BridgeLinkStateWatcherStatus {
|
||||
bridge: string;
|
||||
active: boolean;
|
||||
poll_interval_seconds?: number | null;
|
||||
last_poll_ts?: number | null;
|
||||
event_driven?: boolean | null;
|
||||
last_event_ts?: number | null;
|
||||
last_error?: string | null;
|
||||
last_action?: string | null;
|
||||
suppressed_members: string[];
|
||||
recovery_holdoff_seconds?: number | null;
|
||||
members: Record<string, BridgeMemberLinkStateInfo>;
|
||||
message?: string | null;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user