aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/phpbb/install
diff options
context:
space:
mode:
authorMarc Alexander <admin@m-a-styles.de>2016-03-04 17:27:27 +0100
committerMarc Alexander <admin@m-a-styles.de>2016-12-03 14:23:34 +0100
commitb1596fda7f88bc0e2817a1143be6ff94ef3aae2a (patch)
treed296fcca6f9dce1913b10c85564072ff5fc3367c /phpBB/phpbb/install
parentedfc4f3efc742342a37a5d510909aece6ae4c95d (diff)
downloadforums-b1596fda7f88bc0e2817a1143be6ff94ef3aae2a.tar
forums-b1596fda7f88bc0e2817a1143be6ff94ef3aae2a.tar.gz
forums-b1596fda7f88bc0e2817a1143be6ff94ef3aae2a.tar.bz2
forums-b1596fda7f88bc0e2817a1143be6ff94ef3aae2a.tar.xz
forums-b1596fda7f88bc0e2817a1143be6ff94ef3aae2a.zip
[ticket/14492] Prevent timeouts in install & update extensions tasks
PHPBB3-14492
Diffstat (limited to 'phpBB/phpbb/install')
-rw-r--r--phpBB/phpbb/install/module/install_finish/task/install_extensions.php21
-rw-r--r--phpBB/phpbb/install/module/update_database/task/update_extensions.php20
2 files changed, 39 insertions, 2 deletions
diff --git a/phpBB/phpbb/install/module/install_finish/task/install_extensions.php b/phpBB/phpbb/install/module/install_finish/task/install_extensions.php
index eb44bb780b..b8a04685f6 100644
--- a/phpBB/phpbb/install/module/install_finish/task/install_extensions.php
+++ b/phpBB/phpbb/install/module/install_finish/task/install_extensions.php
@@ -13,6 +13,8 @@
namespace phpbb\install\module\install_finish\task;
+use phpbb\install\exception\resource_limit_reached_exception;
+
/**
* Installs extensions that exist in ext folder upon install
*/
@@ -102,7 +104,9 @@ class install_extensions extends \phpbb\install\task_base
$install_extensions = $this->iohandler->get_input('install-extensions', array());
- $available_extensions = $this->extension_manager->all_available();
+ $all_available_extensions = $this->extension_manager->all_available();
+ $i = $this->install_config->get('install_extensions_index', 0);
+ $available_extensions = array_slice($all_available_extensions, $i);
// Install extensions
foreach ($available_extensions as $ext_name => $ext_path)
@@ -133,6 +137,21 @@ class install_extensions extends \phpbb\install\task_base
// Add fail log and continue
$this->iohandler->add_log_message(array('CLI_EXTENSION_ENABLE_FAILURE', $ext_name));
}
+
+ $i++;
+
+ // Stop execution if resource limit is reached
+ if ($this->install_config->get_time_remaining() <= 0 || $this->install_config->get_memory_remaining() <= 0)
+ {
+ break;
+ }
+ }
+
+ $this->install_config->set('install_extensions_index', $i);
+
+ if ($i < sizeof($all_available_extensions))
+ {
+ throw new resource_limit_reached_exception();
}
}
diff --git a/phpBB/phpbb/install/module/update_database/task/update_extensions.php b/phpBB/phpbb/install/module/update_database/task/update_extensions.php
index 64215e2f30..24b72f7b42 100644
--- a/phpBB/phpbb/install/module/update_database/task/update_extensions.php
+++ b/phpBB/phpbb/install/module/update_database/task/update_extensions.php
@@ -13,6 +13,7 @@
namespace phpbb\install\module\update_database\task;
+use phpbb\install\exception\resource_limit_reached_exception;
use phpbb\install\helper\container_factory;
use phpbb\install\helper\config;
use phpbb\install\helper\iohandler\iohandler_interface;
@@ -143,7 +144,9 @@ class update_extensions extends task_base
}
}
- $available_extensions = $this->extension_manager->all_available();
+ $all_available_extensions = $this->extension_manager->all_available();
+ $i = $this->install_config->get('update_extensions_index', 0);
+ $available_extensions = array_slice($all_available_extensions, $i);
// Update available extensions
foreach ($available_extensions as $ext_name => $ext_path)
@@ -190,6 +193,21 @@ class update_extensions extends task_base
$this->iohandler->add_log_message('CLI_EXTENSION_ENABLE_FAILURE', array($ext_name));
}
}
+
+ $i++;
+
+ // Stop execution if resource limit is reached
+ if ($this->install_config->get_time_remaining() <= 0 || $this->install_config->get_memory_remaining() <= 0)
+ {
+ break;
+ }
+ }
+
+ $this->install_config->set('update_extensions_index', $i);
+
+ if ($i < sizeof($all_available_extensions))
+ {
+ throw new resource_limit_reached_exception();
}
}