Improving code handling full rebuild of a cache map
Publish PHP Package / docker (push) Successful in 6s Details

This commit is contained in:
Pavel Shevaev 2025-04-18 12:32:58 +03:00
parent 83fa074f7d
commit 1b6bddd7ea
2 changed files with 19 additions and 12 deletions

View File

@ -261,6 +261,16 @@ class ConfigCacheFileMap
return $map; return $map;
} }
function count() : int
{
return count($this->file2deps);
}
function exists(string $file) : bool
{
return isset($this->file2deps[$file]);
}
function getAffectedFiles(string $file) : array function getAffectedFiles(string $file) : array
{ {
if(!isset($this->file2deps[$file])) if(!isset($this->file2deps[$file]))

View File

@ -151,7 +151,7 @@ class ConfigManager
$affected_files = $this->_getAffectedFiles($req, $added_files, $removed_files); $affected_files = $this->_getAffectedFiles($req, $added_files, $removed_files);
//NOTE: at this poine taking into account only config files //NOTE: at this point taking into account only config files
$affected_files->filter(fn($file) => str_ends_with($file, '.conf.js')); $affected_files->filter(fn($file) => str_ends_with($file, '.conf.js'));
config_log("Affected files: {$affected_files->count()}"); config_log("Affected files: {$affected_files->count()}");
@ -163,6 +163,7 @@ class ConfigManager
); );
$update_result = self::_updateCache($update_params); $update_result = self::_updateCache($update_params);
//let's clear internal cache once the update procedure is done
$this->cache->clear(); $this->cache->clear();
$this->_updateFileMap($req, $affected_files, $added_files, $removed_files); $this->_updateFileMap($req, $affected_files, $added_files, $removed_files);
@ -213,10 +214,9 @@ class ConfigManager
if($req->mode === ConfigUpdateMode::Force) if($req->mode === ConfigUpdateMode::Force)
{ {
$added_files = $req->files->getAllFiles();
//let's rebuild the file map //let's rebuild the file map
$fs_cache_map->init($added_files); $fs_cache_map->init($req->files->getAllFiles());
config_log("File map init: ".count($added_files)); config_log("File map init: ".$fs_cache_map->count());
} }
else if($req->mode === ConfigUpdateMode::DetectChanged) else if($req->mode === ConfigUpdateMode::DetectChanged)
{ {
@ -249,11 +249,12 @@ class ConfigManager
$fs_cache_map->updateDepsForEntry($cache_entry); $fs_cache_map->updateDepsForEntry($cache_entry);
} }
if($affected_files->count() > 0 || $added_files || $removed_files) if($req->mode == ConfigUpdateMode::Force ||
$affected_files->count() > 0 ||
$added_files ||
$removed_files)
{ {
//in case of Force map was already cleared and initialized $fs_cache_map->update($added_files, $removed_files);
if($req->mode != ConfigUpdateMode::Force)
$fs_cache_map->update($added_files, $removed_files);
$this->_saveFileMap(); $this->_saveFileMap();
} }
} }
@ -296,10 +297,6 @@ class ConfigManager
foreach($affected_by_file as $dep) foreach($affected_by_file as $dep)
$affected_files->addFile($dep, unique: true); $affected_files->addFile($dep, unique: true);
} }
else
{
//TODO: in case config file was removed do we actually need to rebuild all configs?
}
} }
} }
else if($req->mode === ConfigUpdateMode::Patch) else if($req->mode === ConfigUpdateMode::Patch)