node: reset data from settings

This commit is contained in:
ardocrat
2026-05-01 02:18:47 +03:00
parent 57f319edfc
commit 13bf8e830c
10 changed files with 90 additions and 95 deletions
+2 -2
View File
@@ -300,8 +300,8 @@ network_settings:
ban_window_desc: Die Entscheidung über das Verbot trifft der Knoten auf der Grundlage der Korrektheit der von der Gegenstelle erhaltenen Daten.
max_inbound_count: 'Maximale Anzahl der eingehenden Peer-Verbindungen:'
max_outbound_count: 'Maximale Anzahl von ausgehenden Peer-Verbindungen:'
reset_peers_desc: Peer-Daten zurücksetzen. Verwenden Sie diese Funktion nur, wenn es Probleme beim finden von Peers gibt.
reset_peers: Peers zurücksetzten
reset_data_desc: Reset-Knotendaten. Verwenden Sie diese Funktion nur, wenn es Probleme mit der Synchronisation gibt.
reset_data: Daten zurücksetzten
modal:
cancel: Abbrechen
save: Speichern
+2 -2
View File
@@ -300,8 +300,8 @@ network_settings:
ban_window_desc: The decision to ban is made by node, based on the correctness of the data received from the peer.
max_inbound_count: 'Maximum number of inbound peer connections:'
max_outbound_count: 'Maximum number of outbound peer connections:'
reset_peers_desc: Reset peers data. Use it with a caution only if there are problems with finding peers.
reset_peers: Reset peers
reset_data_desc: Reset the node data. Use it with a caution only if there are problems with synchronization.
reset_data: Reset data
modal:
cancel: Cancel
save: Save
+2 -2
View File
@@ -300,8 +300,8 @@ network_settings:
ban_window_desc: La décision de bannir est prise par le noeud, en fonction de la validité des données reçues du pair.
max_inbound_count: 'Nombre maximum de connexions de pairs entrants :'
max_outbound_count: 'Nombre maximum de connexions de pairs sortants :'
reset_peers_desc: Réinitialiser les données des pairs. Utilisez-le avec précaution uniquement en cas de problèmes pour trouver des pairs.
reset_peers: Réinitialiser les pairs
reset_data_desc: Réinitialisez les données du noeud. Utilisez-le avec prudence uniquement en cas de problème de synchronisation.
reset_data: Réinitialisation des données
modal:
cancel: Annuler
save: Sauvegarder
+2 -2
View File
@@ -300,8 +300,8 @@ network_settings:
ban_window_desc: Решение о запрете принимается узлом, основываясь на корректности данных полученных от пира.
max_inbound_count: 'Максимальное количество входящих подключений пиров:'
max_outbound_count: 'Максимальное количество исходящих подключений к пирам:'
reset_peers_desc: Сбросить данные пиров. Используйте с осторожностью, только при наличии проблем с поиском пиров.
reset_peers: Сбросить пиры
reset_data_desc: Сбросить данные узла. Используйте с осторожностью, только при наличии проблем с синхронизацией.
reset_data: Сброс данных
modal:
cancel: Отмена
save: Сохранить
+2 -2
View File
@@ -300,8 +300,8 @@ network_settings:
ban_window_desc: Banlama karari, peerden alinan verilerin dogruluguna bagli olarak Node tarafindan verilir.
max_inbound_count: 'Maksimum gelen Peer baglanti sayisi:'
max_outbound_count: 'Maksimum giden Peer baglanti sayisi:'
reset_peers_desc: Peers verilerini sifirlayin. Yalnizca Peers bulma konusunda sorun yasiyorsaniz dikkatli kullanin.
reset_peers: Peers Resetle
reset_data_desc: Node verisini sifirlama. Sadece senkronizasyonda sorun varsa dikkatli kullanin.
reset_data: Verileri sifirlama
modal:
cancel: Iptal
save: Kaydet
+2 -2
View File
@@ -300,8 +300,8 @@ network_settings:
ban_window_desc: 禁止的决定是由节点 根据从网络对点收到的数据的正确性做出的.
max_inbound_count: '入站网络对点连接的最大数量:'
max_outbound_count: '最大出站网络对点连接数:'
reset_peers_desc: 重置网络对点数据。仅当查找网络对点出现问题时,才请谨慎使用.
reset_peers: 重置网络对点
reset_data_desc: 重置点数据。只有在出现同步问题时才需谨慎使用.
reset_data: 重置数据
modal:
cancel: 取消
save: 保存
+1 -1
Submodule node updated: f80e450896...bd63c266e2
+56 -27
View File
@@ -16,7 +16,7 @@ use egui::{RichText, ScrollArea};
use egui::scroll_area::ScrollBarVisibility;
use crate::gui::Colors;
use crate::gui::icons::ARROW_COUNTER_CLOCKWISE;
use crate::gui::icons::{ARROW_COUNTER_CLOCKWISE, TRASH};
use crate::gui::platform::PlatformCallbacks;
use crate::gui::views::{Modal, Content, View};
use crate::gui::views::network::setup::{DandelionSetup, NodeSetup, P2PSetup, PoolSetup, StratumSetup};
@@ -36,6 +36,9 @@ pub struct NetworkSettings {
pool: PoolSetup,
/// Dandelion server setup content.
dandelion: DandelionSetup,
/// Flag to check if reset of data was called.
data_reset: bool,
}
/// Identifier for settings reset confirmation [`Modal`].
@@ -49,6 +52,7 @@ impl Default for NetworkSettings {
stratum: StratumSetup::default(),
pool: PoolSetup::default(),
dandelion: DandelionSetup::default(),
data_reset: false,
}
}
}
@@ -110,6 +114,15 @@ impl ContentContainer for NetworkSettings {
// Draw Dandelion server setup section.
self.dandelion.ui(ui, cb);
// Draw content to reset the data.
if !Node::is_restarting() && !self.data_reset {
ui.add_space(4.0);
View::horizontal_line(ui, Colors::item_stroke());
ui.add_space(6.0);
self.reset_data_ui(ui);
}
ui.add_space(6.0);
View::horizontal_line(ui, Colors::stroke());
ui.add_space(6.0);
@@ -179,7 +192,7 @@ impl NetworkSettings {
}).collect::<Vec<_>>();
if saved_ip != selected_ip {
(on_change)(&selected_ip.to_string());
on_change(&selected_ip.to_string());
}
}
@@ -193,37 +206,53 @@ impl NetworkSettings {
ui.add_space(6.0);
});
}
/// Draw content to reset data.
fn reset_data_ui(&mut self, ui: &mut egui::Ui) {
ui.add_space(4.0);
View::colored_text_button(ui,
format!("{} {}", TRASH, t!("network_settings.reset_data")),
Colors::red(),
Colors::white_or_black(false), || {
Node::reset_data(false);
self.data_reset = true;
});
ui.add_space(6.0);
ui.label(RichText::new(t!("network_settings.reset_data_desc"))
.size(16.0)
.color(Colors::inactive_text())
);
ui.add_space(4.0);
}
}
/// Draw button to reset integrated node settings to default values.
fn reset_settings_ui(ui: &mut egui::Ui) {
ui.vertical_centered(|ui| {
ui.label(RichText::new(t!("network_settings.reset_settings_desc"))
.size(16.0)
.color(Colors::text(false)));
ui.add_space(8.0);
let button_text = format!("{} {}",
ARROW_COUNTER_CLOCKWISE,
t!("network_settings.reset_settings"));
View::action_button(ui, button_text, || {
// Show modal to confirm settings reset.
Modal::new(RESET_SETTINGS_CONFIRMATION_MODAL)
.position(ModalPosition::Center)
.title(t!("confirmation"))
.show();
});
// Show reminder to restart enabled node.
if Node::is_running() {
ui.add_space(12.0);
ui.label(RichText::new(t!("network_settings.restart_node_required"))
.size(16.0)
.color(Colors::gray())
);
}
ui.add_space(12.0);
ui.label(RichText::new(t!("network_settings.reset_settings_desc"))
.size(16.0)
.color(Colors::text(false)));
ui.add_space(8.0);
let button_text = format!("{} {}",
ARROW_COUNTER_CLOCKWISE,
t!("network_settings.reset_settings"));
View::action_button(ui, button_text, || {
// Show modal to confirm settings reset.
Modal::new(RESET_SETTINGS_CONFIRMATION_MODAL)
.position(ModalPosition::Center)
.title(t!("confirmation"))
.show();
});
// Show reminder to restart enabled node.
if Node::is_running() {
ui.add_space(12.0);
ui.label(RichText::new(t!("network_settings.restart_node_required"))
.size(16.0)
.color(Colors::gray())
);
}
ui.add_space(10.0);
}
/// Confirmation to reset settings to default values.
-30
View File
@@ -65,9 +65,6 @@ pub struct P2PSetup {
/// Maximum number of outbound peer connections.
max_outbound_count: String,
/// Flag to check if reset of peers was called.
peers_reset: bool,
}
/// Identifier for port value [`Modal`].
@@ -111,7 +108,6 @@ impl Default for P2PSetup {
ban_window_edit: NodeConfig::get_p2p_ban_window(),
max_inbound_count: NodeConfig::get_max_inbound_peers(),
max_outbound_count: NodeConfig::get_max_outbound_peers(),
peers_reset: false,
}
}
}
@@ -216,15 +212,6 @@ impl ContentContainer for P2PSetup {
// Show maximum outbound peers value setup.
self.max_outbound_ui(ui);
if !Node::is_restarting() && !self.peers_reset {
ui.add_space(6.0);
View::horizontal_line(ui, Colors::item_stroke());
ui.add_space(6.0);
// Show peers data reset content.
self.reset_peers_ui(ui);
}
});
}
}
@@ -753,23 +740,6 @@ impl P2PSetup {
ui.add_space(6.0);
});
}
/// Draw content to reset peers data.
fn reset_peers_ui(&mut self, ui: &mut egui::Ui) {
ui.add_space(4.0);
View::colored_text_button(ui,
format!("{} {}", TRASH, t!("network_settings.reset_peers")),
Colors::red(),
Colors::white_or_black(false), || {
Node::reset_peers(false);
self.peers_reset = true;
});
ui.add_space(6.0);
ui.label(RichText::new(t!("network_settings.reset_peers_desc"))
.size(16.0)
.color(Colors::inactive_text())
);
}
}
/// Draw peer list item.
+21 -25
View File
@@ -28,7 +28,7 @@ use grin_p2p::msg::PeerAddrs;
use grin_p2p::Seeding;
use grin_servers::{Server, ServerStats, StratumServerConfig, StratumStats};
use grin_servers::common::types::Error;
use log::error;
use crate::node::{NodeConfig, NodeError, PeersConfig};
use crate::node::stratum::{StratumStopState, StratumServer};
@@ -57,8 +57,8 @@ pub struct Node {
stop_needed: AtomicBool,
/// Flag to check if app exit is needed after [`Server`] stop.
exit_after_stop: AtomicBool,
/// Flag to reset peers data and restart the [`Server`].
reset_peers: AtomicBool,
/// Flag to reset data and restart the [`Server`].
reset_data: AtomicBool,
/// Flag to change data directory and restart the [`Server`].
change_data_dir: AtomicBool,
@@ -78,7 +78,7 @@ impl Default for Node {
exit_after_stop: AtomicBool::new(false),
start_stratum_needed: AtomicBool::new(false),
error: Arc::new(RwLock::new(None)),
reset_peers: AtomicBool::new(false),
reset_data: AtomicBool::new(false),
change_data_dir: AtomicBool::new(false),
}
}
@@ -169,12 +169,12 @@ impl Node {
/// Check if [`Node`] is restarting.
pub fn is_restarting() -> bool {
NODE_STATE.restart_needed.load(Ordering::Relaxed) || Self::reset_peers_needed()
NODE_STATE.restart_needed.load(Ordering::Relaxed) || Self::reset_data_needed()
}
/// Check if reset of [`Server`] peers is needed.
fn reset_peers_needed() -> bool {
NODE_STATE.reset_peers.load(Ordering::Relaxed)
fn reset_data_needed() -> bool {
NODE_STATE.reset_data.load(Ordering::Relaxed)
}
/// Get node [`Server`] statistics.
@@ -263,9 +263,9 @@ impl Node {
server.stop();
// Wait server after stop.
thread::sleep(Duration::from_millis(5000));
// Reset peers data if requested.
if Self::reset_peers_needed() {
Node::reset_peers(true);
// Reset data if requested.
if Self::reset_data_needed() {
Node::reset_data(true);
}
// Reset stratum stats.
{
@@ -279,7 +279,7 @@ impl Node {
NODE_STATE.restart_needed.store(false, Ordering::Relaxed);
}
Err(e) => {
// Set an error.
error!("Error starting node: {:?}", e);
{
let mut w_err = NODE_STATE.error.write();
*w_err = Some(e);
@@ -333,7 +333,7 @@ impl Node {
}
}
Err(e) => {
// Set an error.
error!("Error starting node: {:?}", e);
{
let mut w_err = NODE_STATE.error.write();
*w_err = Some(e);
@@ -428,24 +428,20 @@ impl Node {
}
}
/// Reset [`Server`] peers data.
pub fn reset_peers(force: bool) {
/// Reset [`Server`] data.
pub fn reset_data(force: bool) {
if force || !Node::is_running() {
// Get saved server config.
let config = NodeConfig::node_server_config();
let server_config = config.server.clone();
// Remove peers folder.
let mut peers_dir = PathBuf::from(&server_config.db_root);
peers_dir.push("peer");
if peers_dir.exists() {
match fs::remove_dir_all(peers_dir) {
Ok(_) => {}
Err(_) => {}
}
// Remove data folder.
let data_dir = PathBuf::from(&server_config.db_root);
match fs::remove_dir_all(data_dir) {
Ok(_) => {}
Err(_) => {}
}
NODE_STATE.reset_peers.store(false, Ordering::Relaxed);
NODE_STATE.reset_data.store(false, Ordering::Relaxed);
} else {
NODE_STATE.reset_peers.store(true, Ordering::Relaxed);
NODE_STATE.reset_data.store(true, Ordering::Relaxed);
}
}