diff options
author | Arthur Schiwon <blizzz@arthur-schiwon.de> | 2024-08-29 21:06:11 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-08-29 21:06:11 +0200 |
commit | 59ba0554ef89e115493a1bc11707caded1d7dcca (patch) | |
tree | f281483308e8b6efd14ebf1f754c6a2334e6a094 | |
parent | 0b5c424f3a8a9ae73248e7ddd7efe6cc37db830f (diff) | |
parent | 656412daa422533ddc09e7b97bbb00ca3a3042e3 (diff) | |
download | nextcloud-server-59ba0554ef89e115493a1bc11707caded1d7dcca.tar.gz nextcloud-server-59ba0554ef89e115493a1bc11707caded1d7dcca.zip |
Merge pull request #47612 from nextcloud/backport/47611/stable30
[stable30] fix(DB): set sharding parameters only when intended
-rw-r--r-- | lib/private/DB/Connection.php | 32 | ||||
-rw-r--r-- | lib/private/DB/ConnectionFactory.php | 15 | ||||
-rw-r--r-- | tests/lib/DB/QueryBuilder/Partitioned/PartitionedQueryBuilderTest.php | 3 | ||||
-rw-r--r-- | tests/lib/DB/QueryBuilder/Sharded/SharedQueryBuilderTest.php | 3 | ||||
-rw-r--r-- | version.php | 2 |
5 files changed, 36 insertions, 19 deletions
diff --git a/lib/private/DB/Connection.php b/lib/private/DB/Connection.php index 1b724179f06..adcae868bd3 100644 --- a/lib/private/DB/Connection.php +++ b/lib/private/DB/Connection.php @@ -91,6 +91,7 @@ class Connection extends PrimaryReadReplicaConnection { protected array $shards = []; protected ShardConnectionManager $shardConnectionManager; protected AutoIncrementHandler $autoIncrementHandler; + protected bool $isShardingEnabled; public const SHARD_PRESETS = [ 'filecache' => [ @@ -130,14 +131,17 @@ class Connection extends PrimaryReadReplicaConnection { parent::__construct($params, $driver, $config, $eventManager); $this->adapter = new $params['adapter']($this); $this->tablePrefix = $params['tablePrefix']; - - /** @psalm-suppress InvalidArrayOffset */ - $this->shardConnectionManager = $this->params['shard_connection_manager'] ?? Server::get(ShardConnectionManager::class); - /** @psalm-suppress InvalidArrayOffset */ - $this->autoIncrementHandler = $this->params['auto_increment_handler'] ?? new AutoIncrementHandler( - Server::get(ICacheFactory::class), - $this->shardConnectionManager, - ); + $this->isShardingEnabled = isset($this->params['sharding']) && !empty($this->params['sharding']); + + if ($this->isShardingEnabled) { + /** @psalm-suppress InvalidArrayOffset */ + $this->shardConnectionManager = $this->params['shard_connection_manager'] ?? Server::get(ShardConnectionManager::class); + /** @psalm-suppress InvalidArrayOffset */ + $this->autoIncrementHandler = $this->params['auto_increment_handler'] ?? new AutoIncrementHandler( + Server::get(ICacheFactory::class), + $this->shardConnectionManager, + ); + } $this->systemConfig = \OC::$server->getSystemConfig(); $this->clock = Server::get(ClockInterface::class); $this->logger = Server::get(LoggerInterface::class); @@ -192,10 +196,12 @@ class Connection extends PrimaryReadReplicaConnection { */ public function getShardConnections(): array { $connections = []; - foreach ($this->shards as $shardDefinition) { - foreach ($shardDefinition->getAllShards() as $shard) { - /** @var ConnectionAdapter $connection */ - $connections[] = $this->shardConnectionManager->getConnection($shardDefinition, $shard); + if ($this->isShardingEnabled) { + foreach ($this->shards as $shardDefinition) { + foreach ($shardDefinition->getAllShards() as $shard) { + /** @var ConnectionAdapter $connection */ + $connections[] = $this->shardConnectionManager->getConnection($shardDefinition, $shard); + } } } return $connections; @@ -255,7 +261,7 @@ class Connection extends PrimaryReadReplicaConnection { $this->systemConfig, $this->logger ); - if (count($this->partitions) > 0) { + if ($this->isShardingEnabled && count($this->partitions) > 0) { $builder = new PartitionedQueryBuilder( $builder, $this->shards, diff --git a/lib/private/DB/ConnectionFactory.php b/lib/private/DB/ConnectionFactory.php index d8764f07753..03a7a4f8444 100644 --- a/lib/private/DB/ConnectionFactory.php +++ b/lib/private/DB/ConnectionFactory.php @@ -225,11 +225,16 @@ class ConnectionFactory { } $connectionParams['sharding'] = $this->config->getValue('dbsharding', []); - $connectionParams['shard_connection_manager'] = $this->shardConnectionManager; - $connectionParams['auto_increment_handler'] = new AutoIncrementHandler( - $this->cacheFactory, - $this->shardConnectionManager, - ); + if (!empty($connectionParams['sharding'])) { + $connectionParams['shard_connection_manager'] = $this->shardConnectionManager; + $connectionParams['auto_increment_handler'] = new AutoIncrementHandler( + $this->cacheFactory, + $this->shardConnectionManager, + ); + } else { + // just in case only the presence could lead to funny behaviour + unset($connectionParams['sharding']); + } $connectionParams = array_merge($connectionParams, $additionalConnectionParams); diff --git a/tests/lib/DB/QueryBuilder/Partitioned/PartitionedQueryBuilderTest.php b/tests/lib/DB/QueryBuilder/Partitioned/PartitionedQueryBuilderTest.php index 0397ce68776..12ba74fe89f 100644 --- a/tests/lib/DB/QueryBuilder/Partitioned/PartitionedQueryBuilderTest.php +++ b/tests/lib/DB/QueryBuilder/Partitioned/PartitionedQueryBuilderTest.php @@ -26,6 +26,9 @@ class PartitionedQueryBuilderTest extends TestCase { private AutoIncrementHandler $autoIncrementHandler; protected function setUp(): void { + if (PHP_INT_SIZE < 8) { + $this->markTestSkipped('Test requires 64bit'); + } $this->connection = Server::get(IDBConnection::class); $this->shardConnectionManager = Server::get(ShardConnectionManager::class); $this->autoIncrementHandler = Server::get(AutoIncrementHandler::class); diff --git a/tests/lib/DB/QueryBuilder/Sharded/SharedQueryBuilderTest.php b/tests/lib/DB/QueryBuilder/Sharded/SharedQueryBuilderTest.php index 7af93bbbe59..8f95c1b6263 100644 --- a/tests/lib/DB/QueryBuilder/Sharded/SharedQueryBuilderTest.php +++ b/tests/lib/DB/QueryBuilder/Sharded/SharedQueryBuilderTest.php @@ -27,6 +27,9 @@ class SharedQueryBuilderTest extends TestCase { private AutoIncrementHandler $autoIncrementHandler; protected function setUp(): void { + if (PHP_INT_SIZE < 8) { + $this->markTestSkipped('Test requires 64bit'); + } $this->connection = Server::get(IDBConnection::class); $this->autoIncrementHandler = Server::get(AutoIncrementHandler::class); } diff --git a/version.php b/version.php index b0aee7c7ee0..0d26e5bbbef 100644 --- a/version.php +++ b/version.php @@ -9,7 +9,7 @@ // between betas, final and RCs. This is _not_ the public version number. Reset minor/patch level // when updating major/minor version number. -$OC_Version = [30, 0, 0, 10]; +$OC_Version = [30, 0, 0, 11]; // The human-readable string $OC_VersionString = '30.0.0 RC2'; |