Skip to content

Commit

Permalink
Merge pull request #31442 from nextcloud/backport/31436/stable23
Browse files Browse the repository at this point in the history
[stable23] be conservative when reading from fresh created column
  • Loading branch information
blizzz authored Mar 10, 2022
2 parents fc3ca97 + 75326f7 commit aa30c76
Showing 1 changed file with 15 additions and 5 deletions.
20 changes: 15 additions & 5 deletions apps/user_ldap/lib/Migration/Version1130Date20211102154716.php
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ class Version1130Date20211102154716 extends SimpleMigrationStep {
private $dbc;
/** @var LoggerInterface */
private $logger;
/** @var string[] */
private $hashColumnAddedToTables = [];

public function __construct(IDBConnection $dbc, LoggerInterface $logger) {
$this->dbc = $dbc;
Expand Down Expand Up @@ -89,6 +91,7 @@ public function changeSchema(IOutput $output, Closure $schemaClosure, array $opt
'length' => 64,
]);
$changeSchema = true;
$this->hashColumnAddedToTables[] = $tableName;
}
$column = $table->getColumn('ldap_dn');
if ($tableName === 'ldap_user_mapping') {
Expand All @@ -109,7 +112,7 @@ public function changeSchema(IOutput $output, Closure $schemaClosure, array $opt
$table->addUniqueIndex(['directory_uuid'], 'ldap_user_directory_uuid');
$changeSchema = true;
}
} else if (!$schema->hasTable('ldap_group_mapping_backup')) {
} elseif (!$schema->hasTable('ldap_group_mapping_backup')) {
// We need to copy the table twice to be able to change primary key, prepare the backup table
$table2 = $schema->createTable('ldap_group_mapping_backup');
$table2->addColumn('ldap_dn', Types::STRING, [
Expand Down Expand Up @@ -177,9 +180,16 @@ protected function handleDNHashes(string $table): void {

protected function getSelectQuery(string $table): IQueryBuilder {
$qb = $this->dbc->getQueryBuilder();
$qb->select('owncloud_name', 'ldap_dn', 'ldap_dn_hash')
->from($table)
->where($qb->expr()->isNull('ldap_dn_hash'));
$qb->select('owncloud_name', 'ldap_dn')
->from($table);

// when added we may run into risk that it's read from a DB node
// where the column is not present. Then the where clause is also
// not necessary since all rows qualify.
if (!in_array($table, $this->hashColumnAddedToTables, true)) {
$qb->where($qb->expr()->isNull('ldap_dn_hash'));
}

return $qb;
}

Expand Down Expand Up @@ -260,7 +270,7 @@ protected function getNextcloudIdsByUuid(string $table, string $uuid): array {
* @return Generator<string>
* @throws \OCP\DB\Exception
*/
protected function getDuplicatedUuids(string $table): Generator{
protected function getDuplicatedUuids(string $table): Generator {
$select = $this->dbc->getQueryBuilder();
$select->select('directory_uuid')
->from($table)
Expand Down

0 comments on commit aa30c76

Please sign in to comment.