Fixing initial load config

This commit is contained in:
Philipp Holzer 2019-07-15 08:58:37 +02:00
parent 6c68b8359d
commit 6801e8b5ab
No known key found for this signature in database
GPG key ID: D8365C3D36B77D90
2 changed files with 25 additions and 20 deletions

View file

@ -13,8 +13,10 @@ use Friendica\Model;
*/ */
class JitConfiguration extends Configuration class JitConfiguration extends Configuration
{ {
/** @var array */ /**
private $in_db; * @var array Array of already loaded db values (even if there was no value)
*/
private $db_loaded;
/** /**
* @param Cache\ConfigCache $configCache The configuration cache (based on the config-files) * @param Cache\ConfigCache $configCache The configuration cache (based on the config-files)
@ -23,17 +25,7 @@ class JitConfiguration extends Configuration
public function __construct(Cache\ConfigCache $configCache, Model\Config\Config $configModel) public function __construct(Cache\ConfigCache $configCache, Model\Config\Config $configModel)
{ {
parent::__construct($configCache, $configModel); parent::__construct($configCache, $configModel);
$this->in_db = []; $this->db_loaded = [];
// take the values of the given cache instead of loading them from the model again
$preSet = $configCache->getAll();
if (!empty($preSet)) {
foreach ($preSet as $cat => $data) {
foreach ($data as $key => $value) {
$this->in_db[$cat][$key] = true;
}
}
}
$this->load(); $this->load();
} }
@ -53,7 +45,7 @@ class JitConfiguration extends Configuration
if (!empty($config[$cat])) { if (!empty($config[$cat])) {
foreach ($config[$cat] as $key => $value) { foreach ($config[$cat] as $key => $value) {
$this->in_db[$cat][$key] = true; $this->db_loaded[$cat][$key] = true;
} }
} }
@ -68,7 +60,7 @@ class JitConfiguration extends Configuration
{ {
// if the value isn't loaded or refresh is needed, load it to the cache // if the value isn't loaded or refresh is needed, load it to the cache
if ($this->configModel->isConnected() && if ($this->configModel->isConnected() &&
(empty($this->in_db[$cat][$key]) || (empty($this->db_loaded[$cat][$key]) ||
$refresh)) { $refresh)) {
$dbvalue = $this->configModel->get($cat, $key); $dbvalue = $this->configModel->get($cat, $key);
@ -76,8 +68,9 @@ class JitConfiguration extends Configuration
if (isset($dbvalue)) { if (isset($dbvalue)) {
$this->configCache->set($cat, $key, $dbvalue); $this->configCache->set($cat, $key, $dbvalue);
unset($dbvalue); unset($dbvalue);
$this->in_db[$cat][$key] = true;
} }
$this->db_loaded[$cat][$key] = true;
} }
// use the config cache for return // use the config cache for return
@ -101,7 +94,7 @@ class JitConfiguration extends Configuration
$stored = $this->configModel->set($cat, $key, $value); $stored = $this->configModel->set($cat, $key, $value);
$this->in_db[$cat][$key] = $stored; $this->db_loaded[$cat][$key] = $stored;
return $cached && $stored; return $cached && $stored;
} }
@ -113,8 +106,8 @@ class JitConfiguration extends Configuration
{ {
$cacheRemoved = $this->configCache->delete($cat, $key); $cacheRemoved = $this->configCache->delete($cat, $key);
if (isset($this->in_db[$cat][$key])) { if (isset($this->db_loaded[$cat][$key])) {
unset($this->in_db[$cat][$key]); unset($this->db_loaded[$cat][$key]);
} }
if (!$this->configModel->isConnected()) { if (!$this->configModel->isConnected()) {

View file

@ -114,7 +114,13 @@ class JitConfigurationTest extends ConfigurationTest
->andReturn(['config' => []]) ->andReturn(['config' => []])
->once(); ->once();
// mocking one get // mocking one get without result
$this->configModel->shouldReceive('get')
->with('test', 'it')
->andReturn(null)
->once();
// mocking the data get
$this->configModel->shouldReceive('get') $this->configModel->shouldReceive('get')
->with('test', 'it') ->with('test', 'it')
->andReturn($data) ->andReturn($data)
@ -162,6 +168,12 @@ class JitConfigurationTest extends ConfigurationTest
->andReturn(['config' => []]) ->andReturn(['config' => []])
->once(); ->once();
// mocking one get without result
$this->configModel->shouldReceive('get')
->with('test', 'it')
->andReturn(null)
->once();
parent::testDeleteWithDB(); parent::testDeleteWithDB();
} }
} }