mirror of
https://github.com/postgresml/pgcat.git
synced 2026-03-23 09:26:30 +00:00
Compare commits
1 Commits
circleci_n
...
dependabot
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f20329331f |
2
.github/workflows/chart-lint-test.yaml
vendored
2
.github/workflows/chart-lint-test.yaml
vendored
@@ -22,7 +22,7 @@ jobs:
|
||||
# Python is required because `ct lint` runs Yamale (https://github.com/23andMe/Yamale) and
|
||||
# yamllint (https://github.com/adrienverge/yamllint) which require Python
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v5.1.0
|
||||
uses: actions/setup-python@v5.3.0
|
||||
with:
|
||||
python-version: 3.7
|
||||
|
||||
|
||||
@@ -5,4 +5,4 @@ maintainers:
|
||||
- name: Wildcard
|
||||
email: support@w6d.io
|
||||
appVersion: "1.2.0"
|
||||
version: 0.2.4
|
||||
version: 0.2.1
|
||||
|
||||
@@ -179,8 +179,7 @@ primary_reads_enabled = true
|
||||
# `random`: picks a shard at random
|
||||
# `random_healthy`: picks a shard at random favoring shards with the least number of recent errors
|
||||
# `shard_<number>`: e.g. shard_0, shard_4, etc. picks a specific shard, everytime
|
||||
# `fail`: fails to pick up shard. (require explicit shard setup)
|
||||
# default_shard = "shard_0"
|
||||
# no_shard_specified_behavior = "shard_0"
|
||||
|
||||
# So what if you wanted to implement a different hashing function,
|
||||
# or you've already built one and you want this pooler to use it?
|
||||
|
||||
@@ -881,7 +881,6 @@ where
|
||||
};
|
||||
|
||||
query_router.update_pool_settings(&pool.settings);
|
||||
query_router.set_default_role();
|
||||
|
||||
// Our custom protocol loop.
|
||||
// We expect the client to either start a transaction with regular queries
|
||||
|
||||
@@ -773,7 +773,6 @@ pub enum DefaultShard {
|
||||
Shard(usize),
|
||||
Random,
|
||||
RandomHealthy,
|
||||
Fail,
|
||||
}
|
||||
impl Default for DefaultShard {
|
||||
fn default() -> Self {
|
||||
@@ -788,7 +787,6 @@ impl serde::Serialize for DefaultShard {
|
||||
}
|
||||
DefaultShard::Random => serializer.serialize_str("random"),
|
||||
DefaultShard::RandomHealthy => serializer.serialize_str("random_healthy"),
|
||||
DefaultShard::Fail => serializer.serialize_str("fail"),
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -806,7 +804,6 @@ impl<'de> serde::Deserialize<'de> for DefaultShard {
|
||||
match s.as_str() {
|
||||
"random" => Ok(DefaultShard::Random),
|
||||
"random_healthy" => Ok(DefaultShard::RandomHealthy),
|
||||
"fail" => Ok(DefaultShard::Fail),
|
||||
_ => Err(serde::de::Error::custom(
|
||||
"invalid value for no_shard_specified_behavior",
|
||||
)),
|
||||
|
||||
@@ -30,7 +30,6 @@ pub enum Error {
|
||||
QueryRouterError(String),
|
||||
InvalidShardId(usize),
|
||||
PreparedStatementError,
|
||||
NoShardSelected,
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Debug)]
|
||||
|
||||
@@ -720,7 +720,6 @@ impl ConnectionPool {
|
||||
.unwrap()
|
||||
});
|
||||
}
|
||||
DefaultShard::Fail => return Err(Error::NoShardSelected),
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
@@ -1061,11 +1061,6 @@ impl QueryRouter {
|
||||
self.active_shard
|
||||
}
|
||||
|
||||
/// Set active_role as the default_role specified in the pool.
|
||||
pub fn set_default_role(&mut self) {
|
||||
self.active_role = self.pool_settings.default_role;
|
||||
}
|
||||
|
||||
/// Get the current desired server role we should be talking to.
|
||||
pub fn role(&self) -> Option<Role> {
|
||||
self.active_role
|
||||
|
||||
@@ -56,41 +56,6 @@ describe "Random Load Balancing" do
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "when all replicas are down " do
|
||||
let(:processes) { Helpers::Pgcat.single_shard_setup("sharded_db", 5, "transaction", "random", "debug", {"default_role" => "replica"}) }
|
||||
|
||||
it "unbans them automatically to prevent false positives in health checks that could make all replicas unavailable" do
|
||||
conn = PG.connect(processes.pgcat.connection_string("sharded_db", "sharding_user"))
|
||||
failed_count = 0
|
||||
number_of_replicas = processes[:replicas].length
|
||||
|
||||
# Take down all replicas
|
||||
processes[:replicas].each(&:take_down)
|
||||
|
||||
(number_of_replicas + 1).times do |n|
|
||||
conn.async_exec("SELECT 1 + 2")
|
||||
rescue
|
||||
conn = PG.connect(processes.pgcat.connection_string("sharded_db", "sharding_user"))
|
||||
failed_count += 1
|
||||
end
|
||||
|
||||
expect(failed_count).to eq(number_of_replicas + 1)
|
||||
failed_count = 0
|
||||
|
||||
# Ban_time is configured to 60 so this reset will only work
|
||||
# if the replicas are unbanned automatically
|
||||
processes[:replicas].each(&:reset)
|
||||
|
||||
number_of_replicas.times do
|
||||
conn.async_exec("SELECT 1 + 2")
|
||||
rescue
|
||||
conn = PG.connect(processes.pgcat.connection_string("sharded_db", "sharding_user"))
|
||||
failed_count += 1
|
||||
end
|
||||
expect(failed_count).to eq(0)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "Least Outstanding Queries Load Balancing" do
|
||||
@@ -196,3 +161,4 @@ describe "Least Outstanding Queries Load Balancing" do
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user