dcache/src/app.rs

82 lines
2.7 KiB
Rust

/*
* mCaptcha - A proof of work based DoS protection system
* Copyright © 2023 Aravinth Manivannan <realravinth@batsense.net>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
use std::collections::BTreeMap;
use std::sync::Arc;
use openraft::error::RaftError;
use openraft::BasicNode;
use openraft::Config;
use crate::network::raft_network_impl::DcacheNetwork;
//use crate::network::raft_network_impl::HealthLedger;
use crate::typ::InitializeError;
use crate::DcacheNodeId;
use crate::DcacheRaft;
use crate::DcacheStore;
// Representation of an application state. This struct can be shared around to share
// instances of raft, store and more.
pub struct DcacheApp {
pub id: DcacheNodeId,
pub addr: String,
pub raft: DcacheRaft,
pub store: Arc<DcacheStore>,
pub config: Arc<Config>,
pub network: Arc<DcacheNetwork>,
}
impl DcacheApp {
// // pub async fn introduce(&self) {
// // for (node_id, http_addr) =
// //
// // let req: (DcacheNodeId, String) = (node_id, http_addr);
// // let c =reqwest::Client::new();
// // c.post(
// // format!("http://{}/add-learner", introducer_addr)).json(&req).send().await.unwrap();
// //
// // }
//
// // pub async fn change_membership(&self) {
// // let r= self.network.online.read().unwrap();
// // self.raft.change_membership(&*r, false).await
// // }
// //
// // pub fn mark_node_online(&self,
// //
// // (node_id, node_addr): (DcacheNodeId, String)
// // ) {
// // let mut w= self.network.online.write().unwrap();
// // if w.get(node_id).is_some() {
// // return;
// // }
// //
// // w.insert(node_id, node_addr);
// // }
//
pub async fn init(&self) -> Result<(), RaftError<u64, InitializeError>> {
let mut nodes = BTreeMap::new();
nodes.insert(
self.id,
BasicNode {
addr: self.addr.clone(),
},
);
self.raft.initialize(nodes).await
}
}