Skip to content
Snippets Groups Projects
Commit 45663e48 authored by catch's avatar catch
Browse files

Issue #3291949 by alexpott, daffie: Improve the MySQL transaction isolation warning

(cherry picked from commit 90f0da7b)
parent bc8b4067
Branches
Tags
24 merge requests!8506Draft: Issue #3456536 by ibrahim tameme,!5646Issue #3350972 by nod_: [random test failure]...,!5600Issue #3350972 by nod_: [random test failure]...,!5343Issue #3305066 by quietone, Rename RedirectLeadingSlashesSubscriber,!4350Issue #3307718: Implement xxHash for non-cryptographic use-cases,!3603#ISSUE 3346218 Add a different message on edit comment,!3555Issue #2473873: Views entity operations lack cacheability support, resulting in incorrect dropbuttons,!3494Issue #3327018 by Spokje, longwave, xjm, mondrake: Update PHPStan to 1.9.3 and...,!3410Issue #3340128: UserLoginForm::submitForm has some dead code,!3389Issue #3325184 by Spokje, andypost, xjm, smustgrave: $this->configFactory is...,!3381Issue #3332363: Refactor Claro's menus-and-lists stylesheet,!3307Issue #3326193: CKEditor 5 can grow past the viewport when there is a lot of content,!3236Issue #3332419: Refactor Claro's messages stylesheet,!3231Draft: Issue #3049525 by longwave, fougere, larowlan, kim.pepper, AaronBauman, Wim...,!3212Issue #3294003: Refactor Claro's entity-meta stylesheet,!3194Issue #3330981: Fix PHPStan L1 error "Relying on entity queries to check access by default is deprecated...",!3143Issue #3313342: [PHP 8.1] Deprecated function: strpos(): Passing null to parameter #1 LayoutBuilderUiCacheContext.php on line 28,!3024Issue #3307509: Empty option for views bulk form,!2972Issue #1845004: Replace custom password hashing library with PHP 5.5 password_hash(),!2719Issue #3110137: Remove Classy from core.,!2688Issue #3261452: [PP-1] Remove tracker module from core,!2437Issue #3238257 by hooroomoo, Wim Leers: Fragment link pointing to <textarea>...,!2296Issue #3100732: Allow specifying `meta` data on JSON:API objects,!1626Issue #3256642: Make life better for database drivers that extend another database driver
......@@ -28,16 +28,14 @@ function mysql_requirements($phase) {
$isolation_level = $connection->query($query)->fetchField();
if ($isolation_level !== 'READ-COMMITTED') {
$requirements['mysql_transaction_level'] = [
'title' => t('Database Isolation Level'),
'severity' => REQUIREMENT_WARNING,
'value' => t('Transaction Isolation Level: @value', ['@value' => $isolation_level]),
'description' => t('For the best performance and to minimize locking issues, the READ-COMMITTED transaction isolation level is <a href=":performance_doc">recommended</a>.', [
':performance_doc' => 'https://www.drupal.org/docs/system-requirements/setting-the-mysql-transaction-isolation-level',
]),
];
}
$requirements['mysql_transaction_level'] = [
'title' => t('Database Isolation Level'),
'severity' => $isolation_level === 'READ-COMMITTED' ? REQUIREMENT_OK : REQUIREMENT_WARNING,
'value' => $isolation_level,
'description' => t('For the best performance and to minimize locking issues, the READ-COMMITTED transaction isolation level is recommended. See the <a href=":performance_doc">setting MySQL transaction isolation level</a> page for more information.', [
':performance_doc' => 'https://www.drupal.org/docs/system-requirements/setting-the-mysql-transaction-isolation-level',
]),
];
}
}
......
......@@ -45,28 +45,31 @@ public function testIsolationLevelWarningNotDisplaying() {
]);
$this->drupalLogin($admin_user);
// Change the isolation level to force the warning message.
// Set the isolation level to a level that produces a warning.
$this->writeIsolationLevelSettings('REPEATABLE READ');
// Check if the warning message is being displayed.
// Check the message is not a warning.
$this->drupalGet('admin/reports/status');
$elements = $this->xpath('//details[@class="system-status-report__entry"]//div[contains(text(), :text)]', [
':text' => 'For the best performance and to minimize locking issues, the READ-COMMITTED',
]);
$this->assertCount(1, $elements);
$this->assertStringStartsWith('Transaction Isolation Level', $elements[0]->getParent()->getText());
$this->assertStringStartsWith('REPEATABLE-READ', $elements[0]->getParent()->getText());
// Ensure it is a warning.
$this->assertStringContainsString('warning', $elements[0]->getParent()->getParent()->find('css', 'summary')->getAttribute('class'));
// Rollback the isolation level to read committed.
$this->writeIsolationLevelSettings('READ COMMITTED');
// Check if the warning message is gone.
// Check the message is not a warning.
$this->drupalGet('admin/reports/status');
$this->assertSession()->pageTextNotContains('Database Isolation Level');
$elements = $this->xpath('//details[@class="system-status-report__entry"]//div[contains(text(), :text)]', [
':text' => 'For the best performance and to minimize locking issues, the READ-COMMITTED',
]);
$this->assertCount(0, $elements);
$this->assertCount(1, $elements);
$this->assertStringStartsWith('READ-COMMITTED', $elements[0]->getParent()->getText());
// Ensure it is a not a warning.
$this->assertStringNotContainsString('warning', $elements[0]->getParent()->getParent()->find('css', 'summary')->getAttribute('class'));
}
/**
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment