Skip to content

Commit

Permalink
feat(config): Introduce ephemeral and persistent storage
Browse files Browse the repository at this point in the history
  • Loading branch information
gurinderu committed Feb 20, 2024
1 parent 2a3f89d commit ae31977
Show file tree
Hide file tree
Showing 4 changed files with 65 additions and 16 deletions.
1 change: 0 additions & 1 deletion crates/core-manager/src/manager.rs
Original file line number Diff line number Diff line change
Expand Up @@ -427,7 +427,6 @@ impl CoreManagerFunctions for PersistentCoreManager {
drop(lock);
let toml = toml::to_string_pretty(&persistent_state)
.map_err(|err| PersistError::SerializationError { err })?;
drop(lock);
let exists = self.file_path.exists();
let mut file = if exists {
File::open(self.file_path.clone()).map_err(|err| PersistError::IoError { err })?
Expand Down
9 changes: 8 additions & 1 deletion crates/server-config/src/defaults.rs
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,14 @@ pub fn default_base_dir() -> PathBuf {
format!(".fluence/v{CONFIG_VERSION}").into()
}

pub fn services_base_dir(base_dir: &Path) -> PathBuf {
pub fn persistent_dir(base_dir: &Path) -> PathBuf {
base_dir.join("persistent")
}
pub fn ephemeral_dir(base_dir: &Path) -> PathBuf {
base_dir.join("ephemeral")
}

pub fn services_dir(base_dir: &Path) -> PathBuf {
base_dir.join("services")
}

Expand Down
69 changes: 56 additions & 13 deletions crates/server-config/src/dir_config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
use crate::defaults::{avm_base_dir, default_base_dir, services_base_dir};
use crate::defaults::{avm_base_dir, default_base_dir, services_dir};

use air_interpreter_fs::air_interpreter_path;
use fs_utils::{canonicalize, create_dirs, to_abs_path};

use crate::{ephemeral_dir, persistent_dir};
use eyre::WrapErr;
use serde::{Deserialize, Serialize};
use std::path::PathBuf;
Expand All @@ -28,8 +29,17 @@ pub struct UnresolvedDirConfig {
#[serde(default = "default_base_dir")]
pub base_dir: PathBuf,

/// Base directory for resources needed by application services
pub services_base_dir: Option<PathBuf>,
/// Base directory for persistent resources
pub persistent_base_dir: Option<PathBuf>,

/// Base directory for ephemeral resources
pub ephemeral_base_dir: Option<PathBuf>,

/// Base directory for persistent resources needed by application services
pub services_persistent_dir: Option<PathBuf>,

/// Base directory for ephemeral resources needed by application services
pub services_ephemeral_dir: Option<PathBuf>,

/// Base directory for resources needed by application services
pub avm_base_dir: Option<PathBuf>,
Expand Down Expand Up @@ -57,14 +67,34 @@ impl UnresolvedDirConfig {
pub fn resolve(self) -> eyre::Result<ResolvedDirConfig> {
let base = to_abs_path(self.base_dir);

let services_base_dir = self.services_base_dir.unwrap_or(services_base_dir(&base));
let avm_base_dir = self.avm_base_dir.unwrap_or(avm_base_dir(&base));
let ephemeral_base_dir = self.ephemeral_base_dir.unwrap_or(ephemeral_dir(&base));
let persistent_base_dir = self.persistent_base_dir.unwrap_or(persistent_dir(&base));

// ephemeral dirs
let services_ephemeral_dir = self
.services_ephemeral_dir
.unwrap_or(services_dir(&ephemeral_base_dir));
let avm_base_dir = self
.avm_base_dir
.unwrap_or(avm_base_dir(&ephemeral_base_dir));

// persistent dirs
let services_persistent_dir = self
.services_persistent_dir
.unwrap_or(services_dir(&persistent_base_dir));
let air_interpreter_path = self
.air_interpreter_path
.unwrap_or(air_interpreter_path(&base));
let spell_base_dir = self.spell_base_dir.unwrap_or(base.join("spell"));
let keypairs_base_dir = self.keypairs_base_dir.unwrap_or(base.join("keypairs"));
let workers_base_dir = self.workers_base_dir.unwrap_or(base.join("workers"));
.unwrap_or(air_interpreter_path(&persistent_base_dir));
let spell_base_dir = self
.spell_base_dir
.unwrap_or(persistent_base_dir.join("spell"));
let keypairs_base_dir = self
.keypairs_base_dir
.unwrap_or(persistent_base_dir.join("keypairs"));
let workers_base_dir = self
.workers_base_dir
.unwrap_or(persistent_base_dir.join("workers"));

let cc_events_dir = self.cc_events_dir.unwrap_or(base.join("cc_events"));
let core_state_path = self
.core_state_path
Expand All @@ -73,27 +103,39 @@ impl UnresolvedDirConfig {

create_dirs(&[
&base,
&services_base_dir,
// ephemeral dirs
&ephemeral_base_dir,
&services_ephemeral_dir,
&avm_base_dir,
// persistent dirs
&persistent_base_dir,
&services_persistent_dir,
&spell_base_dir,
&keypairs_base_dir,
&workers_base_dir,
// other
&cc_events_dir,
])
.context("creating configured directories")?;

let base = canonicalize(base)?;
let services_base_dir = canonicalize(services_base_dir)?;
// ephemeral dirs
let avm_base_dir = canonicalize(avm_base_dir)?;
let services_ephemeral_dir = canonicalize(services_ephemeral_dir)?;

// persistent dirs
let services_persistent_dir = canonicalize(services_persistent_dir)?;
let spell_base_dir = canonicalize(spell_base_dir)?;
let keypairs_base_dir = canonicalize(keypairs_base_dir)?;
let workers_base_dir = canonicalize(workers_base_dir)?;

let cc_events_dir = canonicalize(cc_events_dir)?;

Ok(ResolvedDirConfig {
base_dir: base,
services_base_dir,
avm_base_dir,
services_ephemeral_dir,
services_persistent_dir,
air_interpreter_path,
spell_base_dir,
keypairs_base_dir,
Expand All @@ -107,9 +149,10 @@ impl UnresolvedDirConfig {
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct ResolvedDirConfig {
pub base_dir: PathBuf,
pub services_base_dir: PathBuf,
/// Directory where particle's prev_data is stored
pub avm_base_dir: PathBuf,
pub services_ephemeral_dir: PathBuf,
pub services_persistent_dir: PathBuf,
/// Directory where interpreter's WASM module is stored
pub air_interpreter_path: PathBuf,
pub spell_base_dir: PathBuf,
Expand Down
2 changes: 1 addition & 1 deletion nox/src/node.rs
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ impl<RT: AquaRuntime> Node<RT> {

let services_config = ServicesConfig::new(
scopes.get_host_peer_id(),
config.dir_config.services_base_dir.clone(),
config.dir_config.services_persistent_dir.clone(),
config_utils::particles_vault_dir(&config.dir_config.avm_base_dir),
config.services_envs.clone(),
config.management_peer_id,
Expand Down

0 comments on commit ae31977

Please sign in to comment.