enable multiple offers per VM node
This commit is contained in:
parent
9e3a39545d
commit
eb70b2cdb1
2
Cargo.lock
generated
2
Cargo.lock
generated
@ -1011,7 +1011,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "detee-shared"
|
||||
version = "0.1.0"
|
||||
source = "git+ssh://git@gitea.detee.cloud/testnet/proto?branch=credits_app#01e93d3a2e4502c0e8e72026e8a1c55810961815"
|
||||
source = "git+ssh://git@gitea.detee.cloud/testnet/proto?branch=offers#4753a17fa29393b3f99b6dfcdcec48d935e6ebd9"
|
||||
dependencies = [
|
||||
"bincode 2.0.1",
|
||||
"prost",
|
||||
|
@ -15,7 +15,7 @@ serde_yaml = "0.9.34"
|
||||
surrealdb = "2.2.2"
|
||||
tokio = { version = "1.44.2", features = ["macros", "rt-multi-thread"] }
|
||||
tonic = { version = "0.12", features = ["tls"] }
|
||||
detee-shared = { git = "ssh://git@gitea.detee.cloud/testnet/proto", branch = "credits_app" }
|
||||
detee-shared = { git = "ssh://git@gitea.detee.cloud/testnet/proto", branch = "offers" }
|
||||
ed25519-dalek = "2.1.1"
|
||||
bs58 = "0.5.1"
|
||||
tokio-stream = "0.1.17"
|
||||
|
@ -9,7 +9,7 @@ use surreal_brain::{db, old_brain};
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<(), Box<dyn Error>> {
|
||||
dotenv().ok();
|
||||
let old_brain_data = old_brain::BrainData::load_from_disk()?;
|
||||
// let old_brain_data = old_brain::BrainData::load_from_disk()?;
|
||||
// println!("{}", serde_yaml::to_string(&old_brain_data)?);
|
||||
|
||||
let db_url = std::env::var("DB_URL").expect("DB_URL not set in .env");
|
||||
@ -21,7 +21,7 @@ async fn main() -> Result<(), Box<dyn Error>> {
|
||||
let db = db::db_connection(&db_url, &db_user, &db_pass, &db_ns, &db_name).await.unwrap();
|
||||
env_logger::builder().filter_level(log::LevelFilter::Trace);
|
||||
|
||||
db::migration0(&db, &old_brain_data).await?;
|
||||
db::migration1(&db).await?;
|
||||
|
||||
Ok(())
|
||||
}
|
@ -8,7 +8,9 @@ pub const CERT_PATH: &str = "/etc/detee/brain/brain-crt.pem";
|
||||
pub const CERT_KEY_PATH: &str = "/etc/detee/brain/brain-key.pem";
|
||||
pub const CONFIG_PATH: &str = "/etc/detee/brain/config.ini";
|
||||
|
||||
pub const DB_SCHEMA_FILES: [&str; 2] = ["surql/tables.sql", "surql/functions.sql"];
|
||||
pub const MIGRATION_0_SCHEMA: [&str; 2] = ["surql/migration0/tables.sql", "surql/migration0/functions.sql"];
|
||||
pub const MIGRATION_1_PATCH: &str = "surql/migration1/patch_tables.sql";
|
||||
pub const MIGRATION_1_SCHEMA: &str = "surql/migration1/final_tables.sql";
|
||||
|
||||
pub static ADMIN_ACCOUNTS: LazyLock<Vec<String>> = LazyLock::new(|| {
|
||||
let default_admin_keys = vec![
|
||||
|
@ -5,8 +5,8 @@ pub mod general;
|
||||
pub mod vm;
|
||||
|
||||
use crate::constants::{
|
||||
APP_NODE, DB_SCHEMA_FILES, DEFAULT_ENDPOINT, DELETED_APP, DELETED_VM, NEW_APP_REQ, NEW_VM_REQ,
|
||||
UPDATE_VM_REQ,
|
||||
APP_NODE, DEFAULT_ENDPOINT, DELETED_APP, DELETED_VM, MIGRATION_0_SCHEMA, MIGRATION_1_PATCH,
|
||||
MIGRATION_1_SCHEMA, NEW_APP_REQ, NEW_VM_REQ, UPDATE_VM_REQ,
|
||||
};
|
||||
use crate::old_brain;
|
||||
use prelude::*;
|
||||
@ -77,34 +77,18 @@ pub async fn db_connection(
|
||||
Ok(db_connection)
|
||||
}
|
||||
|
||||
pub async fn migration0(
|
||||
db: &Surreal<Client>,
|
||||
old_data: &old_brain::BrainData,
|
||||
) -> Result<(), Error> {
|
||||
let accounts: Vec<Account> = old_data.into();
|
||||
let vm_nodes: Vec<VmNode> = old_data.into();
|
||||
let app_nodes: Vec<AppNode> = old_data.into();
|
||||
let active_vm: Vec<ActiveVm> = old_data.into();
|
||||
let active_app: Vec<ActiveApp> = old_data.into();
|
||||
// TODO: figure if we can inspect DB schema in the DB with the schema from migration0,
|
||||
// and execute migration1_patch only if it is needed.
|
||||
|
||||
for schema_data in DB_SCHEMA_FILES.map(|path| (std::fs::read_to_string(path), path)) {
|
||||
let schema_file = schema_data.1;
|
||||
println!("Loading schema from {schema_file}");
|
||||
let schema = schema_data.0?;
|
||||
db.query(schema).await?;
|
||||
pub async fn migration1_patch(db: &Surreal<Client>) -> Result<(), Error> {
|
||||
let patch_instructions = std::fs::read_to_string(MIGRATION_1_PATCH)?;
|
||||
db.query(patch_instructions).await?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
println!("Inserting accounts...");
|
||||
let _: Vec<Account> = db.insert(()).content(accounts).await?;
|
||||
println!("Inserting vm nodes...");
|
||||
let _: Vec<VmNode> = db.insert(()).content(vm_nodes).await?;
|
||||
println!("Inserting app nodes...");
|
||||
let _: Vec<AppNode> = db.insert(()).content(app_nodes).await.unwrap();
|
||||
println!("Inserting active vm contracts...");
|
||||
let _: Vec<ActiveVm> = db.insert(()).relation(active_vm).await?;
|
||||
println!("Inserting app contracts...");
|
||||
let _: Vec<ActiveApp> = db.insert(()).relation(active_app).await?;
|
||||
|
||||
pub async fn migration1_tables(db: &Surreal<Client>) -> Result<(), Error> {
|
||||
let patch_instructions = std::fs::read_to_string(MIGRATION_1_SCHEMA)?;
|
||||
db.query(patch_instructions).await?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
135
src/old_brain.rs
135
src/old_brain.rs
@ -1,135 +0,0 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
// TODO: delete this file after migration0 gets executed
|
||||
|
||||
use chrono::Utc;
|
||||
use dashmap::DashMap;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::collections::{HashMap, HashSet};
|
||||
|
||||
use crate::constants::OLD_BRAIN_DATA_PATH;
|
||||
|
||||
#[derive(Clone, Default, Serialize, Deserialize, Debug)]
|
||||
pub struct AccountData {
|
||||
pub balance: u64,
|
||||
pub tmp_locked: u64,
|
||||
// holds reasons why VMs of this account got kicked
|
||||
pub kicked_for: Vec<String>,
|
||||
pub last_kick: chrono::DateTime<Utc>,
|
||||
// holds accounts that banned this account
|
||||
pub banned_by: HashSet<String>,
|
||||
}
|
||||
|
||||
#[derive(Clone, Default, Serialize, Deserialize)]
|
||||
pub struct OperatorData {
|
||||
pub escrow: u64,
|
||||
pub email: String,
|
||||
pub banned_users: HashSet<String>,
|
||||
pub vm_nodes: HashSet<String>,
|
||||
pub app_nodes: HashSet<String>,
|
||||
}
|
||||
|
||||
#[derive(Eq, PartialEq, Clone, Debug, Default, Serialize, Deserialize)]
|
||||
pub struct VmNode {
|
||||
pub public_key: String,
|
||||
pub operator_wallet: String,
|
||||
pub country: String,
|
||||
pub region: String,
|
||||
pub city: String,
|
||||
pub ip: String,
|
||||
pub avail_mem_mb: u32,
|
||||
pub avail_vcpus: u32,
|
||||
pub avail_storage_gbs: u32,
|
||||
pub avail_ipv4: u32,
|
||||
pub avail_ipv6: u32,
|
||||
pub avail_ports: u32,
|
||||
pub max_ports_per_vm: u32,
|
||||
// nanoLP per unit per minute
|
||||
pub price: u64,
|
||||
// 1st String is user wallet and 2nd String is report message
|
||||
pub reports: HashMap<String, String>,
|
||||
pub offline_minutes: u64,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Serialize, Deserialize)]
|
||||
pub struct VmContract {
|
||||
pub uuid: String,
|
||||
pub hostname: String,
|
||||
pub admin_pubkey: String,
|
||||
pub node_pubkey: String,
|
||||
pub exposed_ports: Vec<u32>,
|
||||
pub public_ipv4: String,
|
||||
pub public_ipv6: String,
|
||||
pub disk_size_gb: u32,
|
||||
pub vcpus: u32,
|
||||
pub memory_mb: u32,
|
||||
pub kernel_sha: String,
|
||||
pub dtrfs_sha: String,
|
||||
pub created_at: chrono::DateTime<Utc>,
|
||||
pub updated_at: chrono::DateTime<Utc>,
|
||||
// recommended value is 20000
|
||||
/// price per unit per minute
|
||||
pub price_per_unit: u64,
|
||||
pub locked_nano: u64,
|
||||
pub collected_at: chrono::DateTime<Utc>,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
|
||||
pub struct AppContract {
|
||||
pub uuid: String,
|
||||
pub package_url: String,
|
||||
pub admin_pubkey: String,
|
||||
pub node_pubkey: String,
|
||||
pub mapped_ports: Vec<(u16, u16)>,
|
||||
pub host_ipv4: String,
|
||||
pub disk_size_mb: u32,
|
||||
pub vcpus: u32,
|
||||
pub memory_mb: u32,
|
||||
pub created_at: chrono::DateTime<Utc>,
|
||||
pub updated_at: chrono::DateTime<Utc>,
|
||||
// price per unit per minute
|
||||
// recommended value is 20000
|
||||
pub price_per_unit: u64,
|
||||
pub locked_nano: u64,
|
||||
pub collected_at: chrono::DateTime<Utc>,
|
||||
pub hratls_pubkey: String,
|
||||
pub public_package_mr_enclave: Option<Vec<u8>>,
|
||||
pub app_name: String,
|
||||
}
|
||||
|
||||
#[derive(Eq, Hash, PartialEq, Clone, Debug, Default, Serialize, Deserialize)]
|
||||
pub struct AppNode {
|
||||
pub node_pubkey: String,
|
||||
pub operator_wallet: String,
|
||||
pub country: String,
|
||||
pub region: String,
|
||||
pub city: String,
|
||||
pub ip: String,
|
||||
pub avail_mem_mb: u32,
|
||||
pub avail_vcpus: u32,
|
||||
pub avail_storage_mb: u32,
|
||||
pub avail_no_of_port: u32,
|
||||
pub max_ports_per_app: u32,
|
||||
// nanotokens per unit per minute
|
||||
pub price: u64,
|
||||
pub offline_minutes: u64,
|
||||
}
|
||||
|
||||
#[derive(Default, Serialize, Deserialize)]
|
||||
pub struct BrainData {
|
||||
pub accounts: DashMap<String, AccountData>,
|
||||
pub operators: DashMap<String, OperatorData>,
|
||||
pub vm_nodes: Vec<VmNode>,
|
||||
pub vm_contracts: Vec<VmContract>,
|
||||
|
||||
pub app_nodes: Vec<AppNode>,
|
||||
pub app_contracts: Vec<AppContract>,
|
||||
}
|
||||
|
||||
impl BrainData {
|
||||
pub fn load_from_disk() -> Result<Self, Box<dyn std::error::Error>> {
|
||||
let content = std::fs::read_to_string(OLD_BRAIN_DATA_PATH)?;
|
||||
let data: Self = serde_yaml::from_str(&content)?;
|
||||
Ok(data)
|
||||
}
|
||||
}
|
158
surql/migration1/final_tables.sql
Normal file
158
surql/migration1/final_tables.sql
Normal file
@ -0,0 +1,158 @@
|
||||
-- SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
DEFINE TABLE account SCHEMAFULL;
|
||||
DEFINE FIELD balance ON TABLE account TYPE int DEFAULT 0;
|
||||
DEFINE FIELD tmp_locked ON TABLE account TYPE int DEFAULT 0;
|
||||
DEFINE FIELD escrow ON TABLE account TYPE int DEFAULT 0;
|
||||
DEFINE FIELD email ON TABLE account TYPE string DEFAULT "";
|
||||
|
||||
DEFINE TABLE vm_node SCHEMAFULL;
|
||||
DEFINE FIELD operator ON TABLE vm_node TYPE record<account>;
|
||||
DEFINE FIELD pub_sub_node ON TABLE vm_node TYPE string default "127.0.0.1:31337";
|
||||
DEFINE FIELD country ON TABLE vm_node TYPE string;
|
||||
DEFINE FIELD region ON TABLE vm_node TYPE string;
|
||||
DEFINE FIELD city ON TABLE vm_node TYPE string;
|
||||
DEFINE FIELD ip ON TABLE vm_node TYPE string;
|
||||
DEFINE FIELD avail_ipv4 ON TABLE vm_node TYPE int;
|
||||
DEFINE FIELD avail_ipv6 ON TABLE vm_node TYPE int;
|
||||
DEFINE FIELD avail_ports ON TABLE vm_node TYPE int;
|
||||
DEFINE FIELD max_ports_per_vm ON TABLE vm_node TYPE int;
|
||||
DEFINE FIELD connected_at ON TABLE vm_node TYPE datetime;
|
||||
DEFINE FIELD disconnected_at ON TABLE vm_node TYPE datetime;
|
||||
|
||||
DEFINE TABLE vm_node_offer SCHEMAFULL;
|
||||
DEFINE FIELD vm_node ON TABLE vm_node_offer TYPE record<vm_node>;
|
||||
DEFINE FIELD price ON TABLE vm_node_offer TYPE int;
|
||||
DEFINE FIELD vcpus ON TABLE vm_node_offer TYPE int;
|
||||
DEFINE FIELD memory_mib ON TABLE vm_node_offer TYPE int;
|
||||
DEFINE FIELD disk_mib ON TABLE vm_node_offer TYPE int;
|
||||
|
||||
DEFINE TABLE new_vm_req TYPE RELATION FROM account TO vm_node SCHEMAFULL;
|
||||
DEFINE FIELD hostname ON TABLE new_vm_req TYPE string;
|
||||
DEFINE FIELD extra_ports ON TABLE new_vm_req TYPE array<int>;
|
||||
DEFINE FIELD public_ipv4 ON TABLE new_vm_req TYPE bool;
|
||||
DEFINE FIELD public_ipv6 ON TABLE new_vm_req TYPE bool;
|
||||
DEFINE FIELD disk_size_mib ON TABLE new_vm_req TYPE int;
|
||||
DEFINE FIELD vcpus ON TABLE new_vm_req TYPE int;
|
||||
DEFINE FIELD memory_mib ON TABLE new_vm_req TYPE int;
|
||||
DEFINE FIELD dtrfs_sha ON TABLE new_vm_req TYPE string;
|
||||
DEFINE FIELD dtrfs_url ON TABLE new_vm_req TYPE string;
|
||||
DEFINE FIELD kernel_sha ON TABLE new_vm_req TYPE string;
|
||||
DEFINE FIELD kernel_url ON TABLE new_vm_req TYPE string;
|
||||
DEFINE FIELD created_at ON TABLE new_vm_req TYPE datetime;
|
||||
DEFINE FIELD price_per_unit ON TABLE new_vm_req TYPE int;
|
||||
DEFINE FIELD locked_nano ON TABLE new_vm_req TYPE int;
|
||||
DEFINE FIELD error ON TABLE new_vm_req TYPE string;
|
||||
|
||||
DEFINE TABLE active_vm TYPE RELATION FROM account TO vm_node SCHEMAFULL;
|
||||
DEFINE FIELD hostname ON TABLE active_vm TYPE string;
|
||||
DEFINE FIELD mapped_ports ON TABLE active_vm TYPE array<[int, int]>;
|
||||
DEFINE FIELD public_ipv4 ON TABLE active_vm TYPE string;
|
||||
DEFINE FIELD public_ipv6 ON TABLE active_vm TYPE string;
|
||||
DEFINE FIELD disk_size_mib ON TABLE active_vm TYPE int;
|
||||
DEFINE FIELD vcpus ON TABLE active_vm TYPE int;
|
||||
DEFINE FIELD memory_mib ON TABLE active_vm TYPE int;
|
||||
DEFINE FIELD dtrfs_sha ON TABLE active_vm TYPE string;
|
||||
DEFINE FIELD kernel_sha ON TABLE active_vm TYPE string;
|
||||
DEFINE FIELD created_at ON TABLE active_vm TYPE datetime;
|
||||
DEFINE FIELD price_per_unit ON TABLE active_vm TYPE int;
|
||||
DEFINE FIELD locked_nano ON TABLE active_vm TYPE int;
|
||||
DEFINE FIELD collected_at ON TABLE active_vm TYPE datetime;
|
||||
|
||||
DEFINE TABLE update_vm_req TYPE RELATION FROM account TO vm_node SCHEMAFULL;
|
||||
DEFINE FIELD vcpus ON TABLE update_vm_req TYPE int;
|
||||
DEFINE FIELD memory_mib ON TABLE update_vm_req TYPE int;
|
||||
DEFINE FIELD disk_size_mib ON TABLE update_vm_req TYPE int;
|
||||
DEFINE FIELD dtrfs_sha ON TABLE update_vm_req TYPE string;
|
||||
DEFINE FIELD dtrfs_url ON TABLE update_vm_req TYPE string;
|
||||
DEFINE FIELD kernel_sha ON TABLE update_vm_req TYPE string;
|
||||
DEFINE FIELD kernel_url ON TABLE update_vm_req TYPE string;
|
||||
DEFINE FIELD created_at ON TABLE update_vm_req TYPE datetime;
|
||||
DEFINE FIELD error ON TABLE update_vm_req TYPE string;
|
||||
|
||||
DEFINE TABLE deleted_vm TYPE RELATION FROM account TO vm_node SCHEMAFULL;
|
||||
DEFINE FIELD hostname ON TABLE deleted_vm TYPE string;
|
||||
DEFINE FIELD mapped_ports ON TABLE deleted_vm TYPE array<[int, int]>;
|
||||
DEFINE FIELD public_ipv4 ON TABLE deleted_vm TYPE string;
|
||||
DEFINE FIELD public_ipv6 ON TABLE deleted_vm TYPE string;
|
||||
DEFINE FIELD disk_size_mib ON TABLE deleted_vm TYPE int;
|
||||
DEFINE FIELD vcpus ON TABLE deleted_vm TYPE int;
|
||||
DEFINE FIELD memory_mib ON TABLE deleted_vm TYPE int;
|
||||
DEFINE FIELD dtrfs_sha ON TABLE deleted_vm TYPE string;
|
||||
DEFINE FIELD kernel_sha ON TABLE deleted_vm TYPE string;
|
||||
DEFINE FIELD created_at ON TABLE deleted_vm TYPE datetime;
|
||||
DEFINE FIELD deleted_at ON TABLE deleted_vm TYPE datetime DEFAULT time::now();
|
||||
DEFINE FIELD price_per_unit ON TABLE deleted_vm TYPE int;
|
||||
|
||||
DEFINE TABLE app_node SCHEMAFULL;
|
||||
DEFINE FIELD operator ON TABLE app_node TYPE record<account>;
|
||||
DEFINE FIELD pub_sub_node ON TABLE app_node TYPE string default "127.0.0.1:31337";
|
||||
DEFINE FIELD country ON TABLE app_node TYPE string;
|
||||
DEFINE FIELD region ON TABLE app_node TYPE string;
|
||||
DEFINE FIELD city ON TABLE app_node TYPE string;
|
||||
DEFINE FIELD ip ON TABLE app_node TYPE string;
|
||||
DEFINE FIELD avail_mem_mib ON TABLE app_node TYPE int;
|
||||
DEFINE FIELD avail_vcpus ON TABLE app_node TYPE int;
|
||||
DEFINE FIELD avail_storage_mib ON TABLE app_node TYPE int;
|
||||
DEFINE FIELD avail_ports ON TABLE app_node TYPE int;
|
||||
DEFINE FIELD max_ports_per_app ON TABLE app_node TYPE int;
|
||||
DEFINE FIELD price ON TABLE app_node TYPE int;
|
||||
DEFINE FIELD connected_at ON TABLE app_node TYPE datetime;
|
||||
DEFINE FIELD disconnected_at ON TABLE app_node TYPE datetime;
|
||||
|
||||
DEFINE TABLE new_app_req Type RELATION FROM account to app_node SCHEMAFULL;
|
||||
DEFINE FIELD app_name ON TABLE new_app_req TYPE string;
|
||||
DEFINE FIELD package_url ON TABLE new_app_req TYPE string;
|
||||
DEFINE FIELD mr_enclave ON TABLE new_app_req TYPE string;
|
||||
DEFINE FIELD hratls_pubkey ON TABLE new_app_req TYPE string;
|
||||
DEFINE FIELD ports ON TABLE new_app_req TYPE array<int>;
|
||||
DEFINE FIELD memory_mib ON TABLE new_app_req TYPE int;
|
||||
DEFINE FIELD vcpus ON TABLE new_app_req TYPE int;
|
||||
DEFINE FIELD disk_size_mib ON TABLE new_app_req TYPE int;
|
||||
DEFINE FIELD locked_nano ON TABLE new_app_req TYPE int;
|
||||
DEFINE FIELD price_per_unit ON TABLE new_app_req TYPE int;
|
||||
DEFINE FIELD error ON TABLE new_app_req TYPE string;
|
||||
DEFINE FIELD created_at ON TABLE new_app_req TYPE datetime;
|
||||
|
||||
DEFINE TABLE active_app TYPE RELATION FROM account TO app_node SCHEMAFULL;
|
||||
DEFINE FIELD app_name ON TABLE active_app TYPE string;
|
||||
DEFINE FIELD mapped_ports ON TABLE active_app TYPE array<[int, int]>;
|
||||
DEFINE FIELD host_ipv4 ON TABLE active_app TYPE string;
|
||||
DEFINE FIELD vcpus ON TABLE active_app TYPE int;
|
||||
DEFINE FIELD memory_mib ON TABLE active_app TYPE int;
|
||||
DEFINE FIELD disk_size_mib ON TABLE active_app TYPE int;
|
||||
DEFINE FIELD created_at ON TABLE active_app TYPE datetime;
|
||||
DEFINE FIELD price_per_unit ON TABLE active_app TYPE int;
|
||||
DEFINE FIELD locked_nano ON TABLE active_app TYPE int;
|
||||
DEFINE FIELD collected_at ON TABLE active_app TYPE datetime;
|
||||
DEFINE FIELD mr_enclave ON TABLE active_app TYPE string;
|
||||
DEFINE FIELD package_url ON TABLE active_app TYPE string;
|
||||
DEFINE FIELD hratls_pubkey ON TABLE active_app TYPE string;
|
||||
|
||||
DEFINE TABLE deleted_app TYPE RELATION FROM account TO app_node SCHEMAFULL;
|
||||
DEFINE FIELD app_name ON TABLE deleted_app TYPE string;
|
||||
DEFINE FIELD mapped_ports ON TABLE deleted_app TYPE array<[int, int]>;
|
||||
DEFINE FIELD host_ipv4 ON TABLE deleted_app TYPE string;
|
||||
DEFINE FIELD vcpus ON TABLE deleted_app TYPE int;
|
||||
DEFINE FIELD memory_mib ON TABLE deleted_app TYPE int;
|
||||
DEFINE FIELD disk_size_mib ON TABLE deleted_app TYPE int;
|
||||
DEFINE FIELD created_at ON TABLE deleted_app TYPE datetime;
|
||||
DEFINE FIELD deleted_at ON TABLE deleted_app TYPE datetime DEFAULT time::now();
|
||||
DEFINE FIELD price_per_unit ON TABLE deleted_app TYPE int;
|
||||
DEFINE FIELD mr_enclave ON TABLE deleted_app TYPE string;
|
||||
DEFINE FIELD package_url ON TABLE deleted_app TYPE string;
|
||||
DEFINE FIELD hratls_pubkey ON TABLE deleted_app TYPE string;
|
||||
|
||||
DEFINE TABLE ban TYPE RELATION FROM account TO account;
|
||||
DEFINE FIELD created_at ON TABLE ban TYPE datetime DEFAULT time::now();;
|
||||
|
||||
DEFINE TABLE kick TYPE RELATION FROM account TO account;
|
||||
DEFINE FIELD created_at ON TABLE kick TYPE datetime;
|
||||
DEFINE FIELD reason ON TABLE kick TYPE string;
|
||||
DEFINE FIELD contract ON TABLE kick TYPE record<deleted_vm|deleted_app>;
|
||||
DEFINE FIELD node ON TABLE kick TYPE record<vm_node|app_node>;
|
||||
|
||||
DEFINE TABLE report TYPE RELATION FROM account TO vm_node|app_node;
|
||||
DEFINE FIELD created_at ON TABLE report TYPE datetime;
|
||||
DEFINE FIELD reason ON TABLE report TYPE string;
|
||||
DEFINE FIELD contract_id ON TABLE report TYPE string;
|
13
surql/migration1/patch_tables.sql
Normal file
13
surql/migration1/patch_tables.sql
Normal file
@ -0,0 +1,13 @@
|
||||
-- SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
REMOVE FIELD price ON TABLE vm_node;
|
||||
REMOVE FIELD avail_vcpus ON TABLE vm_node;
|
||||
REMOVE FIELD avail_storage_mib ON TABLE vm_node;
|
||||
REMOVE FIELD avail_mem_mib ON TABLE vm_node;
|
||||
|
||||
DEFINE TABLE vm_node_offer SCHEMAFULL;
|
||||
DEFINE FIELD vm_node ON TABLE vm_node_offer TYPE record<vm_node>;
|
||||
DEFINE FIELD price ON TABLE vm_node_offer TYPE int;
|
||||
DEFINE FIELD vcpus ON TABLE vm_node_offer TYPE int;
|
||||
DEFINE FIELD memory_mib ON TABLE vm_node_offer TYPE int;
|
||||
DEFINE FIELD disk_mib ON TABLE vm_node_offer TYPE int;
|
@ -9,7 +9,7 @@ use detee_shared::vm_proto::brain_vm_daemon_server::BrainVmDaemonServer;
|
||||
use dotenv::dotenv;
|
||||
use hyper_util::rt::TokioIo;
|
||||
use std::sync::Arc;
|
||||
use surreal_brain::constants::DB_SCHEMA_FILES;
|
||||
use surreal_brain::constants::MIGRATION_0_SCHEMA;
|
||||
use surreal_brain::grpc::app::{AppCliServer, AppDaemonServer};
|
||||
use surreal_brain::grpc::general::GeneralCliServer;
|
||||
use surreal_brain::grpc::vm::{VmCliServer, VmDaemonServer};
|
||||
@ -39,7 +39,7 @@ pub async fn prepare_test_db() -> Result<Surreal<Client>> {
|
||||
serde_yaml::from_str(&raw_mock_data)?;
|
||||
|
||||
db.query(format!("REMOVE DATABASE {db_name}")).await?;
|
||||
for schema in DB_SCHEMA_FILES.map(std::fs::read_to_string) {
|
||||
for schema in MIGRATION_0_SCHEMA.map(std::fs::read_to_string) {
|
||||
db.query(schema?).await?;
|
||||
}
|
||||
surreal_brain::db::migration0(&db, &mock_data).await?;
|
||||
|
Loading…
Reference in New Issue
Block a user