mirror of
https://github.com/nextcloud/server.git
synced 2026-06-08 16:26:59 -04:00
fix(lookup-server): disable lookup server for non-global scale setups
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
This commit is contained in:
parent
37166f149e
commit
54f81ac0c9
9 changed files with 90 additions and 83 deletions
|
|
@ -1065,8 +1065,10 @@ class FederatedShareProvider implements IShareProvider {
|
|||
if ($this->gsConfig->isGlobalScaleEnabled()) {
|
||||
return true;
|
||||
}
|
||||
$result = $this->config->getAppValue('files_sharing', 'lookupServerEnabled', 'no');
|
||||
return $result === 'yes';
|
||||
$result = $this->config->getAppValue('files_sharing', 'lookupServerEnabled', 'no') === 'yes';
|
||||
// TODO: Reenable if lookup server is used again
|
||||
// return $result;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1080,8 +1082,10 @@ class FederatedShareProvider implements IShareProvider {
|
|||
if ($this->gsConfig->isGlobalScaleEnabled()) {
|
||||
return false;
|
||||
}
|
||||
$result = $this->config->getAppValue('files_sharing', 'lookupServerUploadEnabled', 'no');
|
||||
return $result === 'yes';
|
||||
$result = $this->config->getAppValue('files_sharing', 'lookupServerUploadEnabled', 'no') === 'yes';
|
||||
// TODO: Reenable if lookup server is used again
|
||||
// return $result;
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -856,10 +856,13 @@ class FederatedShareProviderTest extends \Test\TestCase {
|
|||
|
||||
public function dataTestIsLookupServerQueriesEnabled() {
|
||||
return [
|
||||
[false, 'yes', true],
|
||||
[false, 'no', false],
|
||||
[true, 'yes', true],
|
||||
[true, 'no', true],
|
||||
// TODO: reenable if we use the lookup server for non-global scale
|
||||
// [false, 'yes', true],
|
||||
// [false, 'no', false],
|
||||
[false, 'no', false],
|
||||
[false, 'yes', false],
|
||||
];
|
||||
}
|
||||
|
||||
|
|
@ -883,10 +886,13 @@ class FederatedShareProviderTest extends \Test\TestCase {
|
|||
|
||||
public function dataTestIsLookupServerUploadEnabled() {
|
||||
return [
|
||||
[false, 'yes', true],
|
||||
[false, 'no', false],
|
||||
[true, 'yes', false],
|
||||
[true, 'no', false],
|
||||
// TODO: reenable if we use the lookup server again
|
||||
// [false, 'yes', true],
|
||||
// [false, 'no', false],
|
||||
[false, 'yes', false],
|
||||
[false, 'no', false],
|
||||
];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -37,7 +37,6 @@ declare(strict_types=1);
|
|||
*/
|
||||
namespace OCA\Files_Sharing\Controller;
|
||||
|
||||
use OCP\Constants;
|
||||
use function array_slice;
|
||||
use function array_values;
|
||||
use Generator;
|
||||
|
|
@ -48,6 +47,8 @@ use OCP\AppFramework\OCSController;
|
|||
use OCP\Collaboration\Collaborators\ISearch;
|
||||
use OCP\Collaboration\Collaborators\ISearchResult;
|
||||
use OCP\Collaboration\Collaborators\SearchResultType;
|
||||
use OCP\Constants;
|
||||
use OCP\GlobalScale\IConfig as GlobalScaleIConfig;
|
||||
use OCP\IConfig;
|
||||
use OCP\IRequest;
|
||||
use OCP\IURLGenerator;
|
||||
|
|
@ -217,12 +218,11 @@ class ShareesAPIController extends OCSController {
|
|||
$this->limit = $perPage;
|
||||
$this->offset = $perPage * ($page - 1);
|
||||
|
||||
// In global scale mode we always search the loogup server
|
||||
$lookup = $this->config->getSystemValueBool('gs.enabled', false)
|
||||
|| $this->config->getAppValue('files_sharing', 'lookupServerEnabled', 'no') === 'yes';
|
||||
$this->result['lookupEnabled'] = $lookup;
|
||||
// In global scale mode we always search the lookup server
|
||||
$this->result['lookupEnabled'] = \OC::$server->get(GlobalScaleIConfig::class)->isGlobalScaleEnabled();
|
||||
// TODO: Reconsider using lookup server for non-global-scale federation
|
||||
|
||||
[$result, $hasMoreResults] = $this->collaboratorSearch->search($search, $shareTypes, $lookup, $this->limit, $this->offset);
|
||||
[$result, $hasMoreResults] = $this->collaboratorSearch->search($search, $shareTypes, $this->result['lookupEnabled'], $this->limit, $this->offset);
|
||||
|
||||
// extra treatment for 'exact' subarray, with a single merge expected keys might be lost
|
||||
if (isset($result['exact'])) {
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ use OCA\Files_Sharing\Tests\TestCase;
|
|||
use OCP\AppFramework\Http;
|
||||
use OCP\AppFramework\OCS\OCSBadRequestException;
|
||||
use OCP\Collaboration\Collaborators\ISearch;
|
||||
use OCP\GlobalScale\IConfig as GlobalScaleIConfig;
|
||||
use OCP\IConfig;
|
||||
use OCP\IRequest;
|
||||
use OCP\IURLGenerator;
|
||||
|
|
@ -240,14 +241,14 @@ class ShareesAPIControllerTest extends TestCase {
|
|||
$perPage = $getData['perPage'] ?? 200;
|
||||
$shareType = $getData['shareType'] ?? null;
|
||||
|
||||
$globalConfig = $this->createMock(GlobalScaleIConfig::class);
|
||||
$globalConfig->expects(self::once())
|
||||
->method('isGlobalScaleEnabled')
|
||||
->willReturn(true);
|
||||
$this->overwriteService(GlobalScaleIConfig::class, $globalConfig);
|
||||
|
||||
/** @var IConfig|MockObject $config */
|
||||
$config = $this->createMock(IConfig::class);
|
||||
$config->expects($this->exactly(1))
|
||||
->method('getAppValue')
|
||||
->with($this->anything(), $this->anything(), $this->anything())
|
||||
->willReturnMap([
|
||||
['files_sharing', 'lookupServerEnabled', 'no', 'yes'],
|
||||
]);
|
||||
|
||||
$this->shareManager->expects($this->once())
|
||||
->method('allowGroupSharing')
|
||||
|
|
|
|||
|
|
@ -128,10 +128,12 @@ class RetryJob extends Job {
|
|||
* @return bool
|
||||
*/
|
||||
protected function shouldRemoveBackgroundJob(): bool {
|
||||
return $this->config->getSystemValueBool('has_internet_connection', true) === false ||
|
||||
$this->config->getSystemValueString('lookup_server', 'https://lookup.nextcloud.com') === '' ||
|
||||
$this->config->getAppValue('files_sharing', 'lookupServerUploadEnabled', 'no') !== 'yes' ||
|
||||
$this->retries >= 5;
|
||||
// TODO: Remove global scale condition once lookup server is used for non-global scale federation
|
||||
// return $this->config->getAppValue('files_sharing', 'lookupServerUploadEnabled', 'no') !== 'yes'
|
||||
return !$this->config->getSystemValueBool('gs.enabled', false)
|
||||
|| $this->config->getSystemValueBool('has_internet_connection', true) === false
|
||||
|| $this->config->getSystemValueString('lookup_server', 'https://lookup.nextcloud.com') === ''
|
||||
|| $this->retries >= 5;
|
||||
}
|
||||
|
||||
protected function shouldRun(): bool {
|
||||
|
|
@ -193,7 +195,7 @@ class RetryJob extends Job {
|
|||
$user->getUID(),
|
||||
'lookup_server_connector',
|
||||
'update_retries',
|
||||
$this->retries + 1
|
||||
(string)($this->retries + 1),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -82,8 +82,9 @@ class UpdateLookupServer {
|
|||
* @return bool
|
||||
*/
|
||||
private function shouldUpdateLookupServer(): bool {
|
||||
return $this->config->getSystemValueBool('has_internet_connection', true) === true &&
|
||||
$this->config->getAppValue('files_sharing', 'lookupServerUploadEnabled', 'no') === 'yes' &&
|
||||
$this->config->getSystemValueString('lookup_server', 'https://lookup.nextcloud.com') !== '';
|
||||
// TODO: Consider reenable for non-global-scale setups by checking "'files_sharing', 'lookupServerUploadEnabled'" instead of "gs.enabled"
|
||||
return $this->config->getSystemValueBool('gs.enabled', false)
|
||||
&& $this->config->getSystemValueBool('has_internet_connection', true)
|
||||
&& $this->config->getSystemValueString('lookup_server', 'https://lookup.nextcloud.com') !== '';
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -169,9 +169,11 @@ class VerifyUserData extends Job {
|
|||
}
|
||||
|
||||
protected function verifyViaLookupServer(array $argument, string $dataType): bool {
|
||||
if (empty($this->lookupServerUrl) ||
|
||||
$this->config->getAppValue('files_sharing', 'lookupServerUploadEnabled', 'no') !== 'yes' ||
|
||||
$this->config->getSystemValue('has_internet_connection', true) === false) {
|
||||
// TODO: Consider to enable for non-global-scale setups by checking 'files_sharing', 'lookupServerUploadEnabled'
|
||||
if (!$this->config->getSystemValueBool('gs.enabled', false)
|
||||
|| empty($this->lookupServerUrl)
|
||||
|| $this->config->getSystemValue('has_internet_connection', true) === false
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -64,12 +64,14 @@ class LookupPlugin implements ISearchPlugin {
|
|||
}
|
||||
|
||||
public function search($search, $limit, $offset, ISearchResult $searchResult) {
|
||||
$isGlobalScaleEnabled = $this->config->getSystemValue('gs.enabled', false);
|
||||
$isGlobalScaleEnabled = $this->config->getSystemValueBool('gs.enabled', false);
|
||||
$isLookupServerEnabled = $this->config->getAppValue('files_sharing', 'lookupServerEnabled', 'no') === 'yes';
|
||||
$hasInternetConnection = $this->config->getSystemValueBool('has_internet_connection', true);
|
||||
|
||||
// if case of Global Scale we always search the lookup server
|
||||
if (!$isGlobalScaleEnabled && (!$isLookupServerEnabled || !$hasInternetConnection)) {
|
||||
// If case of Global Scale we always search the lookup server
|
||||
// TODO: Reconsider using the lookup server for non-global scale
|
||||
// if (!$isGlobalScaleEnabled && (!$isLookupServerEnabled || !$hasInternetConnection || $disableLookupServer)) {
|
||||
if (!$isGlobalScaleEnabled) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -88,20 +88,17 @@ class LookupPluginTest extends TestCase {
|
|||
}
|
||||
|
||||
public function testSearchNoLookupServerURI() {
|
||||
$this->config->expects($this->once())
|
||||
$this->config->expects($this->atMost(1))
|
||||
->method('getAppValue')
|
||||
->with('files_sharing', 'lookupServerEnabled', 'no')
|
||||
->willReturn('yes');
|
||||
$this->config->expects($this->at(0))
|
||||
->method('getSystemValue')
|
||||
->with('gs.enabled', false)
|
||||
->willReturn(false);
|
||||
|
||||
$this->config->expects($this->at(2))
|
||||
$this->config->expects($this->exactly(2))
|
||||
->method('getSystemValueBool')
|
||||
->with('has_internet_connection', true)
|
||||
->willReturn(true);
|
||||
$this->config->expects($this->at(3))
|
||||
->willReturnMap([
|
||||
['gs.enabled', false, true],
|
||||
['has_internet_connection', true, true],
|
||||
]);
|
||||
$this->config->expects($this->once())
|
||||
->method('getSystemValue')
|
||||
->with('lookup_server', 'https://lookup.nextcloud.com')
|
||||
->willReturn('');
|
||||
|
|
@ -120,15 +117,13 @@ class LookupPluginTest extends TestCase {
|
|||
->method('getAppValue')
|
||||
->with('files_sharing', 'lookupServerEnabled', 'no')
|
||||
->willReturn('yes');
|
||||
$this->config->expects($this->at(0))
|
||||
->method('getSystemValue')
|
||||
->with('gs.enabled', false)
|
||||
->willReturn(false);
|
||||
|
||||
$this->config->expects($this->at(2))
|
||||
$this->config->expects($this->exactly(2))
|
||||
->method('getSystemValueBool')
|
||||
->with('has_internet_connection', true)
|
||||
->willReturn(false);
|
||||
->willReturnMap([
|
||||
['has_internet_connection', true, false],
|
||||
['gs.enabled', false, true],
|
||||
]);
|
||||
|
||||
$this->clientService->expects($this->never())
|
||||
->method('newClient');
|
||||
|
|
@ -156,19 +151,16 @@ class LookupPluginTest extends TestCase {
|
|||
->method('getAppValue')
|
||||
->with('files_sharing', 'lookupServerEnabled', 'no')
|
||||
->willReturn('yes');
|
||||
$this->config->expects($this->at(0))
|
||||
->method('getSystemValue')
|
||||
->with('gs.enabled', false)
|
||||
->willReturn(false);
|
||||
|
||||
$this->config->expects($this->at(2))
|
||||
->method('getSystemValueBool')
|
||||
->with('has_internet_connection', true)
|
||||
->willReturn(true);
|
||||
$this->config->expects($this->at(3))
|
||||
$this->config->expects($this->once())
|
||||
->method('getSystemValue')
|
||||
->with('lookup_server', 'https://lookup.nextcloud.com')
|
||||
->willReturn($searchParams['server']);
|
||||
$this->config->expects($this->exactly(2))
|
||||
->method('getSystemValueBool')
|
||||
->willReturnMap([
|
||||
['gs.enabled', false, true],
|
||||
['has_internet_connection', true, true],
|
||||
]);
|
||||
|
||||
$response = $this->createMock(IResponse::class);
|
||||
$response->expects($this->once())
|
||||
|
|
@ -215,20 +207,19 @@ class LookupPluginTest extends TestCase {
|
|||
->method('getAppValue')
|
||||
->with('files_sharing', 'lookupServerEnabled', 'no')
|
||||
->willReturn($LookupEnabled ? 'yes' : 'no');
|
||||
$this->config->expects($this->at(0))
|
||||
->method('getSystemValue')
|
||||
->with('gs.enabled', false)
|
||||
->willReturn($GSEnabled);
|
||||
if ($GSEnabled || $LookupEnabled) {
|
||||
|
||||
$this->config->expects($this->exactly(2))
|
||||
->method('getSystemValueBool')
|
||||
->willReturnMap([
|
||||
['has_internet_connection', true, true],
|
||||
['gs.enabled', false, $GSEnabled],
|
||||
]);
|
||||
if ($GSEnabled) {
|
||||
$searchResult->expects($this->once())
|
||||
->method('addResultSet')
|
||||
->with($type, $searchParams['expectedResult'], []);
|
||||
|
||||
$this->config->expects($this->at(2))
|
||||
->method('getSystemValueBool')
|
||||
->with('has_internet_connection', true)
|
||||
->willReturn(true);
|
||||
$this->config->expects($this->at(3))
|
||||
$this->config->expects($this->once())
|
||||
->method('getSystemValue')
|
||||
->with('lookup_server', 'https://lookup.nextcloud.com')
|
||||
->willReturn($searchParams['server']);
|
||||
|
|
@ -263,12 +254,13 @@ class LookupPluginTest extends TestCase {
|
|||
$this->assertFalse($moreResults);
|
||||
}
|
||||
|
||||
|
||||
public function testSearchLookupServerDisabled() {
|
||||
$this->config->expects($this->once())
|
||||
->method('getAppValue')
|
||||
->with('files_sharing', 'lookupServerEnabled', 'yes')
|
||||
->willReturn('no');
|
||||
public function testSearchGSDisabled(): void {
|
||||
$this->config->expects($this->atLeastOnce())
|
||||
->method('getSystemValueBool')
|
||||
->willReturnMap([
|
||||
['has_internet_connection', true, true],
|
||||
['gs.enabled', false, false],
|
||||
]);
|
||||
|
||||
/** @var ISearchResult|MockObject $searchResult */
|
||||
$searchResult = $this->createMock(ISearchResult::class);
|
||||
|
|
@ -387,7 +379,6 @@ class LookupPluginTest extends TestCase {
|
|||
'label' => $fedIDs[0],
|
||||
'value' => [
|
||||
'shareType' => IShare::TYPE_REMOTE,
|
||||
'globalScale' => false,
|
||||
'shareWith' => $fedIDs[0]
|
||||
],
|
||||
'extra' => ['federationId' => $fedIDs[0]],
|
||||
|
|
@ -396,7 +387,6 @@ class LookupPluginTest extends TestCase {
|
|||
'label' => $fedIDs[1],
|
||||
'value' => [
|
||||
'shareType' => IShare::TYPE_REMOTE,
|
||||
'globalScale' => false,
|
||||
'shareWith' => $fedIDs[1]
|
||||
],
|
||||
'extra' => ['federationId' => $fedIDs[1]],
|
||||
|
|
@ -405,7 +395,6 @@ class LookupPluginTest extends TestCase {
|
|||
'label' => $fedIDs[2],
|
||||
'value' => [
|
||||
'shareType' => IShare::TYPE_REMOTE,
|
||||
'globalScale' => false,
|
||||
'shareWith' => $fedIDs[2]
|
||||
],
|
||||
'extra' => ['federationId' => $fedIDs[2]],
|
||||
|
|
@ -480,7 +469,7 @@ class LookupPluginTest extends TestCase {
|
|||
'label' => $fedIDs[0],
|
||||
'value' => [
|
||||
'shareType' => IShare::TYPE_REMOTE,
|
||||
'globalScale' => false,
|
||||
'globalScale' => true,
|
||||
'shareWith' => $fedIDs[0]
|
||||
],
|
||||
'extra' => ['federationId' => $fedIDs[0]],
|
||||
|
|
@ -489,7 +478,7 @@ class LookupPluginTest extends TestCase {
|
|||
'label' => $fedIDs[1],
|
||||
'value' => [
|
||||
'shareType' => IShare::TYPE_REMOTE,
|
||||
'globalScale' => false,
|
||||
'globalScale' => true,
|
||||
'shareWith' => $fedIDs[1]
|
||||
],
|
||||
'extra' => ['federationId' => $fedIDs[1]],
|
||||
|
|
@ -498,7 +487,7 @@ class LookupPluginTest extends TestCase {
|
|||
'label' => $fedIDs[2],
|
||||
'value' => [
|
||||
'shareType' => IShare::TYPE_REMOTE,
|
||||
'globalScale' => false,
|
||||
'globalScale' => true,
|
||||
'shareWith' => $fedIDs[2]
|
||||
],
|
||||
'extra' => ['federationId' => $fedIDs[2]],
|
||||
|
|
|
|||
Loading…
Reference in a new issue