Skip to content
Snippets Groups Projects
Commit 99f255a9 authored by Éloïs's avatar Éloïs
Browse files

Merge branch 'prepare-peers-db-for-future-migration' into 'dev'

Prepare peers db for future migration

See merge request !1388
parents 28fa91de b9713c68
Branches
No related tags found
1 merge request!1388Prepare peers db for future migration
......@@ -5,4 +5,6 @@ cn = "check --manifest-path neon/native/Cargo.toml"
dex = "run --release --package duniter-dbex --"
ta = "test --all"
rr = "run --release --"
uc = "update -p duniter-core"
ug = "update -p duniter-gva"
xtask = "run --package xtask --"
......@@ -60,6 +60,12 @@ name = "arrayvec"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b"
[[package]]
name = "arrayvec"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5a2f58b0bb10c380af2b26e57212856b8c9a59e0925b4c20f4a174a49734eaf7"
dependencies = [
"serde",
]
......@@ -281,7 +287,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "afa748e348ad3be8263be728124b24a24f268266f6f5d58af9d75f6a40b5c587"
dependencies = [
"arrayref",
"arrayvec",
"arrayvec 0.5.2",
"constant_time_eq",
]
......@@ -292,7 +298,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e9ff35b701f3914bdb8fad3368d822c766ef2858b2583198e41639b936f09d3f"
dependencies = [
"arrayref",
"arrayvec",
"arrayvec 0.5.2",
"cc",
"cfg-if 0.1.10",
"constant_time_eq",
......@@ -864,7 +870,7 @@ dependencies = [
[[package]]
name = "dubp-wot"
version = "0.11.0"
source = "git+https://git.duniter.org/nodes/rust/duniter-core#4f26e9e6f687f2c42adf7027bebb34f4ed58e600"
source = "git+https://git.duniter.org/nodes/rust/duniter-core#4ce40a98dbc3cb3241e6d91817a8753a9be95ee8"
dependencies = [
"log",
"rayon",
......@@ -874,7 +880,7 @@ dependencies = [
[[package]]
name = "duniter-bc-reader"
version = "0.1.0"
source = "git+https://git.duniter.org/nodes/rust/duniter-core#4f26e9e6f687f2c42adf7027bebb34f4ed58e600"
source = "git+https://git.duniter.org/nodes/rust/duniter-core#4ce40a98dbc3cb3241e6d91817a8753a9be95ee8"
dependencies = [
"anyhow",
"dubp",
......@@ -885,10 +891,10 @@ dependencies = [
[[package]]
name = "duniter-bca"
version = "0.1.0"
source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#7fe98256d2775eecaaedf03401f1a0ff9b08a49b"
source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#f8c5e0a0afdfeeedcc6bccc18f5c0e517169b892"
dependencies = [
"anyhow",
"arrayvec",
"arrayvec 0.7.0",
"async-bincode",
"async_io_stream",
"bincode",
......@@ -908,9 +914,9 @@ dependencies = [
[[package]]
name = "duniter-bca-types"
version = "0.1.0"
source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#7fe98256d2775eecaaedf03401f1a0ff9b08a49b"
source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#f8c5e0a0afdfeeedcc6bccc18f5c0e517169b892"
dependencies = [
"arrayvec",
"arrayvec 0.7.0",
"bincode",
"dubp",
"serde",
......@@ -940,7 +946,7 @@ dependencies = [
[[package]]
name = "duniter-conf"
version = "0.1.0"
source = "git+https://git.duniter.org/nodes/rust/duniter-core#4f26e9e6f687f2c42adf7027bebb34f4ed58e600"
source = "git+https://git.duniter.org/nodes/rust/duniter-core#4ce40a98dbc3cb3241e6d91817a8753a9be95ee8"
dependencies = [
"anyhow",
"dubp",
......@@ -954,7 +960,7 @@ dependencies = [
[[package]]
name = "duniter-core"
version = "1.8.1"
source = "git+https://git.duniter.org/nodes/rust/duniter-core#4f26e9e6f687f2c42adf7027bebb34f4ed58e600"
source = "git+https://git.duniter.org/nodes/rust/duniter-core#4ce40a98dbc3cb3241e6d91817a8753a9be95ee8"
dependencies = [
"duniter-bc-reader",
"duniter-conf",
......@@ -970,7 +976,7 @@ name = "duniter-dbex"
version = "0.1.0"
dependencies = [
"anyhow",
"arrayvec",
"arrayvec 0.5.2",
"comfy-table",
"dirs",
"dubp",
......@@ -991,9 +997,9 @@ dependencies = [
[[package]]
name = "duniter-dbs"
version = "0.1.0"
source = "git+https://git.duniter.org/nodes/rust/duniter-core#4f26e9e6f687f2c42adf7027bebb34f4ed58e600"
source = "git+https://git.duniter.org/nodes/rust/duniter-core#4ce40a98dbc3cb3241e6d91817a8753a9be95ee8"
dependencies = [
"arrayvec",
"arrayvec 0.7.0",
"bincode",
"byteorder",
"chrono",
......@@ -1014,7 +1020,7 @@ dependencies = [
[[package]]
name = "duniter-dbs-write-ops"
version = "0.1.0"
source = "git+https://git.duniter.org/nodes/rust/duniter-core#4f26e9e6f687f2c42adf7027bebb34f4ed58e600"
source = "git+https://git.duniter.org/nodes/rust/duniter-core#4ce40a98dbc3cb3241e6d91817a8753a9be95ee8"
dependencies = [
"chrono",
"dubp",
......@@ -1029,7 +1035,7 @@ dependencies = [
[[package]]
name = "duniter-global"
version = "1.8.1"
source = "git+https://git.duniter.org/nodes/rust/duniter-core#4f26e9e6f687f2c42adf7027bebb34f4ed58e600"
source = "git+https://git.duniter.org/nodes/rust/duniter-core#4ce40a98dbc3cb3241e6d91817a8753a9be95ee8"
dependencies = [
"async-rwlock",
"dubp",
......@@ -1042,10 +1048,10 @@ dependencies = [
[[package]]
name = "duniter-gva"
version = "0.1.0"
source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#7fe98256d2775eecaaedf03401f1a0ff9b08a49b"
source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#f8c5e0a0afdfeeedcc6bccc18f5c0e517169b892"
dependencies = [
"anyhow",
"arrayvec",
"arrayvec 0.7.0",
"async-graphql",
"async-mutex",
"async-trait",
......@@ -1073,7 +1079,7 @@ dependencies = [
[[package]]
name = "duniter-gva-conf"
version = "0.1.0"
source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#7fe98256d2775eecaaedf03401f1a0ff9b08a49b"
source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#f8c5e0a0afdfeeedcc6bccc18f5c0e517169b892"
dependencies = [
"anyhow",
"duniter-core",
......@@ -1085,7 +1091,7 @@ dependencies = [
[[package]]
name = "duniter-gva-db"
version = "0.1.0"
source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#7fe98256d2775eecaaedf03401f1a0ff9b08a49b"
source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#f8c5e0a0afdfeeedcc6bccc18f5c0e517169b892"
dependencies = [
"bincode",
"chrono",
......@@ -1102,10 +1108,10 @@ dependencies = [
[[package]]
name = "duniter-gva-dbs-reader"
version = "0.1.0"
source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#7fe98256d2775eecaaedf03401f1a0ff9b08a49b"
source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#f8c5e0a0afdfeeedcc6bccc18f5c0e517169b892"
dependencies = [
"anyhow",
"arrayvec",
"arrayvec 0.7.0",
"dubp",
"duniter-bca-types",
"duniter-core",
......@@ -1116,13 +1122,14 @@ dependencies = [
[[package]]
name = "duniter-gva-gql"
version = "0.1.0"
source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#7fe98256d2775eecaaedf03401f1a0ff9b08a49b"
source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#f8c5e0a0afdfeeedcc6bccc18f5c0e517169b892"
dependencies = [
"anyhow",
"arrayvec",
"arrayvec 0.7.0",
"async-graphql",
"async-trait",
"dubp",
"duniter-bca-types",
"duniter-core",
"duniter-gva-db",
"duniter-gva-dbs-reader",
......@@ -1137,12 +1144,14 @@ dependencies = [
[[package]]
name = "duniter-gva-indexer"
version = "0.1.0"
source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#7fe98256d2775eecaaedf03401f1a0ff9b08a49b"
source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#f8c5e0a0afdfeeedcc6bccc18f5c0e517169b892"
dependencies = [
"anyhow",
"bincode",
"dubp",
"duniter-core",
"duniter-gva-db",
"lz4_flex",
"once_cell",
"resiter",
]
......@@ -1167,7 +1176,7 @@ dependencies = [
[[package]]
name = "duniter-mempools"
version = "0.1.0"
source = "git+https://git.duniter.org/nodes/rust/duniter-core#4f26e9e6f687f2c42adf7027bebb34f4ed58e600"
source = "git+https://git.duniter.org/nodes/rust/duniter-core#4ce40a98dbc3cb3241e6d91817a8753a9be95ee8"
dependencies = [
"dubp",
"duniter-bc-reader",
......@@ -1180,7 +1189,7 @@ dependencies = [
[[package]]
name = "duniter-module"
version = "0.1.0"
source = "git+https://git.duniter.org/nodes/rust/duniter-core#4f26e9e6f687f2c42adf7027bebb34f4ed58e600"
source = "git+https://git.duniter.org/nodes/rust/duniter-core#4ce40a98dbc3cb3241e6d91817a8753a9be95ee8"
dependencies = [
"anyhow",
"async-mutex",
......@@ -1811,7 +1820,7 @@ dependencies = [
[[package]]
name = "kv_typed"
version = "0.1.0"
source = "git+https://git.duniter.org/nodes/rust/duniter-core#4f26e9e6f687f2c42adf7027bebb34f4ed58e600"
source = "git+https://git.duniter.org/nodes/rust/duniter-core#4ce40a98dbc3cb3241e6d91817a8753a9be95ee8"
dependencies = [
"byteorder",
"cfg-if 0.1.10",
......@@ -1886,6 +1895,12 @@ version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d0925aed5b12ed59857f438d25a910cf051dbcd4107907be1e7abf6c44ec903"
[[package]]
name = "lz4_flex"
version = "0.7.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "05304f8e67dfc93d1b4b990137fd1a7a4c6ad44b60a9c486c8c4486f9d2027ae"
[[package]]
name = "maplit"
version = "1.0.2"
......
......@@ -1232,6 +1232,7 @@ export class FileDAL implements ServerDAO {
p.status = "UP";
p.first_down = null;
p.last_try = null;
this.rustServer.savePeer(PeerDTO.fromDBPeer(p));
return this.peerDAL.savePeer(p);
} catch (err) {
return null;
......@@ -1250,6 +1251,7 @@ export class FileDAL implements ServerDAO {
p.first_down = now;
}
p.last_try = now;
this.rustServer.savePeer(PeerDTO.fromDBPeer(p));
await this.peerDAL.savePeer(p);
}
}
......
......@@ -346,7 +346,7 @@ export class PeerDTO implements Cloneable {
p.signature,
p.status,
p.statusTS,
false
!p.nonWoT
);
}
......
......@@ -63,6 +63,7 @@ export class PeerCard {
endpoints: string[]
signature: string
status: string
member: boolean
}
export class RustDbTx {
......
......@@ -14,18 +14,28 @@
// along with this program. If not, see <https://www.gnu.org/licenses/>.
use crate::into_neon_res;
use dubp::common::crypto::keys::{ed25519::PublicKey, PublicKey as _};
use dubp::documents::{
use dubp::{
common::{
crypto::{
hashs::Hash,
keys::{
ed25519::{Ed25519KeyPair, PublicKey, Signature},
PublicKey as _, Signature as _,
},
},
prelude::*,
},
documents::{
prelude::*,
transaction::{TransactionDocumentV10, TransactionDocumentV10Stringified},
},
documents_parser::prelude::*,
};
use dubp::documents_parser::prelude::*;
use dubp::{common::crypto::hashs::Hash, crypto::keys::ed25519::Ed25519KeyPair};
use duniter_server::{DuniterCoreConf, DuniterMode, DuniterServer};
use neon::declare_types;
use neon::prelude::*;
use serde::{Deserialize, Serialize};
use std::path::PathBuf;
use std::{path::PathBuf, str::FromStr};
pub struct RustServer {
server: DuniterServer,
......@@ -370,15 +380,7 @@ declare_types! {
let peer_js = cx.argument::<JsValue>(0)?;
let peer_stringified: PeerCardStringified = neon_serde::from_value(&mut cx, peer_js)?;
let peer = duniter_server::PeerCardDbV1 {
version: peer_stringified.version,
currency: peer_stringified.currency,
pubkey: peer_stringified.pubkey,
blockstamp: peer_stringified.blockstamp,
endpoints: peer_stringified.endpoints,
status: peer_stringified.status,
signature: peer_stringified.signature,
};
let peer = peer_stringified.into_peer_card_db_v1(&mut cx)?;
let this = cx.this();
let res = {
......@@ -392,15 +394,7 @@ declare_types! {
let peer_js = cx.argument::<JsValue>(0)?;
let peer_stringified: PeerCardStringified = neon_serde::from_value(&mut cx, peer_js)?;
let peer = duniter_server::PeerCardDbV1 {
version: peer_stringified.version,
currency: peer_stringified.currency,
pubkey: peer_stringified.pubkey,
blockstamp: peer_stringified.blockstamp,
endpoints: peer_stringified.endpoints,
status: peer_stringified.status,
signature: peer_stringified.signature,
};
let peer = peer_stringified.into_peer_card_db_v1(&mut cx)?;
let this = cx.this();
{
......@@ -515,6 +509,25 @@ pub struct PeerCardStringified {
pub endpoints: Vec<String>,
pub status: String,
pub signature: String,
pub member: bool,
}
impl PeerCardStringified {
fn into_peer_card_db_v1<'c, C: Context<'c>>(
self,
cx: &mut C,
) -> NeonResult<duniter_server::PeerCardDbV1> {
Ok(duniter_server::PeerCardDbV1 {
version: self.version,
currency: self.currency,
pubkey: into_neon_res(cx, PublicKey::from_base58(&self.pubkey))?,
blockstamp: into_neon_res(cx, Blockstamp::from_str(&self.blockstamp))?,
endpoints: self.endpoints,
status: &self.status == "UP",
signature: into_neon_res(cx, Signature::from_base64(&self.signature))?,
member: self.member,
})
}
}
#[derive(Deserialize, Serialize)]
......
......@@ -64,23 +64,13 @@ impl DuniterServer {
.expect("dbs pool disconnected")
}
pub fn save_peer(&self, new_peer_card: PeerCardDbV1) -> anyhow::Result<()> {
use dubp::crypto::keys::PublicKey as _;
let pubkey = PublicKey::from_base58(&new_peer_card.pubkey)?;
let pubkey = new_peer_card.pubkey;
use duniter_core::dbs::databases::network_v1::NetworkV1DbWritable as _;
self.dbs_pool
.execute(move |dbs| {
dbs.dunp_db.peers_old_write().upsert(
PubKeyKeyV2(pubkey),
duniter_core::dbs::PeerCardDbV1 {
version: new_peer_card.version,
currency: new_peer_card.currency,
pubkey: new_peer_card.pubkey,
blockstamp: new_peer_card.blockstamp,
endpoints: new_peer_card.endpoints,
status: new_peer_card.status,
signature: new_peer_card.signature,
},
)
dbs.dunp_db
.peers_old_write()
.upsert(PubKeyKeyV2(pubkey), new_peer_card)
})
.expect("dbs pool disconnected")
.map_err(|e| e.into())
......@@ -94,14 +84,14 @@ impl DuniterServer {
#[cfg(test)]
mod tests {
use super::*;
use dubp::crypto::keys::{
ed25519::{PublicKey, Signature},
PublicKey as _,
PublicKey as _, Signature as _,
};
use duniter_core::dbs::databases::network_v1::NetworkV1DbReadable;
use duniter_core::dbs::PeerCardDbV1;
use super::*;
use std::str::FromStr;
#[test]
fn test_receive_new_heads() -> anyhow::Result<()> {
......@@ -140,13 +130,14 @@ mod tests {
let peer = PeerCardDbV1 {
version: 0,
currency: "test".to_owned(),
pubkey: "82NdD9eEbXSjRJXeJdqf56xkpu6taTfTeEqtAtmtbyXY".to_owned(),
blockstamp: "379922-0000001D97770A8203062F9E618F29FFAA2EF4218649FCE6DD13E01C3932E943".to_owned(),
pubkey: PublicKey::from_base58("82NdD9eEbXSjRJXeJdqf56xkpu6taTfTeEqtAtmtbyXY")?,
blockstamp: Blockstamp::from_str("379922-0000001D97770A8203062F9E618F29FFAA2EF4218649FCE6DD13E01C3932E943")?,
endpoints: vec![],
status: "UP".to_owned(),
signature: "KBaoJuKIfkWJO015BTegUN8l81VYPfleVUfQUwPRPAAF1oB398hDb1bX/QUFe+3CKFz57aGT8bB745mz90x5Ag==".to_owned(),
status: true,
signature: Signature::from_base64("KBaoJuKIfkWJO015BTegUN8l81VYPfleVUfQUwPRPAAF1oB398hDb1bX/QUFe+3CKFz57aGT8bB745mz90x5Ag==")?,
member: false,
};
let pubkey = PublicKey::from_base58(&peer.pubkey)?;
let pubkey = peer.pubkey;
assert_eq!(dbs.dunp_db.peers_old().count()?, 0);
server.save_peer(peer.clone())?;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment