Skip to content

Commit

Permalink
Merge pull request #44959 from nextcloud/backport/44884/stable29
Browse files Browse the repository at this point in the history
[stable29] feat: add request id as comment to all queries
  • Loading branch information
susnux authored May 29, 2024
2 parents b3341a1 + c61a75f commit 1d269ad
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 11 deletions.
11 changes: 9 additions & 2 deletions config/config.sample.php
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,13 @@
['user' => 'nextcloud', 'password' => 'password2', 'host' => 'replica2', 'dbname' => ''],
],

/**
* 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
Expand Down Expand Up @@ -1965,7 +1972,7 @@
/**
* 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")``
Expand Down Expand Up @@ -2311,7 +2318,7 @@
/**
* 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,
Expand Down
31 changes: 22 additions & 9 deletions lib/private/DB/Connection.php
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@
use OCP\IRequestId;
use OCP\PreConditionNotMetException;
use OCP\Profiler\IProfiler;
use OCP\Server;
use Psr\Clock\ClockInterface;
use Psr\Log\LoggerInterface;
use function count;
Expand Down Expand Up @@ -91,6 +92,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.
*
Expand All @@ -116,9 +120,12 @@ public function __construct(
$this->tablePrefix = $params['tablePrefix'];

$this->systemConfig = \OC::$server->getSystemConfig();
$this->clock = \OCP\Server::get(ClockInterface::class);
$this->clock = Server::get(ClockInterface::class);
$this->logger = \OC::$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 = \OC::$server->get(IProfiler::class);
if ($profiler->isEnabled()) {
Expand Down Expand Up @@ -258,8 +265,7 @@ public function prepare($sql, $limit = null, $offset = null): Statement {
$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);
}
Expand Down Expand Up @@ -316,8 +322,7 @@ public function executeQuery(string $sql, array $params = [], $types = [], ?Quer
$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);
Expand All @@ -337,8 +342,7 @@ private function getQueriedTables(string $sql): array {
* @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);
Expand All @@ -363,8 +367,7 @@ public function executeStatement($sql, array $params = [], array $types = []): i
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);
Expand Down Expand Up @@ -596,6 +599,16 @@ public function tableExists($table) {
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
Expand Down

0 comments on commit 1d269ad

Please sign in to comment.