From 4950a4bc83396e138d22bde683c3f14fae11042d Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Tue, 20 Aug 2024 15:55:36 +0200 Subject: [PATCH] fix: use initial shard encoded in primary key as most likely shard Signed-off-by: Robin Appelman --- .../DB/QueryBuilder/Sharded/ShardQueryRunner.php | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/lib/private/DB/QueryBuilder/Sharded/ShardQueryRunner.php b/lib/private/DB/QueryBuilder/Sharded/ShardQueryRunner.php index d43cc1b06fb0a..5d2c13907a65d 100644 --- a/lib/private/DB/QueryBuilder/Sharded/ShardQueryRunner.php +++ b/lib/private/DB/QueryBuilder/Sharded/ShardQueryRunner.php @@ -48,14 +48,20 @@ public function getShards(bool $allShards, array $shardKeys): ?array { } /** - * Try to get the shards that the keys are likely to be in, based on the shard the row was created on and caching + * Try to get the shards that the keys are likely to be in, based on the shard the row was created * * @param int[] $primaryKeys * @return int[] */ private function getLikelyShards(array $primaryKeys): array { - // todo - return []; + $shards = []; + foreach ($primaryKeys as $primaryKey) { + $encodedShard = $primaryKey & ShardDefinition::PRIMARY_KEY_SHARD_MASK; + if (!in_array($encodedShard, $shards)) { + $shards[] = $encodedShard; + } + } + return $shards; } /**