From ddacea09833e354a282ee2dd278fbcff2d41d107 Mon Sep 17 00:00:00 2001 From: Vartan Babayan <v.babayan@picodata.io> Date: Fri, 20 Dec 2024 13:45:41 +0300 Subject: [PATCH] refactor: rename data_dir to instance_dir --- CHANGELOG.md | 2 ++ docker/docker-compose.yml | 8 +++--- src/cli/args.rs | 6 ++--- src/config.rs | 16 ++++++------ src/lib.rs | 10 +++---- src/luamod.rs | 2 +- src/pgproto.rs | 8 +++--- src/pgproto/tls.rs | 12 ++++----- src/tarantool.rs | 10 +++---- test/conftest.py | 36 ++++++++++++------------- test/generate_snapshot.py | 2 +- test/int/test_audit.py | 14 +++++----- test/int/test_basics.py | 6 ++--- test/int/test_cli_connect.py | 18 ++++++------- test/int/test_cli_ux.py | 48 +++++++++++++++++----------------- test/int/test_compatibility.py | 8 +++--- test/int/test_config_file.py | 30 ++++++++++----------- test/int/test_expelling.py | 2 +- test/int/test_joining.py | 4 +-- test/int/test_plugin.py | 8 +++--- test/int/test_script.py | 4 +-- test/int/test_snapshot.py | 2 +- test/manual/test_scaling.py | 2 +- 23 files changed, 131 insertions(+), 127 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 61fb775373..bd5199d23a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -41,6 +41,8 @@ to 2 and 3. - Now, for instance to join a cluster, it's version must be the same as the cluster's version or one minor version lower. For example, if the cluster's version is 24.7, only instances with versions 24.7 or 24.6 can join. +- Global rename `data_dir` to `instance_dir` in sources and config file, environment variable `PICODATA_DATA_DIR` renamed to `PICODATA_INSTANCE_DIR` + ### RPC API - `.proc_expel` and `.proc_expel_redirect` takes instance uuid instead of instance name. diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 732892583e..34b80b4ea0 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -8,7 +8,7 @@ services: environment: PICODATA_PEER: picodata-1-1:3301 PICODATA_LISTEN: picodata-1-1:3301 - PICODATA_DATA_DIR: /pico/data/picodata-1-1 + PICODATA_INSTANCE_DIR: /pico/data/picodata-1-1 PICODATA_ADVERTISE: picodata-1-1:3301 PICODATA_FAILURE_DOMAIN: HOST=picodata-1 PICODATA_INIT_REPLICATION_FACTOR: 2 @@ -30,7 +30,7 @@ services: environment: PICODATA_PEER: picodata-1-1:3301 PICODATA_LISTEN: picodata-1-2:3301 - PICODATA_DATA_DIR: /pico/data/picodata-1-2 + PICODATA_INSTANCE_DIR: /pico/data/picodata-1-2 PICODATA_ADVERTISE: picodata-1-2:3301 PICODATA_FAILURE_DOMAIN: HOST=picodata-1 PICODATA_INIT_REPLICATION_FACTOR: 2 @@ -49,7 +49,7 @@ services: environment: PICODATA_PEER: picodata-1-1:3301 PICODATA_LISTEN: picodata-2-1:3301 - PICODATA_DATA_DIR: /pico/data/picodata-2-1 + PICODATA_INSTANCE_DIR: /pico/data/picodata-2-1 PICODATA_ADVERTISE: picodata-2-1:3301 PICODATA_FAILURE_DOMAIN: HOST=picodata-2 PICODATA_INIT_REPLICATION_FACTOR: 2 @@ -68,7 +68,7 @@ services: environment: PICODATA_PEER: picodata-1-1:3301 PICODATA_LISTEN: picodata-2-2:3301 - PICODATA_DATA_DIR: /pico/data/picodata-2-2 + PICODATA_INSTANCE_DIR: /pico/data/picodata-2-2 PICODATA_ADVERTISE: picodata-2-2:3301 PICODATA_FAILURE_DOMAIN: HOST=picodata-2 PICODATA_INIT_REPLICATION_FACTOR: 2 diff --git a/src/cli/args.rs b/src/cli/args.rs index 0a460f6af8..d73d8197c8 100644 --- a/src/cli/args.rs +++ b/src/cli/args.rs @@ -42,11 +42,11 @@ pub struct Run { /// By default this will be "demo". pub cluster_name: Option<String>, - #[clap(long, value_name = "PATH", env = "PICODATA_DATA_DIR")] + #[clap(long, value_name = "PATH", env = "PICODATA_INSTANCE_DIR")] /// Here the instance persists all of its data. /// /// By default this is the current working directory ("."). - pub data_dir: Option<PathBuf>, + pub instance_dir: Option<PathBuf>, #[clap(long, value_name = "PATH", env = "PICODATA_CONFIG_FILE")] /// Path to configuration file in yaml format. @@ -68,7 +68,7 @@ pub struct Run { /// Key is a `.` separated path to a configuration parameter. /// The data in the `VALUE` is interpreted as YAML. /// - /// For example: `-c instance.log.level=debug -c instance.data_dir=/path/to/dir` + /// For example: `-c instance.log.level=debug -c instance.instance_dir=/path/to/dir` /// /// Can also be provided via PICODATA_CONFIG_PARAMETERS environment variable. pub config_parameter: Vec<String>, diff --git a/src/config.rs b/src/config.rs index 4849a0bf7d..1320cd9023 100644 --- a/src/config.rs +++ b/src/config.rs @@ -249,8 +249,8 @@ Using configuration file '{args_path}'."); } } - if let Some(data_dir) = args.data_dir { - config_from_args.instance.data_dir = Some(data_dir); + if let Some(instance_dir) = args.instance_dir { + config_from_args.instance.instance_dir = Some(instance_dir); } if let Some(service_password_file) = args.service_password_file { @@ -981,7 +981,7 @@ impl ClusterConfig { #[derive(PartialEq, Default, Debug, Clone, serde::Deserialize, serde::Serialize, Introspection)] pub struct InstanceConfig { #[introspection(config_default = PathBuf::from("."))] - pub data_dir: Option<PathBuf>, + pub instance_dir: Option<PathBuf>, pub service_password_file: Option<PathBuf>, // Skip serializing, so that default config doesn't contain this option, @@ -1016,7 +1016,7 @@ pub struct InstanceConfig { pub http_listen: Option<HttpAddress>, - #[introspection(config_default = self.data_dir.as_ref().map(|dir| dir.join("admin.sock")))] + #[introspection(config_default = self.instance_dir.as_ref().map(|dir| dir.join("admin.sock")))] pub admin_socket: Option<PathBuf>, // TODO: @@ -1069,8 +1069,8 @@ pub struct InstanceConfig { // TODO: remove all of the .clone() calls from these methods impl InstanceConfig { #[inline] - pub fn data_dir(&self) -> PathBuf { - self.data_dir + pub fn instance_dir(&self) -> PathBuf { + self.instance_dir .clone() .expect("is set in PicodataConfig::set_defaults_explicitly") } @@ -2312,7 +2312,7 @@ instance: "PICODATA_CONFIG_PARAMETERS", " instance.tier = ABC;cluster.name=DEF ; instance.audit=audit.txt ;; - ; instance.data_dir=. ;" + ; instance.instance_dir=. ;" ); let config = setup_for_tests(Some(yaml), &["run", "-c", " instance.log .level =debug ", @@ -2323,7 +2323,7 @@ instance: assert_eq!(config.instance.log.level.unwrap(), args::LogLevel::Debug); assert_eq!(config.instance.memtx.memory.unwrap().to_string(), String::from("999B")); assert_eq!(config.instance.audit.unwrap(), "audit.txt"); - assert_eq!(config.instance.data_dir.unwrap(), PathBuf::from(".")); + assert_eq!(config.instance.instance_dir.unwrap(), PathBuf::from(".")); // // Errors diff --git a/src/lib.rs b/src/lib.rs index c6c63799e9..ce7c740c90 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -587,12 +587,12 @@ pub fn start(config: &PicodataConfig, entrypoint: Entrypoint) -> Result<Option<E } StartBoot => { // Cleanup the data directory with WALs from the previous StartDiscover run - tarantool::rm_tarantool_files(config.instance.data_dir())?; + tarantool::rm_tarantool_files(config.instance.instance_dir())?; start_boot(config)?; } StartJoin { leader_address } => { // Cleanup the data directory with WALs from the previous StartDiscover run - tarantool::rm_tarantool_files(config.instance.data_dir())?; + tarantool::rm_tarantool_files(config.instance.instance_dir())?; start_join(config, leader_address)?; } } @@ -612,10 +612,10 @@ fn init_common( config: &PicodataConfig, cfg: &tarantool::Cfg, ) -> Result<(Clusterwide, RaftSpaceAccess), Error> { - std::fs::create_dir_all(config.instance.data_dir()).map_err(|err| { + std::fs::create_dir_all(config.instance.instance_dir()).map_err(|err| { Error::other(format!( "failed creating data directory {}: {}", - config.instance.data_dir().display(), + config.instance.instance_dir().display(), err )) })?; @@ -1114,7 +1114,7 @@ fn postjoin( let pg_config = &config.instance.pg; if pg_config.enabled() { - pgproto::start(pg_config, config.instance.data_dir())?; + pgproto::start(pg_config, config.instance.instance_dir())?; } Ok(()) diff --git a/src/luamod.rs b/src/luamod.rs index 4ee2e40d05..fbd23a301f 100644 --- a/src/luamod.rs +++ b/src/luamod.rs @@ -127,7 +127,7 @@ pub(crate) fn setup() { - instance: log_level: info listen: 127.0.0.1:3301 - data_dir: . + instance_dir: . peers: - 127.0.0.1:3301 ... diff --git a/src/pgproto.rs b/src/pgproto.rs index 25cd16aa79..e88829e371 100644 --- a/src/pgproto.rs +++ b/src/pgproto.rs @@ -114,7 +114,7 @@ pub struct Context { } impl Context { - pub fn new(config: &Config, data_dir: &Path) -> Result<Self, Error> { + pub fn new(config: &Config, instance_dir: &Path) -> Result<Self, Error> { assert!(config.enabled(), "must be checked before the call"); let listen = config.listen(); @@ -125,7 +125,7 @@ impl Context { let tls_acceptor = config .ssl() - .then(|| TlsAcceptor::new_from_dir(data_dir)) + .then(|| TlsAcceptor::new_from_dir(instance_dir)) .transpose() .map_err(Error::invalid_configuration)? .inspect(|tls| tlog!(Info, "configured {} for pgproto", tls.kind())); @@ -142,8 +142,8 @@ impl Context { } /// Start a postgres server fiber. -pub fn start(config: &Config, data_dir: PathBuf) -> Result<(), Error> { - let context = Context::new(config, &data_dir)?; +pub fn start(config: &Config, instance_dir: PathBuf) -> Result<(), Error> { + let context = Context::new(config, &instance_dir)?; tarantool::fiber::Builder::new() .name("pgproto") diff --git a/src/pgproto/tls.rs b/src/pgproto/tls.rs index 4680b9b911..1f9b5735fb 100644 --- a/src/pgproto/tls.rs +++ b/src/pgproto/tls.rs @@ -42,16 +42,16 @@ pub struct TlsConfig { } impl TlsConfig { - pub fn from_data_dir(data_dir: &Path) -> Result<Self, TlsConfigError> { + pub fn from_instance_dir(instance_dir: &Path) -> Result<Self, TlsConfigError> { // We should use the absolute paths here, because SslContextBuilder::set_certificate_chain_file // fails for relative paths with an unclear error, represented as an empty error stack. - let cert = data_dir.join("server.crt"); + let cert = instance_dir.join("server.crt"); let cert = fs::canonicalize(&cert).map_err(|e| TlsConfigError::CertFile(cert, e))?; - let key = data_dir.join("server.key"); + let key = instance_dir.join("server.key"); let key = fs::canonicalize(&key).map_err(|e| TlsConfigError::KeyFile(key, e))?; - let ca_cert = data_dir.join("ca.crt"); + let ca_cert = instance_dir.join("ca.crt"); let ca_cert = match fs::canonicalize(&ca_cert) { Ok(path) => Some(path), Err(e) if e.kind() == io::ErrorKind::NotFound => None, @@ -89,8 +89,8 @@ impl TlsAcceptor { Ok(Self(builder.build().into())) } - pub fn new_from_dir(data_dir: &Path) -> Result<Self, TlsConfigError> { - let tls_config = TlsConfig::from_data_dir(data_dir)?; + pub fn new_from_dir(instance_dir: &Path) -> Result<Self, TlsConfigError> { + let tls_config = TlsConfig::from_instance_dir(instance_dir)?; Self::new(&tls_config) } diff --git a/src/tarantool.rs b/src/tarantool.rs index 14562dc79f..befd2d13e1 100644 --- a/src/tarantool.rs +++ b/src/tarantool.rs @@ -347,9 +347,9 @@ impl Cfg { const FIELDS: &[(&str, &str)] = &[ // other instance.log.* parameters are set explicitly above ("log_format", config_parameter_path!(instance.log.format)), - ("wal_dir", config_parameter_path!(instance.data_dir)), - ("memtx_dir", config_parameter_path!(instance.data_dir)), - ("vinyl_dir", config_parameter_path!(instance.data_dir)), + ("wal_dir", config_parameter_path!(instance.instance_dir)), + ("memtx_dir", config_parameter_path!(instance.instance_dir)), + ("vinyl_dir", config_parameter_path!(instance.instance_dir)), ("checkpoint_count", config_parameter_path!(instance.memtx.checkpoint_count)), ("checkpoint_interval", config_parameter_path!(instance.memtx.checkpoint_interval)), ("net_msg_max", config_parameter_path!(instance.iproto.max_concurrent_messages)), @@ -546,9 +546,9 @@ extern "C" fn xlog_remove_cb( } pub fn rm_tarantool_files( - data_dir: impl AsRef<std::path::Path>, + instance_dir: impl AsRef<std::path::Path>, ) -> Result<(), tarantool::error::Error> { - let entries = std::fs::read_dir(data_dir)?; + let entries = std::fs::read_dir(instance_dir)?; for entry in entries { let path = entry?.path(); if !path.is_file() { diff --git a/test/conftest.py b/test/conftest.py index 8202308b9b..c14e414055 100644 --- a/test/conftest.py +++ b/test/conftest.py @@ -579,7 +579,7 @@ class Instance: plugin_dir: str | None = None cluster_name: str | None = None - _data_dir: str | None = None + _instance_dir: str | None = None peers: list[str] = field(default_factory=list) host: str | None = None port: int | None = None @@ -601,9 +601,9 @@ class Instance: _on_output_callbacks: list[Callable[[bytes], None]] = field(default_factory=list) @property - def data_dir(self): - assert self._data_dir - return self._data_dir + def instance_dir(self): + assert self._instance_dir + return self._instance_dir @property def listen(self): @@ -656,7 +656,7 @@ class Instance: *([f"--cluster-name={self.cluster_name}"] if self.cluster_name else []), *([f"--instance-name={self.name}"] if self.name else []), *([f"--replicaset-name={self.replicaset_name}"] if self.replicaset_name else []), - *([f"--data-dir={self._data_dir}"] if self._data_dir else []), + *([f"--instance-dir={self._instance_dir}"] if self._instance_dir else []), *([f"--plugin-dir={self.plugin_dir}"] if self.plugin_dir else []), *([f"--listen={self.listen}"] if self.listen else []), *([f"--pg-listen={self.pg_listen}"] if self.pg_listen else []), @@ -1049,7 +1049,7 @@ class Instance: self.start() def remove_data(self): - shutil.rmtree(self.data_dir) + shutil.rmtree(self.instance_dir) def raft_propose_nop(self): return self.call("pico.raft_propose_nop") @@ -1574,18 +1574,18 @@ class Instance: def latest_snapshot(self, into: Path): def modification_time(f): - return os.path.getmtime(os.path.join(self.data_dir, f)) + return os.path.getmtime(os.path.join(self.instance_dir, f)) all_snapshots = list() - for filename in os.listdir(self.data_dir): - full_path = os.path.join(self.data_dir, filename) + for filename in os.listdir(self.instance_dir): + full_path = os.path.join(self.instance_dir, filename) if os.path.isfile(full_path) and filename.endswith(".snap"): all_snapshots.append(filename) if not all_snapshots: return None latest_snapshot = max(all_snapshots, key=modification_time) - return Path(f"{self.data_dir}/{latest_snapshot}") + return Path(f"{self.instance_dir}/{latest_snapshot}") def fill_with_data(self): ddl = self.sql( @@ -1679,7 +1679,7 @@ CLUSTER_COLORS = ( class Cluster: binary_path: str id: str - data_dir: str + instance_dir: str base_host: str port_distributor: PortDistributor instances: list[Instance] = field(default_factory=list) @@ -1733,7 +1733,7 @@ class Cluster: assert config or yaml assert self.config_path is None - self.config_path = self.data_dir + "/picodata.yaml" + self.config_path = self.instance_dir + "/picodata.yaml" if config: yaml = yaml_lib.dump(config, default_flow_style=False) @@ -1743,7 +1743,7 @@ class Cluster: yaml_file.write(yaml) def set_service_password(self, service_password: str): - self.service_password_file = self.data_dir + "/password.txt" + self.service_password_file = self.instance_dir + "/password.txt" with open(self.service_password_file, "w") as f: print(service_password, file=f) os.chmod(self.service_password_file, 0o600) @@ -1799,11 +1799,11 @@ class Cluster: instance = Instance( binary_path=self.binary_path, - cwd=self.data_dir, + cwd=self.instance_dir, cluster_name=self.id, name=generated_instance_name, replicaset_name=replicaset_name, - _data_dir=f"{self.data_dir}/i{i}", + _instance_dir=f"{self.instance_dir}/i{i}", plugin_dir=self.plugin_dir, host=self.base_host, port=port, @@ -1864,7 +1864,7 @@ class Cluster: raise Exception(errors) def remove_data(self): - shutil.rmtree(self.data_dir) + shutil.rmtree(self.instance_dir) def expel( self, @@ -2355,7 +2355,7 @@ def cluster( cluster = Cluster( binary_path=binary_path_fixt, id=next(cluster_names), - data_dir=tmpdir, + instance_dir=tmpdir, plugin_dir=plugin_dir, base_host=BASE_HOST, port_distributor=port_distributor, @@ -2568,7 +2568,7 @@ class Postgres: i1.pg_ssl = self.ssl ssl_dir = Path(os.path.realpath(__file__)).parent / "ssl_certs" - instance_dir = Path(self.cluster.data_dir) / "i1" + instance_dir = Path(self.cluster.instance_dir) / "i1" instance_dir.mkdir() shutil.copyfile(ssl_dir / "server.crt", instance_dir / "server.crt") shutil.copyfile(ssl_dir / "server.key", instance_dir / "server.key") diff --git a/test/generate_snapshot.py b/test/generate_snapshot.py index 7ac5d12d08..b3284336f5 100644 --- a/test/generate_snapshot.py +++ b/test/generate_snapshot.py @@ -33,7 +33,7 @@ if __name__ == "__main__": cluster = Cluster( binary_path=conftest.binary_path(), id="cluster_to_gen_snap", - data_dir=str(tmpdir), + instance_dir=str(tmpdir), base_host="localhost", port_distributor=port_distributor, ) diff --git a/test/int/test_audit.py b/test/int/test_audit.py index 4bdfa963f0..fafb635046 100644 --- a/test/int/test_audit.py +++ b/test/int/test_audit.py @@ -19,7 +19,9 @@ from conftest import ( @pytest.fixture def instance_with_audit_file(unstarted_instance: Instance): - unstarted_instance.audit = os.path.join(unstarted_instance.data_dir, "audit.log") + unstarted_instance.audit = os.path.join( + unstarted_instance.instance_dir, "audit.log" + ) unstarted_instance.start() unstarted_instance.wait_online() yield unstarted_instance @@ -114,7 +116,7 @@ def test_integrity_violation(instance_with_audit_file: Instance): instance.terminate() # Then data files were modified and instance restarted - snap_name = f"{instance.data_dir}/00000000000000000000.snap" + snap_name = f"{instance.instance_dir}/00000000000000000000.snap" with open(snap_name, "w") as snap: snap.write("abc") @@ -372,7 +374,7 @@ def assert_instance_expelled(expelled_instance: Instance, instance: Instance): def test_join_expel_instance(cluster: Cluster): cluster.deploy(instance_count=0) - audit = os.path.join(cluster.data_dir, "i1", "audit.log") + audit = os.path.join(cluster.instance_dir, "i1", "audit.log") i1 = cluster.add_instance(audit=audit) audit_i1 = AuditFile(i1.audit_flag_value) @@ -380,7 +382,7 @@ def test_join_expel_instance(cluster: Cluster): pass events = audit_i1.events() - audit = os.path.join(cluster.data_dir, "i2", "audit.log") + audit = os.path.join(cluster.instance_dir, "i2", "audit.log") i2 = cluster.add_instance(name="i2", audit=audit) join_instance = take_until_title(events, "join_instance") @@ -419,10 +421,10 @@ def test_join_expel_instance(cluster: Cluster): def test_join_connect_instance(cluster: Cluster): cluster.deploy(instance_count=0) - audit = os.path.join(cluster.data_dir, "i1", "audit.log") + audit = os.path.join(cluster.instance_dir, "i1", "audit.log") i1 = cluster.add_instance(audit=audit) - audit = os.path.join(cluster.data_dir, "i2", "audit.log") + audit = os.path.join(cluster.instance_dir, "i2", "audit.log") i2 = cluster.add_instance(name="i2", audit=audit) i2.terminate() diff --git a/test/int/test_basics.py b/test/int/test_basics.py index 4404c36708..cfac63abf0 100644 --- a/test/int/test_basics.py +++ b/test/int/test_basics.py @@ -117,9 +117,9 @@ def test_process_management(instance: Instance): def test_graceful_stop(instance: Instance): instance.terminate() *_, last_xlog = sorted( - [f for f in os.listdir(instance.data_dir) if f.endswith(".xlog")] + [f for f in os.listdir(instance.instance_dir) if f.endswith(".xlog")] ) - with open(os.path.join(instance.data_dir, last_xlog), "rb") as f: + with open(os.path.join(instance.instance_dir, last_xlog), "rb") as f: assert f.read()[-4:] == b"\xd5\x10\xad\xed" @@ -772,7 +772,7 @@ def test_file_shredding(cluster: Cluster, tmp_path): def test_pico_service_password_security_warning(cluster: Cluster): - password_file = f"{cluster.data_dir}/service-password.txt" + password_file = f"{cluster.instance_dir}/service-password.txt" with open(password_file, "w") as f: print("secret", file=f) diff --git a/test/int/test_cli_connect.py b/test/int/test_cli_connect.py index 37cf44474e..069bbd6ec6 100644 --- a/test/int/test_cli_connect.py +++ b/test/int/test_cli_connect.py @@ -219,14 +219,14 @@ class LDAPServerState: process: subprocess.Popen -def configure_ldap_server(username, password, data_dir) -> LDAPServerState: +def configure_ldap_server(username, password, instance_dir) -> LDAPServerState: # Check `glauth` executable is available subprocess.Popen(["glauth", "--version"]) LDAP_SERVER_HOST = "127.0.0.1" LDAP_SERVER_PORT = 1389 - ldap_cfg_path = f"{data_dir}/ldap.cfg" + ldap_cfg_path = f"{instance_dir}/ldap.cfg" with open(ldap_cfg_path, "x") as f: password_sha256 = hashlib.sha256(password.encode("utf8")).hexdigest() f.write( @@ -282,7 +282,7 @@ def test_connect_auth_type_ldap(cluster: Cluster): username = "ldapuser" password = "ldappass" - ldap_server = configure_ldap_server(username, password, cluster.data_dir) + ldap_server = configure_ldap_server(username, password, cluster.instance_dir) try: # # Configure the instance @@ -452,7 +452,7 @@ def test_connect_unix_ok_via_default_sock(cluster: Cluster): # </path/to/admin.sock> # # We were unable to debug it quickly and used cwd as a workaround - cwd=i1.data_dir, + cwd=i1.instance_dir, command=i1.binary_path, args=["admin", "./admin.sock"], encoding="utf-8", @@ -524,7 +524,7 @@ def test_connect_with_wrong_password_path(binary_path_fixt: str): def test_connect_with_password_from_file(i1: Instance, binary_path_fixt: str): - password_path = i1.data_dir + "/password" + password_path = i1.instance_dir + "/password" with open(password_path, "w") as f: f.write("Testpa55") @@ -577,7 +577,7 @@ def test_connect_connection_info_and_help(i1: Instance): def test_admin_connection_info_and_help(cluster: Cluster): i1 = cluster.add_instance(wait_online=False) - socket_path = f"{i1.data_dir}/explicit.sock" + socket_path = f"{i1.instance_dir}/explicit.sock" i1.env["PICODATA_ADMIN_SOCK"] = socket_path i1.start() i1.wait_online() @@ -590,7 +590,7 @@ def test_admin_connection_info_and_help(cluster: Cluster): # </path/to/admin.sock> # # We were unable to debug it quickly and used cwd as a workaround - cwd=i1.data_dir, + cwd=i1.instance_dir, command=i1.binary_path, args=["admin", socket_path], encoding="utf-8", @@ -613,7 +613,7 @@ def test_connect_with_incorrect_url(cluster: Cluster): def connect_to(address): cli = pexpect.spawn( - cwd=i1.data_dir, + cwd=i1.instance_dir, command=i1.binary_path, args=["connect", address], encoding="utf-8", @@ -653,7 +653,7 @@ def test_connect_timeout(cluster: Cluster): def connect_to(address, timeout=None): cli = pexpect.spawn( - cwd=i1.data_dir, + cwd=i1.instance_dir, command=i1.binary_path, args=[ "connect", diff --git a/test/int/test_cli_ux.py b/test/int/test_cli_ux.py index 5afb8dd734..beed28ead8 100644 --- a/test/int/test_cli_ux.py +++ b/test/int/test_cli_ux.py @@ -104,7 +104,7 @@ def test_admin_ux(cluster: Cluster): i1.wait_online() cli = pexpect.spawn( - cwd=i1.data_dir, + cwd=i1.instance_dir, command=i1.binary_path, args=["admin", "./admin.sock"], encoding="utf-8", @@ -169,7 +169,7 @@ def test_plugin_ux(cluster: Cluster): i1.call("pico.install_plugin", _PLUGIN, _PLUGIN_VERSION_1) plugin_ref.install(True).enable(False) - new_config = f"{i1.data_dir}/new_conf.yaml" + new_config = f"{i1.instance_dir}/new_conf.yaml" # test list of services with multiple elements @@ -273,7 +273,7 @@ def test_lua_completion(cluster: Cluster): i1.wait_online() cli = pexpect.spawn( - cwd=i1.data_dir, + cwd=i1.instance_dir, command=i1.binary_path, args=["admin", "./admin.sock"], encoding="utf-8", @@ -323,7 +323,7 @@ def test_sql_explain_ok(cluster: Cluster): i1.wait_online() cli = pexpect.spawn( - cwd=i1.data_dir, + cwd=i1.instance_dir, command=i1.binary_path, args=["admin", "./admin.sock"], encoding="utf-8", @@ -463,7 +463,7 @@ def test_connect_pretty_message_on_server_crash(cluster: Cluster): # test crash error when run with `picodata admin` cli = pexpect.spawn( - cwd=i2.data_dir, + cwd=i2.instance_dir, command=i2.binary_path, args=["admin", "./admin.sock"], encoding="utf-8", @@ -554,7 +554,7 @@ def test_input_with_delimiter(cluster: Cluster): def test_cat_file_to_picodata_admin_stdin(cluster: Cluster): instance = cluster.add_instance() data = subprocess.check_output( - [cluster.binary_path, "admin", f"{instance.data_dir}/admin.sock"], + [cluster.binary_path, "admin", f"{instance.instance_dir}/admin.sock"], input=b"""\ CREATE TABLE ids (id INTEGER NOT NULL, PRIMARY KEY(id)) USING MEMTX @@ -570,7 +570,7 @@ SELECT * FROM ids assert ( data == f"""\ -Connected to admin console by socket path "{instance.data_dir}/admin.sock" +Connected to admin console by socket path "{instance.instance_dir}/admin.sock" type '\\help' for interactive help 1 1 @@ -589,7 +589,7 @@ def test_cat_file_to_picodata_connect_stdin(cluster: Cluster): i1 = cluster.add_instance() data = subprocess.check_output( - [cluster.binary_path, "admin", f"{i1.data_dir}/admin.sock"], + [cluster.binary_path, "admin", f"{i1.instance_dir}/admin.sock"], input=b"""\ CREATE USER "alice" WITH PASSWORD 'T0psecret'; GRANT CREATE TABLE TO "alice" @@ -599,7 +599,7 @@ GRANT CREATE TABLE TO "alice" assert ( data == f"""\ -Connected to admin console by socket path "{i1.data_dir}/admin.sock" +Connected to admin console by socket path "{i1.instance_dir}/admin.sock" type '\\help' for interactive help 1 1 @@ -667,7 +667,7 @@ Bye def test_do_not_ban_admin_via_unix_socket(cluster: Cluster): - password_file = f"{cluster.data_dir}/service-password.txt" + password_file = f"{cluster.instance_dir}/service-password.txt" with open(password_file, "w") as f: print("secret", file=f) @@ -702,7 +702,7 @@ def test_do_not_ban_admin_via_unix_socket(cluster: Cluster): admin_banned_lc.wait_matched() cli = pexpect.spawn( - cwd=i1.data_dir, + cwd=i1.instance_dir, command=i1.binary_path, args=["admin", "./admin.sock"], encoding="utf-8", @@ -716,7 +716,7 @@ def test_do_not_ban_admin_via_unix_socket(cluster: Cluster): def test_picodata_tarantool(cluster: Cluster): - test_lua = os.path.join(cluster.data_dir, "test.lua") + test_lua = os.path.join(cluster.instance_dir, "test.lua") with open(test_lua, "w") as f: print( """ @@ -731,11 +731,11 @@ def test_picodata_tarantool(cluster: Cluster): stdout = subprocess.check_output( [cluster.binary_path, "tarantool", "--", test_lua], - cwd=cluster.data_dir, + cwd=cluster.instance_dir, ) assert stdout == b"stdout check\n" - output_txt = os.path.join(cluster.data_dir, "output.txt") + output_txt = os.path.join(cluster.instance_dir, "output.txt") with open(output_txt, "r") as f: result = f.read() @@ -813,7 +813,7 @@ def test_picodata_version(cluster: Cluster): def test_admin_cli_exit_code(cluster: Cluster): # Test the exit code for SQL statements with syntax errors - setup_sql = f"{cluster.data_dir}/setup.sql" + setup_sql = f"{cluster.instance_dir}/setup.sql" with open(setup_sql, "w") as f: f.write( """ @@ -829,7 +829,7 @@ def test_admin_cli_exit_code(cluster: Cluster): i1.wait_online() process = subprocess.run( - [i1.binary_path, "admin", f"{i1.data_dir}/admin.sock"], + [i1.binary_path, "admin", f"{i1.instance_dir}/admin.sock"], stdin=open(setup_sql, "r"), stdout=subprocess.PIPE, stderr=subprocess.PIPE, @@ -844,7 +844,7 @@ def test_admin_cli_exit_code(cluster: Cluster): ), f"Process failed with exit code {process.returncode}\n" # Test the exit code when a duplicate values error occurs - insert_sql = f"{cluster.data_dir}/insert.sql" + insert_sql = f"{cluster.instance_dir}/insert.sql" with open(insert_sql, "w") as f: f.write( """ @@ -859,7 +859,7 @@ def test_admin_cli_exit_code(cluster: Cluster): i2.wait_online() process = subprocess.run( - [i2.binary_path, "admin", f"{i2.data_dir}/admin.sock"], + [i2.binary_path, "admin", f"{i2.instance_dir}/admin.sock"], stdin=open(insert_sql, "r"), stdout=subprocess.PIPE, stderr=subprocess.PIPE, @@ -874,7 +874,7 @@ def test_admin_cli_exit_code(cluster: Cluster): ), f"Process failed with exit code {process.returncode}\n" # Test the exit code when attempting to drop non-existent plugins - plugin_sql = f"{cluster.data_dir}/plugin.sql" + plugin_sql = f"{cluster.instance_dir}/plugin.sql" with open(plugin_sql, "w") as f: f.write("DROP PLUGIN weather_cache 0.1.0;") @@ -883,7 +883,7 @@ def test_admin_cli_exit_code(cluster: Cluster): i3.wait_online() process = subprocess.run( - [i3.binary_path, "admin", f"{i3.data_dir}/admin.sock"], + [i3.binary_path, "admin", f"{i3.instance_dir}/admin.sock"], stdin=open(plugin_sql, "r"), stdout=subprocess.PIPE, stderr=subprocess.PIPE, @@ -899,7 +899,7 @@ def test_admin_cli_exit_code(cluster: Cluster): def test_connect_cli_exit_code(cluster: Cluster): - connect_sql = f"{cluster.data_dir}/connect.sql" + connect_sql = f"{cluster.instance_dir}/connect.sql" with open(connect_sql, "w") as f: f.write( """ @@ -916,7 +916,7 @@ def test_connect_cli_exit_code(cluster: Cluster): i1.sql('GRANT CREATE TABLE TO "andy"', sudo=True) process = subprocess.run( - [i1.binary_path, "admin", f"{i1.data_dir}/admin.sock"], + [i1.binary_path, "admin", f"{i1.instance_dir}/admin.sock"], stdin=open(connect_sql, "r"), stdout=subprocess.PIPE, stderr=subprocess.PIPE, @@ -932,7 +932,7 @@ def test_connect_cli_exit_code(cluster: Cluster): def test_admin_cli_with_ignore_errors(cluster: Cluster): - setup_sql = f"{cluster.data_dir}/setup.sql" + setup_sql = f"{cluster.instance_dir}/setup.sql" with open(setup_sql, "w") as f: f.write( """ @@ -947,7 +947,7 @@ def test_admin_cli_with_ignore_errors(cluster: Cluster): i1.wait_online() process = subprocess.run( - [i1.binary_path, "admin", f"{i1.data_dir}/admin.sock", "--ignore-errors"], + [i1.binary_path, "admin", f"{i1.instance_dir}/admin.sock", "--ignore-errors"], stdin=open(setup_sql, "r"), stdout=subprocess.PIPE, stderr=subprocess.PIPE, diff --git a/test/int/test_compatibility.py b/test/int/test_compatibility.py index 132bda5e38..3fe9e610be 100644 --- a/test/int/test_compatibility.py +++ b/test/int/test_compatibility.py @@ -15,7 +15,7 @@ from conftest import ( @pytest.mark.xfail def test_upgrade_major(cluster: Cluster): inst = cluster.add_instance(wait_online=False) - os.makedirs(inst.data_dir, exist_ok=True) + os.makedirs(inst.instance_dir, exist_ok=True) version, path = Compatibility().previous_tag() snapshot = get_tt_snapshot_by_path(path) @@ -23,7 +23,7 @@ def test_upgrade_major(cluster: Cluster): snapshot ), f"Snapshot of the previous MAJOR version was not found. Generate one using `make generate` on a previous MAJOR version. {version} is current version." # noqa: E501 - shutil.copy(snapshot, f"{inst.data_dir}/") + shutil.copy(snapshot, f"{inst.instance_dir}/") inst.start() inst.wait_online() @@ -31,7 +31,7 @@ def test_upgrade_major(cluster: Cluster): @pytest.mark.xfail def test_upgrade_minor(cluster: Cluster): inst = cluster.add_instance(wait_online=False) - os.makedirs(inst.data_dir, exist_ok=True) + os.makedirs(inst.instance_dir, exist_ok=True) tag = Compatibility().previous_minor_tag() assert ( @@ -44,7 +44,7 @@ def test_upgrade_minor(cluster: Cluster): snapshot ), f"Snapshot of the previous MINOR version was not found. Generate one using `make generate` on a previous MINOR version. {version} is current version." # noqa: E501 - shutil.copy(snapshot, f"{inst.data_dir}/") + shutil.copy(snapshot, f"{inst.instance_dir}/") inst.start() inst.wait_online() diff --git a/test/int/test_config_file.py b/test/int/test_config_file.py index e8471de112..d5a3692119 100644 --- a/test/int/test_config_file.py +++ b/test/int/test_config_file.py @@ -34,14 +34,14 @@ def test_pico_config(cluster: Cluster, port_distributor: PortDistributor): host = cluster.base_host port = port_distributor.get() listen = f"{host}:{port}" - data_dir = f"{cluster.data_dir}/my-instance" + instance_dir = f"{cluster.instance_dir}/my-instance" cluster.set_config_file( yaml=f""" cluster: tier: deluxe: instance: - data_dir: {data_dir} + instance_dir: {instance_dir} listen: {listen} peer: - {listen} @@ -55,10 +55,10 @@ instance: ) instance = Instance( binary_path=cluster.binary_path, - cwd=cluster.data_dir, + cwd=cluster.instance_dir, color=color.cyan, config_path=cluster.config_path, - audit=f"{data_dir}/audit.log", + audit=f"{instance_dir}/audit.log", ) cluster.instances.append(instance) @@ -82,7 +82,7 @@ instance: default_replication_factor=dict(value=1, source="default"), ), instance=dict( - admin_socket=dict(value=f"{data_dir}/admin.sock", source="default"), + admin_socket=dict(value=f"{instance_dir}/admin.sock", source="default"), advertise_address=dict(value=f"{host}:{port}", source="default"), failure_domain=dict(value=dict(), source="default"), shredding=dict(value=False, source="default"), @@ -91,12 +91,12 @@ instance: replicaset_name=dict(value="my-replicaset", source="config_file"), tier=dict(value="deluxe", source="config_file"), audit=dict( - value=f"{data_dir}/audit.log", source="commandline_or_environment" + value=f"{instance_dir}/audit.log", source="commandline_or_environment" ), config_file=dict( value=f"{instance.config_path}", source="commandline_or_environment" ), - data_dir=dict(value=data_dir, source="config_file"), + instance_dir=dict(value=instance_dir, source="config_file"), listen=dict(value=f"{host}:{port}", source="config_file"), log=dict( level=dict(value="verbose", source="commandline_or_environment"), @@ -136,7 +136,7 @@ def test_default_path_to_config_file(cluster: Cluster): instance = cluster.add_instance(name=False, wait_online=False) # By default ./picodata.yaml will be used in the instance's current working directory - work_dir = cluster.data_dir + "/work-dir" + work_dir = cluster.instance_dir + "/work-dir" os.mkdir(work_dir) with open(work_dir + "/picodata.yaml", "w") as f: f.write( @@ -157,7 +157,7 @@ instance: instance.terminate() # But if a config is specified explicitly, it will be used instead - config_path = cluster.data_dir + "/explicit-picodata.yaml" + config_path = cluster.instance_dir + "/explicit-picodata.yaml" with open(config_path, "w") as f: f.write( """ @@ -202,7 +202,7 @@ def test_config_file_enoent(cluster: Cluster): i1 = cluster.add_instance(wait_online=False) i1.env.update({"PICODATA_CONFIG_FILE": "./unexisting_dir/trash.yaml"}) err = f"""\ -can't read from '{cluster.data_dir}/./unexisting_dir/trash.yaml': No such file or directory (os error 2) +can't read from '{cluster.instance_dir}/./unexisting_dir/trash.yaml': No such file or directory (os error 2) """ # noqa: E501 crawler = log_crawler(i1, err) @@ -411,9 +411,9 @@ def test_picodata_default_config(cluster: Cluster): # Explicit filename subprocess.call( [cluster.binary_path, "config", "default", "-o", "filename.yaml"], - cwd=cluster.data_dir, + cwd=cluster.instance_dir, ) - with open(f"{cluster.data_dir}/filename.yaml", "r") as f: + with open(f"{cluster.instance_dir}/filename.yaml", "r") as f: default_config_2 = f.read() assert default_config.strip() == default_config_2.strip() @@ -475,7 +475,7 @@ def test_output_config_parameters(cluster: Cluster): output_params = """'cluster.name': 'cluster.tier': 'cluster.default_replication_factor': - 'instance.data_dir': + 'instance.instance_dir': 'instance.config_file': 'instance.cluster_name': 'instance.name': "i1" @@ -512,7 +512,7 @@ def test_output_config_parameters(cluster: Cluster): def test_logger_configuration(cluster: Cluster): - log_file = f"{cluster.data_dir}/i1.log" + log_file = f"{cluster.instance_dir}/i1.log" cluster.set_config_file( yaml=f""" cluster: @@ -533,7 +533,7 @@ instance: i1.terminate() os.remove(log_file) - other_log_file = f"{cluster.data_dir}/other-i1.log" + other_log_file = f"{cluster.instance_dir}/other-i1.log" assert not os.path.exists(other_log_file) i1.env["PICODATA_LOG"] = other_log_file diff --git a/test/int/test_expelling.py b/test/int/test_expelling.py index e20126f9e8..e5de7e145c 100644 --- a/test/int/test_expelling.py +++ b/test/int/test_expelling.py @@ -119,7 +119,7 @@ def test_expel_timeout(cluster: Cluster): # If the peer is not resolving, by default we hang on # for 5 seconds. We can change it by specifying `timeout`. cli = pexpect.spawn( - cwd=i1.data_dir, + cwd=i1.instance_dir, command=i1.binary_path, args=[ "expel", diff --git a/test/int/test_joining.py b/test/int/test_joining.py index 35dd6dd709..a049c8ff0b 100644 --- a/test/int/test_joining.py +++ b/test/int/test_joining.py @@ -395,7 +395,7 @@ def test_fail_to_join(cluster: Cluster): def test_pico_service_invalid_existing_password(cluster: Cluster): - password_file = f"{cluster.data_dir}/service-password.txt" + password_file = f"{cluster.instance_dir}/service-password.txt" with open(password_file, "w") as f: print("secret", file=f) @@ -429,7 +429,7 @@ def test_pico_service_invalid_existing_password(cluster: Cluster): def test_pico_service_invalid_requirements_password(cluster: Cluster): - password_file = f"{cluster.data_dir}/service-password.txt" + password_file = f"{cluster.instance_dir}/service-password.txt" i1 = cluster.add_instance(wait_online=False) with open(password_file, "wb") as f: diff --git a/test/int/test_plugin.py b/test/int/test_plugin.py index 06f9473dad..5f284fbd76 100644 --- a/test/int/test_plugin.py +++ b/test/int/test_plugin.py @@ -911,7 +911,7 @@ def test_migration_apply_err(cluster: Cluster): # # Prepare plugin # - cluster.plugin_dir = cluster.data_dir + cluster.plugin_dir = cluster.instance_dir plugin_dir = Path(cluster.plugin_dir) / plugin_name / "0.1.0" os.makedirs(plugin_dir) with open(plugin_dir / "manifest.yaml", "w") as f: @@ -973,7 +973,7 @@ def test_migration_next_version_apply_err(cluster: Cluster): # # Prepare plugin # - cluster.plugin_dir = cluster.data_dir + cluster.plugin_dir = cluster.instance_dir base_plugin_dir = Path(cluster.plugin_dir) plugin_dir_v1 = base_plugin_dir / plugin_name / "0.1.0" os.makedirs(plugin_dir_v1) @@ -2579,7 +2579,7 @@ def test_panic_in_plugin(cluster: Cluster): # # Prepare plugin # - cluster.plugin_dir = cluster.data_dir + cluster.plugin_dir = cluster.instance_dir plugin_dir = Path(cluster.plugin_dir) / plugin_name / "0.1.0" os.makedirs(plugin_dir) copy_plugin_library(cluster.binary_path, str(plugin_dir)) @@ -2599,7 +2599,7 @@ services: ) # Set the log configuration - log_file = Path(cluster.data_dir) / "test.log" + log_file = Path(cluster.instance_dir) / "test.log" cluster.set_config_file( yaml=f""" cluster: diff --git a/test/int/test_script.py b/test/int/test_script.py index a9fda7a437..4fe4fc4440 100644 --- a/test/int/test_script.py +++ b/test/int/test_script.py @@ -5,7 +5,7 @@ import pytest @pytest.mark.xfail def test_script_failure(cluster: Cluster): instance = cluster.add_instance(wait_online=False) - script = f"{cluster.data_dir}/fail.lua" + script = f"{cluster.instance_dir}/fail.lua" with open(script, "w") as f: f.write("assert(false)") instance.env["PICODATA_SCRIPT"] = script @@ -15,7 +15,7 @@ def test_script_failure(cluster: Cluster): def test_script(cluster: Cluster): instance = cluster.add_instance(wait_online=False) - script = f"{cluster.data_dir}/ok.lua" + script = f"{cluster.instance_dir}/ok.lua" with open(script, "w") as f: f.write("assert(type(box.cfg) == 'table')") instance.env["PICODATA_SCRIPT"] = script diff --git a/test/int/test_snapshot.py b/test/int/test_snapshot.py index f73baca03a..9933c08ed8 100644 --- a/test/int/test_snapshot.py +++ b/test/int/test_snapshot.py @@ -75,7 +75,7 @@ def test_large_snapshot(cluster: Cluster): i1, i2, i3, i4 = cluster.deploy(instance_count=4) # TODO: rewrite using clusterwide settings when we implement those - script_path = f"{cluster.data_dir}/postjoin.lua" + script_path = f"{cluster.instance_dir}/postjoin.lua" with open(script_path, "w") as f: f.write( """\ diff --git a/test/manual/test_scaling.py b/test/manual/test_scaling.py index 964089052e..34a1748d3d 100644 --- a/test/manual/test_scaling.py +++ b/test/manual/test_scaling.py @@ -82,7 +82,7 @@ def test_cas_conflicts(binary_path, tmpdir_factory, cluster_names, port_range): cluster = Cluster( binary_path=binary_path, id=next(cluster_names), - data_dir=tmpdir_factory.mktemp(f"cluster{size}"), + instance_dir=tmpdir_factory.mktemp(f"cluster{size}"), base_host=BASE_HOST, base_port=base_port, max_port=max_port, -- GitLab