aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobin Appelman <robin@icewind.nl>2024-04-22 13:03:55 +0200
committerGitHub <noreply@github.com>2024-04-22 13:03:55 +0200
commitdeac58ab7ee75e0081dd76af3f756ae4c218d207 (patch)
treefa9248971ba4e0007f4e495483870f0df43750b7
parentcd49fb38d8886d1b2d9cf9debc11729299d5e58d (diff)
parent8c10c7809950ac1208f65d9949265b3247d08321 (diff)
downloadnextcloud-server-deac58ab7ee75e0081dd76af3f756ae4c218d207.tar.gz
nextcloud-server-deac58ab7ee75e0081dd76af3f756ae4c218d207.zip
Merge pull request #44884 from nextcloud/query-req-id
feat: add request id as comment to all queries
-rw-r--r--config/config.sample.php11
-rw-r--r--lib/private/DB/Connection.php28
2 files changed, 29 insertions, 10 deletions
diff --git a/config/config.sample.php b/config/config.sample.php
index 280334477a6..f45e7dcc5e0 100644
--- a/config/config.sample.php
+++ b/config/config.sample.php
@@ -160,6 +160,13 @@ $CONFIG = [
],
/**
+ * Add request id to the database query in a comment.
+ *
+ * This can be enabled to assist in mapping database logs to Nextcloud logs.
+ */
+'db.log_request_id' => false,
+
+/**
* Indicates whether the Nextcloud instance was installed successfully; ``true``
* indicates a successful installation, and ``false`` indicates an unsuccessful
* installation.
@@ -1965,7 +1972,7 @@ $CONFIG = [
/**
* Blacklist characters from being used in filenames. This is useful if you
* have a filesystem or OS which does not support certain characters like windows.
- *
+ *
* The '/' and '\' characters are always forbidden.
*
* Example for windows systems: ``array('?', '<', '>', ':', '*', '|', '"', chr(0), "\n", "\r")``
@@ -2311,7 +2318,7 @@ $CONFIG = [
/**
* Timeout for the login form, after this time the login form is reset.
* This prevents password leaks on public devices if the user forgots to clear the form.
- *
+ *
* Default is 5 minutes (300 seconds), a value of 0 means no timeout.
*/
'login_form_timeout' => 300,
diff --git a/lib/private/DB/Connection.php b/lib/private/DB/Connection.php
index 2e0582303f4..1340a388571 100644
--- a/lib/private/DB/Connection.php
+++ b/lib/private/DB/Connection.php
@@ -91,6 +91,9 @@ class Connection extends PrimaryReadReplicaConnection {
/** @var array<string, int> */
protected $tableDirtyWrites = [];
+ protected bool $logRequestId;
+ protected string $requestId;
+
/**
* Initializes a new instance of the Connection class.
*
@@ -119,6 +122,9 @@ class Connection extends PrimaryReadReplicaConnection {
$this->clock = Server::get(ClockInterface::class);
$this->logger = Server::get(LoggerInterface::class);
+ $this->logRequestId = $this->systemConfig->getValue('db.log_request_id', false);
+ $this->requestId = Server::get(IRequestId::class)->getId();
+
/** @var \OCP\Profiler\IProfiler */
$profiler = Server::get(IProfiler::class);
if ($profiler->isEnabled()) {
@@ -249,8 +255,7 @@ class Connection extends PrimaryReadReplicaConnection {
$platform = $this->getDatabasePlatform();
$sql = $platform->modifyLimitQuery($sql, $limit, $offset);
}
- $statement = $this->replaceTablePrefix($sql);
- $statement = $this->adapter->fixupStatement($statement);
+ $statement = $this->finishQuery($sql);
return parent::prepare($statement);
}
@@ -307,8 +312,7 @@ class Connection extends PrimaryReadReplicaConnection {
$this->ensureConnectedToPrimary();
}
- $sql = $this->replaceTablePrefix($sql);
- $sql = $this->adapter->fixupStatement($sql);
+ $sql = $this->finishQuery($sql);
$this->queriesExecuted++;
$this->logQueryToFile($sql);
return parent::executeQuery($sql, $params, $types, $qcp);
@@ -328,8 +332,7 @@ class Connection extends PrimaryReadReplicaConnection {
* @throws Exception
*/
public function executeUpdate(string $sql, array $params = [], array $types = []): int {
- $sql = $this->replaceTablePrefix($sql);
- $sql = $this->adapter->fixupStatement($sql);
+ $sql = $this->finishQuery($sql);
$this->queriesExecuted++;
$this->logQueryToFile($sql);
return parent::executeUpdate($sql, $params, $types);
@@ -354,8 +357,7 @@ class Connection extends PrimaryReadReplicaConnection {
foreach ($tables as $table) {
$this->tableDirtyWrites[$table] = $this->clock->now()->getTimestamp();
}
- $sql = $this->replaceTablePrefix($sql);
- $sql = $this->adapter->fixupStatement($sql);
+ $sql = $this->finishQuery($sql);
$this->queriesExecuted++;
$this->logQueryToFile($sql);
return (int)parent::executeStatement($sql, $params, $types);
@@ -587,6 +589,16 @@ class Connection extends PrimaryReadReplicaConnection {
return $schema->tablesExist([$table]);
}
+ protected function finishQuery(string $statement): string {
+ $statement = $this->replaceTablePrefix($statement);
+ $statement = $this->adapter->fixupStatement($statement);
+ if ($this->logRequestId) {
+ return $statement . " /* reqid: " . $this->requestId . " */";
+ } else {
+ return $statement;
+ }
+ }
+
// internal use
/**
* @param string $statement