Skip to content

Commit

Permalink
fix: Migrate existing bg jobs to use sha256
Browse files Browse the repository at this point in the history
Signed-off-by: Louis Chemineau <louis@chmn.me>
  • Loading branch information
artonge committed Sep 5, 2024
1 parent f4fc57c commit 7f742cb
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 0 deletions.
77 changes: 77 additions & 0 deletions core/Migrations/Version28000Date20240828142927.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
<?php

declare(strict_types=1);

/**
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/

namespace OC\Core\Migrations;

use Closure;
use OCP\DB\ISchemaWrapper;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\IDBConnection;

/**
* Migrate the argument_hash column of oc_jobs to use sha256 instead of md5.
*/
class Version28000Date20240828142927 extends SimpleMigrationStep {

Check failure on line 20 in core/Migrations/Version28000Date20240828142927.php

View workflow job for this annotation

GitHub Actions / static-code-analysis

UndefinedClass

core/Migrations/Version28000Date20240828142927.php:20:46: UndefinedClass: Class, interface or enum named OC\Core\Migrations\SimpleMigrationStep does not exist (see https://psalm.dev/019)

Check failure

Code scanning / Psalm

UndefinedClass Error

Class, interface or enum named OC\Core\Migrations\SimpleMigrationStep does not exist
public function __construct(
protected IDBConnection $connection,
) {
}

public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper {
/** @var ISchemaWrapper $schema */
$schema = $schemaClosure();

// Increase the column size from 32 to 64
$table = $schema->getTable('jobs');
$table->modifyColumn('argument_hash', [
'notnull' => false,
'length' => 64,
]);

return $schema;
}

public function postSchemaChange(IOutput $output, Closure $schemaClosure, array $options): void {
$chunkSize = 1000;
$offset = 0;
$nullHash = hash('sha256', 'null');

$selectQuery = $this->connection->getQueryBuilder()
->select('*')
->from('jobs')
->setMaxResults($chunkSize);

$insertQuery = $this->connection->getQueryBuilder();
$insertQuery->update('jobs')
->set('argument_hash', $insertQuery->createParameter('argument_hash'))
->where($insertQuery->expr()->eq('id', $insertQuery->createParameter('id')));

do {
$result = $selectQuery
->setFirstResult($offset)
->executeQuery();

$jobs = $result->fetchAll();
$count = count($jobs);

foreach ($jobs as $jobRow) {
if ($jobRow['argument'] === 'null') {
$hash = $nullHash;
} else {
$hash = hash('sha256', $jobRow['argument']);
}
$insertQuery->setParameter('id', (string)$jobRow['id'], IQueryBuilder::PARAM_INT);
$insertQuery->setParameter('argument_hash', $hash);
$insertQuery->executeStatement();
}

$offset += $chunkSize;
} while ($count === $chunkSize);
}
}
1 change: 1 addition & 0 deletions lib/composer/composer/autoload_classmap.php
Original file line number Diff line number Diff line change
Expand Up @@ -1232,6 +1232,7 @@
'OC\\Core\\Migrations\\Version28000Date20231004103301' => $baseDir . '/core/Migrations/Version28000Date20231004103301.php',
'OC\\Core\\Migrations\\Version28000Date20231103104802' => $baseDir . '/core/Migrations/Version28000Date20231103104802.php',
'OC\\Core\\Migrations\\Version28000Date20231126110901' => $baseDir . '/core/Migrations/Version28000Date20231126110901.php',
'OC\\Core\\Migrations\\Version28000Date20240828142927' => $baseDir . '/core/Migrations/Version28000Date20240828142927.php',
'OC\\Core\\Migrations\\Version30000Date20240814180800' => $baseDir . '/core/Migrations/Version30000Date20240814180800.php',
'OC\\Core\\Notification\\CoreNotifier' => $baseDir . '/core/Notification/CoreNotifier.php',
'OC\\Core\\Service\\LoginFlowV2Service' => $baseDir . '/core/Service/LoginFlowV2Service.php',
Expand Down
1 change: 1 addition & 0 deletions lib/composer/composer/autoload_static.php
Original file line number Diff line number Diff line change
Expand Up @@ -1265,6 +1265,7 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2
'OC\\Core\\Migrations\\Version28000Date20231004103301' => __DIR__ . '/../../..' . '/core/Migrations/Version28000Date20231004103301.php',
'OC\\Core\\Migrations\\Version28000Date20231103104802' => __DIR__ . '/../../..' . '/core/Migrations/Version28000Date20231103104802.php',
'OC\\Core\\Migrations\\Version28000Date20231126110901' => __DIR__ . '/../../..' . '/core/Migrations/Version28000Date20231126110901.php',
'OC\\Core\\Migrations\\Version28000Date20240828142927' => __DIR__ . '/../../..' . '/core/Migrations/Version28000Date20240828142927.php',
'OC\\Core\\Migrations\\Version30000Date20240814180800' => __DIR__ . '/../../..' . '/core/Migrations/Version30000Date20240814180800.php',
'OC\\Core\\Notification\\CoreNotifier' => __DIR__ . '/../../..' . '/core/Notification/CoreNotifier.php',
'OC\\Core\\Service\\LoginFlowV2Service' => __DIR__ . '/../../..' . '/core/Service/LoginFlowV2Service.php',
Expand Down

0 comments on commit 7f742cb

Please sign in to comment.