diff --git a/.github/actions/build-linux-artifacts/action.yml b/.github/actions/build-linux-artifacts/action.yml index a6e5ea5f01a9..72ba60c37700 100644 --- a/.github/actions/build-linux-artifacts/action.yml +++ b/.github/actions/build-linux-artifacts/action.yml @@ -53,7 +53,7 @@ runs: uses: ./.github/actions/build-greptime-binary with: base-image: ubuntu - features: servers/dashboard + features: servers/dashboard,pg_kvbackend cargo-profile: ${{ inputs.cargo-profile }} artifacts-dir: greptime-linux-${{ inputs.arch }}-${{ inputs.version }} version: ${{ inputs.version }} @@ -71,7 +71,7 @@ runs: if: ${{ inputs.arch == 'amd64' && inputs.dev-mode == 'false' }} # Builds greptime for centos if the host machine is amd64. with: base-image: centos - features: servers/dashboard + features: servers/dashboard,pg_kvbackend cargo-profile: ${{ inputs.cargo-profile }} artifacts-dir: greptime-linux-${{ inputs.arch }}-centos-${{ inputs.version }} version: ${{ inputs.version }} diff --git a/.github/workflows/nightly-ci.yml b/.github/workflows/nightly-ci.yml index ff00ce5f0c62..7c64f9683ed4 100644 --- a/.github/workflows/nightly-ci.yml +++ b/.github/workflows/nightly-ci.yml @@ -96,7 +96,7 @@ jobs: with: distribution: Ubuntu-22.04 - name: Running tests - run: cargo nextest run -F dashboard + run: cargo nextest run -F dashboard -F pg_kvbackend env: CARGO_BUILD_RUSTFLAGS: "-C linker=lld-link" RUST_BACKTRACE: 1 diff --git a/config/config.md b/config/config.md index 78f33385d4f6..759d34364c2c 100644 --- a/config/config.md +++ b/config/config.md @@ -293,9 +293,9 @@ | `data_home` | String | `/tmp/metasrv/` | The working home directory. | | `bind_addr` | String | `127.0.0.1:3002` | The bind address of metasrv. | | `server_addr` | String | `127.0.0.1:3002` | The communication server address for frontend and datanode to connect to metasrv, "127.0.0.1:3002" by default for localhost. | -| `store_addrs` | Array | -- | Store server address default to etcd store. | +| `store_addrs` | Array | -- | Store server address default to etcd store.
For postgres store, the format is:
"password=password dbname=postgres user=postgres host=localhost port=5432"
For etcd store, the format is:
"127.0.0.1:2379" | | `store_key_prefix` | String | `""` | If it's not empty, the metasrv will store all data with this key prefix. | -| `backend` | String | `EtcdStore` | The datastore for meta server. | +| `backend` | String | `etcd_store` | The datastore for meta server.
Available values:
- `etcd_store` (default value)
- `memory_store`
- `postgres_store` | | `selector` | String | `round_robin` | Datanode selector type.
- `round_robin` (default value)
- `lease_based`
- `load_based`
For details, please see "https://docs.greptime.com/developer-guide/metasrv/selector". | | `use_memory_store` | Bool | `false` | Store data in memory. | | `enable_region_failover` | Bool | `false` | Whether to enable region failover.
This feature is only available on GreptimeDB running on cluster mode and
- Using Remote WAL
- Using shared storage (e.g., s3). | diff --git a/config/metasrv.example.toml b/config/metasrv.example.toml index 27716b5aa37b..aaf5569a6d69 100644 --- a/config/metasrv.example.toml +++ b/config/metasrv.example.toml @@ -8,13 +8,21 @@ bind_addr = "127.0.0.1:3002" server_addr = "127.0.0.1:3002" ## Store server address default to etcd store. +## For postgres store, the format is: +## "password=password dbname=postgres user=postgres host=localhost port=5432" +## For etcd store, the format is: +## "127.0.0.1:2379" store_addrs = ["127.0.0.1:2379"] ## If it's not empty, the metasrv will store all data with this key prefix. store_key_prefix = "" ## The datastore for meta server. -backend = "EtcdStore" +## Available values: +## - `etcd_store` (default value) +## - `memory_store` +## - `postgres_store` +backend = "etcd_store" ## Datanode selector type. ## - `round_robin` (default value) diff --git a/src/cmd/src/metasrv.rs b/src/cmd/src/metasrv.rs index b1167903671a..b97d0710a582 100644 --- a/src/cmd/src/metasrv.rs +++ b/src/cmd/src/metasrv.rs @@ -249,8 +249,6 @@ impl StartCommand { if let Some(backend) = &self.backend { opts.backend.clone_from(backend); - } else { - opts.backend = BackendImpl::default() } // Disable dashboard in metasrv. diff --git a/src/meta-srv/src/election/postgres.rs b/src/meta-srv/src/election/postgres.rs index 35e894404fa2..94de90bde925 100644 --- a/src/meta-srv/src/election/postgres.rs +++ b/src/meta-srv/src/election/postgres.rs @@ -37,10 +37,9 @@ use crate::metasrv::{ElectionRef, LeaderValue, MetasrvNodeInfo}; // TODO(CookiePie): The lock id should be configurable. const CAMPAIGN: &str = "SELECT pg_try_advisory_lock({})"; const STEP_DOWN: &str = "SELECT pg_advisory_unlock({})"; -const SET_IDLE_SESSION_TIMEOUT: &str = "SET idle_in_transaction_session_timeout = $1"; // Currently the session timeout is longer than the leader lease time, so the leader lease may expire while the session is still alive. // Either the leader reconnects and step down or the session expires and the lock is released. -const IDLE_SESSION_TIMEOUT: &str = "10s"; +const SET_IDLE_SESSION_TIMEOUT: &str = "SET idle_in_transaction_session_timeout = '10s';"; // Separator between value and expire time. const LEASE_SEP: &str = r#"||__metadata_lease_sep||"#; @@ -150,7 +149,7 @@ impl PgElection { ) -> Result { // Set idle session timeout to IDLE_SESSION_TIMEOUT to avoid dead advisory lock. client - .execute(SET_IDLE_SESSION_TIMEOUT, &[&IDLE_SESSION_TIMEOUT]) + .execute(SET_IDLE_SESSION_TIMEOUT, &[]) .await .context(PostgresExecutionSnafu)?; diff --git a/src/meta-srv/src/metasrv.rs b/src/meta-srv/src/metasrv.rs index c7dcd81e9f09..e688b25e04bd 100644 --- a/src/meta-srv/src/metasrv.rs +++ b/src/meta-srv/src/metasrv.rs @@ -73,6 +73,7 @@ pub const METASRV_HOME: &str = "/tmp/metasrv"; // The datastores that implements metadata kvbackend. #[derive(Clone, Debug, PartialEq, Serialize, Default, Deserialize, ValueEnum)] +#[serde(rename_all = "snake_case")] pub enum BackendImpl { // Etcd as metadata storage. #[default]