diff options
author | Christoph Wurst <christoph@winzerhof-wurst.at> | 2024-01-18 11:55:55 +0100 |
---|---|---|
committer | Christoph Wurst <christoph@winzerhof-wurst.at> | 2024-01-18 13:37:36 +0100 |
commit | f54b08c2248149ccdb3cfc18fd87655c2eed9ca2 (patch) | |
tree | 9d955bd52f0d46f61fe322121ead08551b51fa61 /lib/private/DB/Connection.php | |
parent | 8314fc5d368bd0938fdea2795236a5f747c301e2 (diff) | |
download | nextcloud-server-f54b08c2248149ccdb3cfc18fd87655c2eed9ca2.tar.gz nextcloud-server-f54b08c2248149ccdb3cfc18fd87655c2eed9ca2.zip |
fix(db): Do not log transacted reads as dirty read
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
Diffstat (limited to 'lib/private/DB/Connection.php')
-rw-r--r-- | lib/private/DB/Connection.php | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/lib/private/DB/Connection.php b/lib/private/DB/Connection.php index b65f4520290..252b375564a 100644 --- a/lib/private/DB/Connection.php +++ b/lib/private/DB/Connection.php @@ -265,13 +265,16 @@ class Connection extends PrimaryReadReplicaConnection { */ public function executeQuery(string $sql, array $params = [], $types = [], QueryCacheProfile $qcp = null): Result { $tables = $this->getQueriedTables($sql); - if (count(array_intersect($this->tableDirtyWrites, $tables)) === 0 && !$this->isTransactionActive()) { + if ($this->isTransactionActive()) { + // Transacted queries go to the primary. The consistency of the primary guarantees that we can not run + // into a dirty read. + } elseif (count(array_intersect($this->tableDirtyWrites, $tables)) === 0) { // No tables read that could have been written already in the same request and no transaction active // so we can switch back to the replica for reading as long as no writes happen that switch back to the primary // We cannot log here as this would log too early in the server boot process $this->ensureConnectedToReplica(); } else { - // Read to a table that was previously written to + // Read to a table that has been written to previously // While this might not necessarily mean that we did a read after write it is an indication for a code path to check $this->logger->debug('dirty table reads: ' . $sql, ['tables' => $this->tableDirtyWrites, 'reads' => $tables, 'exception' => new \Exception()]); } |