XF 2.1 XenForo code_cache directory is continuously throwing errors

Jawsh

Active member
I am doing add-on development and after XF2.1.3's upgrade there is a noticeable issue where the code cache appears to be caching errors continuously and there's no way to force a recache.

Code:
#0 src/XF/Template/Templater.php(613): XF\Template\Templater->getTemplateDataFromSource('public', 'hb_chat.less')
#1 src/XF/Template/Templater.php(1257): XF\Template\Templater->getTemplateData('public', 'hb_chat.less', false)
#2 src/XF/CssRenderer.php(313): XF\Template\Templater->isKnownTemplate('hb_chat.less')
#3 src/XF/CssRenderer.php(250): XF\CssRenderer->renderTemplate('public:hb_chat....', NULL)
#4 src/XF/CssRenderer.php(116): XF\CssRenderer->renderTemplates(Array, Array, Array)
#5 src/XF/CssWriter.php(53): XF\CssRenderer->render(Array)
#6 css.php(30): XF\CssWriter->run(Array, 1, 1, 'bc38b08299e2bfe...')
#7 {main}

An exception occurred: [ParseError] syntax error, unexpected ''@_attach-thumbSize: xf-option' (T_ENCAPSED_AND_WHITESPACE) in internal_data/code_cache/templates/l1/s1/public/hb_chat.less.php on line 6
  1. XF\Template\Templater->getTemplateDataFromSource() in src/XF/Template/Templater.php at line 613
  2. XF\Template\Templater->getTemplateData() in src/XF/Template/Templater.php at line 1257
  3. XF\Template\Templater->isKnownTemplate() in src/XF/CssRenderer.php at line 313
  4. XF\CssRenderer->renderTemplate() in src/XF/CssRenderer.php at line 250
  5. XF\CssRenderer->renderTemplates() in src/XF/CssRenderer.php at line 116
  6. XF\CssRenderer->render() in src/XF/CssWriter.php at line 53
  7. XF\CssWriter->run() in css.php at line 30

I've tried deleting these files, deleting the entire /code_cache/ directory, but the only thing that works is changing the $config['cache'] settings -- and that only works temporarily. It will then cache another error, and I have to change it again. This is extremely obnoxious and I'm finding myself doing it multiple times an hour. I just wasted 30 minutes trying to find a LESS error that ruined all custom styling, only to realize the .css template itself is throwing 500 errors due to this bug.

I have development mode enabled and caching off by default. There should be no code caching.
 
This seems more like a support issue than a bug to me.

$config['cache'] does have nothing to do with code cache - it's only for caching data and sessions whereas code_cache is for compiled PHP code (templates, navigation, etc.).

Data/Session/Guest page caching is optional and can be turned off (it's not enabled by default anyway), the code cache is mandatory.

What's the content of hb_chat.less?

It might be incompatible, eg. use non-existing properties.
 
It's not just that file, and I don't know what exactly gets it to work. I also sometimes fraudulently edit the "// FROM HASH: 9e7b251425cd77f7d18a28b2ecfff49d" line to try and trick it, which appears to be what works. I will post any more errors I get. It's not something I'm doing.
 
An exception occurred: [ParseError] syntax error, unexpected '}', expecting end of file in internal_data/code_cache/templates/l1/s1/public/hb_chat_block.php on line 25

  1. XF\Template\Templater->getTemplateDataFromSource() in src/XF/Template/Templater.php at line 613
  2. XF\Template\Templater->getTemplateData() in src/XF/Template/Templater.php at line 566
  3. XF\Template\Templater->getTemplateCode() in src/XF/Template/Templater.php at line 1314
  4. XF\Template\Templater->renderTemplate() in src/XF/Template/Templater.php at line 1388
  5. XF\Template\Templater->includeTemplate() in internal_data/code_cache/templates/l1/s1/public/hb_chat_forum_view.php at line 16
  6. XF\Template\Templater->{closure}() in src/XF/Template/Templater.php at line 1315
  7. XF\Template\Templater->renderTemplate() in src/XF/Template/Templater.php at line 1388
  8. XF\Template\Templater->includeTemplate() in internal_data/code_cache/templates/l1/s1/public/forum_view.php at line 99
  9. XF\Template\Templater->{closure}() in src/XF/Template/Templater.php at line 1315
  10. XF\Template\Templater->renderTemplate() in src/XF/Template/Template.php at line 24
  11. XF\Template\Template->render() in src/XF/Mvc/Renderer/Html.php at line 48
  12. XF\Mvc\Renderer\Html->renderView() in src/XF/Mvc/Dispatcher.php at line 418
  13. XF\Mvc\Dispatcher->renderView() in src/XF/Mvc/Dispatcher.php at line 400
  14. XF\Mvc\Dispatcher->renderReply() in src/XF/Mvc/Dispatcher.php at line 360
  15. XF\Mvc\Dispatcher->render() in src/XF/Mvc/Dispatcher.php at line 53
  16. XF\Mvc\Dispatcher->run() in src/XF/App.php at line 2178
  17. XF\App->run() in src/XF.php at line 390
  18. XF::runApp() in index.php at line 20
Code:
<?php
// FROM HASH: e06c4be86cb669ba22940a760953fd45
return array('macros' => array(), 'code' => function($__templater, array $__vars)
{
    $__finalCompiled = '';
    if ($__vars['rooms']) {
        $__finalCompiled .= '
<!--googleoff: all-->
<aside class="block block--hb-chat hb-chat--widget ' . ($__vars['chatPassive'] ? 'hb-chat--passive' : '') . '" data-xf-init="chat">
    <div class="block-container hb-chat--block-container">
        <h2 class="block-header hb-chat--block-header">
            <a href="' . $__templater->fn('link', array('chat', ($__vars['activeRoom'] ?: false), ), true) . '" rel="nofollow">' . 'Chat' . '</a>
        </h2>
        <div class="block-body hb-chat--block-body">
            ' . $__templater->includeTemplate('hb_chat_tabs', $__vars) . '
            ' . $__templater->includeTemplate('hb_chat_content', $__vars) . '
        </div>
    </div>
</aside>
<!--googleon: all-->
';
    }
    return $__finalCompiled;
});

That doesn't look like my problem. I changed the hash and saved. Then the page works again.
 
Hmm, are you using opcache?

If so, what's the value of settings
  • opcache.file_update_protection
  • opcache.validate_timestamps
  • opcache.revalidate_freq
Whats the timestamp difference beween filemtime of the file and the logged exception?
 
I'm running PHP-FPM 7.3.4-2 without any changes to the ini.

1564248386828.webp

Code:
[opcache]
; Determines if Zend OPCache is enabled
;opcache.enable=1

; Determines if Zend OPCache is enabled for the CLI version of PHP
;opcache.enable_cli=0

; The OPcache shared memory storage size.
;opcache.memory_consumption=128

; The amount of memory for interned strings in Mbytes.
;opcache.interned_strings_buffer=8

; The maximum number of keys (scripts) in the OPcache hash table.
; Only numbers between 200 and 1000000 are allowed.
;opcache.max_accelerated_files=10000

; The maximum percentage of "wasted" memory until a restart is scheduled.
;opcache.max_wasted_percentage=5

; When this directive is enabled, the OPcache appends the current working
; directory to the script key, thus eliminating possible collisions between
; files with the same name (basename). Disabling the directive improves
; performance, but may break existing applications.
;opcache.use_cwd=1

; When disabled, you must reset the OPcache manually or restart the
; webserver for changes to the filesystem to take effect.
;opcache.validate_timestamps=1

; How often (in seconds) to check file timestamps for changes to the shared
; memory storage allocation. ("1" means validate once per second, but only
; once per request. "0" means always validate)
;opcache.revalidate_freq=2

; Enables or disables file search in include_path optimization
;opcache.revalidate_path=0

; If disabled, all PHPDoc comments are dropped from the code to reduce the
; size of the optimized code.
;opcache.save_comments=1

; Allow file existence override (file_exists, etc.) performance feature.
;opcache.enable_file_override=0

; A bitmask, where each bit enables or disables the appropriate OPcache
; passes
;opcache.optimization_level=0x7FFFBFFF

;opcache.dups_fix=0

; The location of the OPcache blacklist file (wildcards allowed).
; Each OPcache blacklist file is a text file that holds the names of files
; that should not be accelerated. The file format is to add each filename
; to a new line. The filename may be a full path or just a file prefix
; (i.e., /var/www/x  blacklists all the files and directories in /var/www
; that start with 'x'). Line starting with a ; are ignored (comments).
;opcache.blacklist_filename=

; Allows exclusion of large files from being cached. By default all files
; are cached.
;opcache.max_file_size=0

; Check the cache checksum each N requests.
; The default value of "0" means that the checks are disabled.
;opcache.consistency_checks=0

; How long to wait (in seconds) for a scheduled restart to begin if the cache
; is not being accessed.
;opcache.force_restart_timeout=180

; OPcache error_log file name. Empty string assumes "stderr".
;opcache.error_log=

; All OPcache errors go to the Web server log.
; By default, only fatal errors (level 0) or errors (level 1) are logged.
; You can also enable warnings (level 2), info messages (level 3) or
; debug messages (level 4).
;opcache.log_verbosity_level=1

; Preferred Shared Memory back-end. Leave empty and let the system decide.
;opcache.preferred_memory_model=

; Protect the shared memory from unexpected writing during script execution.
; Useful for internal debugging only.
;opcache.protect_memory=0

; Allows calling OPcache API functions only from PHP scripts which path is
; started from specified string. The default "" means no restriction
;opcache.restrict_api=

; Mapping base of shared memory segments (for Windows only). All the PHP
; processes have to map shared memory into the same address space. This
; directive allows to manually fix the "Unable to reattach to base address"
; errors.
;opcache.mmap_base=

; Enables and sets the second level cache directory.
; It should improve performance when SHM memory is full, at server restart or
; SHM reset. The default "" disables file based caching.
;opcache.file_cache=

; Enables or disables opcode caching in shared memory.
;opcache.file_cache_only=0

; Enables or disables checksum validation when script loaded from file cache.
;opcache.file_cache_consistency_checks=1

; Implies opcache.file_cache_only=1 for a certain process that failed to
; reattach to the shared memory (for Windows only). Explicitly enabled file
; cache is required.
;opcache.file_cache_fallback=1

; Enables or disables copying of PHP code (text segment) into HUGE PAGES.
; This should improve performance, but requires appropriate OS configuration.
;opcache.huge_code_pages=1

; Validate cached file permissions.
;opcache.validate_permission=0

; Prevent name collisions in chroot'ed environment.
;opcache.validate_root=0

; If specified, it produces opcode dumps for debugging different stages of
; optimizations.
;opcache.opt_debug_level=0
 
Back
Top Bottom