Explorar el Código

Add setup check for pending bigint conversion

Signed-off-by: Morris Jobke <hey@morrisjobke.de>
tags/v16.0.0alpha1
Morris Jobke hace 5 años
padre
commit
17b2827bbf
No account linked to committer's email address

+ 1
- 0
core/Command/Db/ConvertFilecacheBigInt.php Ver fichero

@@ -52,6 +52,7 @@ class ConvertFilecacheBigInt extends Command {
}

protected function getColumnsByTable() {
// also update in CheckSetupController::hasBigIntConversionPendingColumns()
return [
'activity' => ['activity_id', 'object_id'],
'activity_mq' => ['mail_id'],

+ 16
- 0
core/js/setupchecks.js Ver fichero

@@ -337,6 +337,22 @@
type: OC.SetupChecks.MESSAGE_TYPE_INFO
})
}
if (data.pendingBigIntConversionColumns.length > 0) {
var listOfPendingBigIntConversionColumns = "";
data.pendingBigIntConversionColumns.forEach(function(element){
listOfPendingBigIntConversionColumns += "<li>" + element + "</li>";
});
messages.push({
msg: t(
'core',
'Some columns in the database are missing a conversion to big int. Due to the fact that changing column types on big tables could take some time they were not changed automatically. By running \'occ db:convert-filecache-bigint\' those pending changes could be applied manually. This operation needs to be made while the instance is offline. For further details read <a target="_blank" rel="noreferrer noopener" href="{docLink}">the documentation page about this</a>.',
{
docLink: oc_defaults.docPlaceholderUrl.replace('PLACEHOLDER', 'admin-bigint-conversion'),
}
) + "<ul>" + listOfPendingBigIntConversionColumns + "</ul>",
type: OC.SetupChecks.MESSAGE_TYPE_INFO
})
}
if (data.isSqliteUsed) {
messages.push({
msg: t(

+ 26
- 13
core/js/tests/specs/setupchecksSpec.js Ver fichero

@@ -211,7 +211,8 @@ describe('OC.SetupChecks tests', function() {
},
isMemoryLimitSufficient: true,
appDirsWithDifferentOwner: [],
recommendedPHPModules: []
recommendedPHPModules: [],
pendingBigIntConversionColumns: []
})
);

@@ -261,7 +262,8 @@ describe('OC.SetupChecks tests', function() {
},
isMemoryLimitSufficient: true,
appDirsWithDifferentOwner: [],
recommendedPHPModules: []
recommendedPHPModules: [],
pendingBigIntConversionColumns: []
})
);

@@ -312,7 +314,8 @@ describe('OC.SetupChecks tests', function() {
},
isMemoryLimitSufficient: true,
appDirsWithDifferentOwner: [],
recommendedPHPModules: []
recommendedPHPModules: [],
pendingBigIntConversionColumns: []
})
);

@@ -361,7 +364,8 @@ describe('OC.SetupChecks tests', function() {
},
isMemoryLimitSufficient: true,
appDirsWithDifferentOwner: [],
recommendedPHPModules: []
recommendedPHPModules: [],
pendingBigIntConversionColumns: []
})
);

@@ -408,7 +412,8 @@ describe('OC.SetupChecks tests', function() {
},
isMemoryLimitSufficient: true,
appDirsWithDifferentOwner: [],
recommendedPHPModules: []
recommendedPHPModules: [],
pendingBigIntConversionColumns: []
})
);

@@ -457,7 +462,8 @@ describe('OC.SetupChecks tests', function() {
appDirsWithDifferentOwner: [
'/some/path'
],
recommendedPHPModules: []
recommendedPHPModules: [],
pendingBigIntConversionColumns: []
})
);

@@ -504,7 +510,8 @@ describe('OC.SetupChecks tests', function() {
},
isMemoryLimitSufficient: true,
appDirsWithDifferentOwner: [],
recommendedPHPModules: []
recommendedPHPModules: [],
pendingBigIntConversionColumns: []
})
);

@@ -551,7 +558,8 @@ describe('OC.SetupChecks tests', function() {
},
isMemoryLimitSufficient: true,
appDirsWithDifferentOwner: [],
recommendedPHPModules: []
recommendedPHPModules: [],
pendingBigIntConversionColumns: []
})
);

@@ -596,9 +604,10 @@ describe('OC.SetupChecks tests', function() {
cronInfo: {
diffInSeconds: 0
},
isMemoryLimitSufficient: false,
appDirsWithDifferentOwner: [],
recommendedPHPModules: [],
isMemoryLimitSufficient: false
pendingBigIntConversionColumns: []
})
);

@@ -666,7 +675,8 @@ describe('OC.SetupChecks tests', function() {
},
isMemoryLimitSufficient: true,
appDirsWithDifferentOwner: [],
recommendedPHPModules: []
recommendedPHPModules: [],
pendingBigIntConversionColumns: []
})
);

@@ -714,7 +724,8 @@ describe('OC.SetupChecks tests', function() {
},
isMemoryLimitSufficient: true,
appDirsWithDifferentOwner: [],
recommendedPHPModules: []
recommendedPHPModules: [],
pendingBigIntConversionColumns: []
})
);

@@ -762,7 +773,8 @@ describe('OC.SetupChecks tests', function() {
},
isMemoryLimitSufficient: true,
appDirsWithDifferentOwner: [],
recommendedPHPModules: []
recommendedPHPModules: [],
pendingBigIntConversionColumns: []
})
);

@@ -810,7 +822,8 @@ describe('OC.SetupChecks tests', function() {
},
isMemoryLimitSufficient: true,
appDirsWithDifferentOwner: [],
recommendedPHPModules: []
recommendedPHPModules: [],
pendingBigIntConversionColumns: []
})
);


+ 36
- 0
settings/Controller/CheckSetupController.php Ver fichero

@@ -34,11 +34,13 @@ use bantu\IniGetWrapper\IniGetWrapper;
use DirectoryIterator;
use Doctrine\DBAL\DBALException;
use Doctrine\DBAL\Platforms\SqlitePlatform;
use Doctrine\DBAL\Types\Type;
use GuzzleHttp\Exception\ClientException;
use OC;
use OC\AppFramework\Http;
use OC\DB\Connection;
use OC\DB\MissingIndexInformation;
use OC\DB\SchemaWrapper;
use OC\IntegrityCheck\Checker;
use OC\Lock\NoopLockingProvider;
use OC\MemoryInfo;
@@ -603,6 +605,39 @@ Raw output
return $recommendedPHPModules;
}

protected function hasBigIntConversionPendingColumns(): array {
// copy of ConvertFilecacheBigInt::getColumnsByTable()
$tables = [
'activity' => ['activity_id', 'object_id'],
'activity_mq' => ['mail_id'],
'filecache' => ['fileid', 'storage', 'parent', 'mimetype', 'mimepart', 'mtime', 'storage_mtime'],
'mimetypes' => ['id'],
'storages' => ['numeric_id'],
];

$schema = new SchemaWrapper($this->db);
$isSqlite = $this->db->getDatabasePlatform() instanceof SqlitePlatform;
$pendingColumns = [];

foreach ($tables as $tableName => $columns) {
if (!$schema->hasTable($tableName)) {
continue;
}

$table = $schema->getTable($tableName);
foreach ($columns as $columnName) {
$column = $table->getColumn($columnName);
$isAutoIncrement = $column->getAutoincrement();
$isAutoIncrementOnSqlite = $isSqlite && $isAutoIncrement;
if ($column->getType()->getName() !== Type::BIGINT && !$isAutoIncrementOnSqlite) {
$pendingColumns[] = $tableName . '.' . $columnName;
}
}
}

return $pendingColumns;
}

/**
* @return DataResponse
*/
@@ -643,6 +678,7 @@ Raw output
'isMemoryLimitSufficient' => $this->memoryInfo->isMemoryLimitSufficient(),
'appDirsWithDifferentOwner' => $this->getAppDirsWithDifferentOwner(),
'recommendedPHPModules' => $this->hasRecommendedPHPModules(),
'pendingBigIntConversionColumns' => $this->hasBigIntConversionPendingColumns(),
]
);
}

+ 7
- 0
tests/Settings/Controller/CheckSetupControllerTest.php Ver fichero

@@ -159,6 +159,7 @@ class CheckSetupControllerTest extends TestCase {
'hasOpcacheLoaded',
'getAppDirsWithDifferentOwner',
'hasRecommendedPHPModules',
'hasBigIntConversionPendingColumns',
])->getMock();
}

@@ -493,6 +494,11 @@ class CheckSetupControllerTest extends TestCase {
->method('hasRecommendedPHPModules')
->willReturn([]);

$this->checkSetupController
->expects($this->once())
->method('hasBigIntConversionPendingColumns')
->willReturn([]);

$expected = new DataResponse(
[
'isGetenvServerWorking' => true,
@@ -536,6 +542,7 @@ class CheckSetupControllerTest extends TestCase {
'isMemoryLimitSufficient' => true,
'appDirsWithDifferentOwner' => [],
'recommendedPHPModules' => [],
'pendingBigIntConversionColumns' => [],
]
);
$this->assertEquals($expected, $this->checkSetupController->check());

Cargando…
Cancelar
Guardar