ConfigurationManager setters make system unstable
We are slowly moving our projects from LTS 4.5 to LTS 6.2 and one of the issues we recently encountered is the usage of the configuration manager's (\TYPO3\CMS\Core\Configuration\ConfigurationManager) setters (setLocalConfigurationValueByPath & setLocalConfigurationValuesByPathValuePairs). Based on the "What's new" documentation for TYPO3 6.0 (http://typo3.org/download/release-notes/whats-new/) I was under the impression that using the configuration manager's getter/setters was the "new" way to do things. However, any attempt to use these methods quickly runs into
( ! ) Catchable fatal error: Argument 1 passed to TYPO3\CMS\Core\Utility\ArrayUtility::setValueByPath() must be an array
It turns out that the setter's failure to implement any kind of locking introduces a race condition which apparently cannot be fixed (@see Markus Klein's comment https://forge.typo3.org/issues/60294#note-13).
This all begs the question, why this method is available at all. What is the purpose of providing (and documenting) an API method which introduces a known issue and makes the system unstable?
Updated by Christian Kuhn over 6 years ago
- Status changed from New to Needs Feedback
Hey Simon. I have the strong feeling you're misusing this API. The ConfigurationManager class is used to take care of LocalConfiguration file and friends. It is not meant to be called in a plugin on a regular basis (eg. in ext_tables or ext_localconf), since this would always trigger a rewrite of those files - and you definitely don't want this.
The ConfigurationManager class is for configuration management & changing only, so there shouldn't be any regular call by extensions or your setup during production use.
I wonder what you wanted to achieve in the first place?