Browse Source

Merge pull request #14696 from nextcloud/backport/13401/stable15

[stable15] improve lookup server behaviour
Roeland Jago Douma 5 years ago
parent
commit
3f559dd3ec

+ 28 - 4
apps/lookup_server_connector/lib/BackgroundJobs/RetryJob.php

@@ -36,8 +36,10 @@ class RetryJob extends Job {
 	private $jobList;
 	/** @var string */
 	private $lookupServer;
-	/** @var int how much time should be between two tries (10 minutes) */
-	private $interval = 600;
+	/** @var int how much time should be between two, will be increased for each retry */
+	private $interval = 100;
+	/** @var IConfig */
+	private $config;
 
 	/**
 	 * @param IClientService $clientService
@@ -49,6 +51,7 @@ class RetryJob extends Job {
 								IConfig $config) {
 		$this->clientService = $clientService;
 		$this->jobList = $jobList;
+		$this->config = $config;
 
 		if ($config->getSystemValue('has_internet_connection', true) === false) {
 			return;
@@ -75,7 +78,7 @@ class RetryJob extends Job {
 	}
 
 	protected function run($argument) {
-		if ($argument['retryNo'] === 5 || empty($this->lookupServer)) {
+		if ($this->killBackgroundJob((int)$argument['retryNo'])) {
 			return;
 		}
 
@@ -108,6 +111,27 @@ class RetryJob extends Job {
 	 * @return bool
 	 */
 	protected function shouldRun($argument) {
-		return !isset($argument['lastRun']) || ((time() - $argument['lastRun']) > $this->interval);
+		$retryNo = (int)$argument['retryNo'];
+		$delay = $this->interval * 6 ** $retryNo;
+		return !isset($argument['lastRun']) || ((time() - $argument['lastRun']) > $delay);
+	}
+
+	/**
+	 * check if we should kill the background job
+	 *
+	 * The lookup server should no longer be contacted if:
+	 *
+	 * - max retries are reached (set to 5)
+	 * - lookup server was disabled by the admin
+	 * - no valid lookup server URL given
+	 *
+	 * @param int $retryCount
+	 * @return bool
+	 */
+	protected function killBackgroundJob($retryCount) {
+		$maxTriesReached = $retryCount >= 5;
+		$lookupServerDisabled = $this->config->getAppValue('files_sharing', 'lookupServerUploadEnabled', 'yes') !== 'yes';
+
+		return $maxTriesReached || $lookupServerDisabled || empty($this->lookupServer);
 	}
 }

+ 19 - 1
apps/lookup_server_connector/lib/UpdateLookupServer.php

@@ -46,6 +46,8 @@ class UpdateLookupServer {
 	private $jobList;
 	/** @var string URL point to lookup server */
 	private $lookupServer;
+	/** @var bool  */
+	private $lookupServerEnabled;
 
 	/**
 	 * @param AccountManager $accountManager
@@ -68,6 +70,8 @@ class UpdateLookupServer {
 			return;
 		}
 
+		$this->lookupServerEnabled = $config->getAppValue('files_sharing', 'lookupServerUploadEnabled', 'yes') === 'yes';
+
 		$this->lookupServer = $config->getSystemValue('lookup_server', 'https://lookup.nextcloud.com');
 		if(!empty($this->lookupServer)) {
 			$this->lookupServer = rtrim($this->lookupServer, '/');
@@ -79,7 +83,8 @@ class UpdateLookupServer {
 	 * @param IUser $user
 	 */
 	public function userUpdated(IUser $user) {
-		if(empty($this->lookupServer)) {
+
+		if (!$this->shouldUpdateLookupServer()) {
 			return;
 		}
 
@@ -150,4 +155,17 @@ class UpdateLookupServer {
 			);
 		}
 	}
+
+	/**
+	 * check if we should update the lookup server, we only do it if
+	 *
+	 * * we have a valid URL
+	 * * the lookup server update was enabled by the admin
+	 *
+	 * @return bool
+	 */
+	private function shouldUpdateLookupServer() {
+		return $this->lookupServerEnabled || !empty($this->lookupServer);
+	}
+
 }