<HTML><BODY>Да, спасибо.<br>До переименования зоны я уже догадался.<br>Но не сразу заметил. Экспериментировал с довольно сложным SSI, пришлось часто заглядывать в кэш, многоуровневый оказался неудобен, переключил в один уровень, вот только тогда. Потом уже полез в дебаг.<br><br>Себе в шпаргалку на заметку. Но все-таки, неплохо было бы сказать в доке о рестарте (ИМХО).<br><br><br><blockquote style="border-left:1px solid #0857A6; margin:10px; padding:0 0 0 10px;">
        Пятница,  9 ноября 2018, 16:34 +03:00 от Maxim Dounin <mdounin@mdounin.ru>:<br>
        <br>
        <div id="">






<div class="js-helper js-readmsg-msg">
        <style type="text/css"></style>
        <div>
                <base target="_self" href="https://e.mail.ru/">
                
            <div id="style_15417704540000000121_BODY">Hello!<br>
<br>
On Fri, Nov 09, 2018 at 10:18:30AM +0300, CoDDoC wrote:<br>
<br>
> nginx-debug -v<br>
> nginx version: nginx/1.15.6<br>
> <br>
> Специально обновился, до этого была версия 1.13.12, там то же самое.<br>
> Изменение levels в proxy_cache_path применяется только после полного рестарта (service nginx-debug restart)<br>
> nginx-debug -s reload ожидаемого результата не дает<br>
> <br>
> Как воспроизвести:<br>
> 1. В контексте http:<br>
> proxy_cache_path /var/www/html/cache levels=1:2:1 use_temp_path=off keys_zone=testcache:5m inactive=10m max_size=50m;<br>
> 2. service nginx-debug restart<br>
> 3. В error.log:<br>
> cache manager process <PID> exited with code 0<br>
> start cache manager process <PID><br>
> start cache loader process <PID><br>
> 4. Делаю запрос в локейшен, для которого активирована зона testcache<br>
> 5. Получаю ожидаемое:<br>
> /var/www/html/cache/3/05/8/e62d74fdc44e220f0225168323c28053<br>
> 6. Удаляю ветку '3/05/8/e62d74fdc44e220f0225168323c28053'<br>
> <br>
> 7. Меняю levels 1:2:1 -> levels 1<br>
> 8. nginx-debug -s reload<br>
> 9. В error.log:<br>
> cache "testcache" had previously different levels<br>
> 10. Запрос в тот же локейшен дает тот же результат:<br>
> /var/www/html/cache/3/05/8/e62d74fdc44e220f0225168323c28053<br>
> 11. Опять удаляю '3/05/8/e62d74fdc44e220f0225168323c28053'<br>
> 12. service nginx-debug restart<br>
> 13. В error.log:<br>
> cache manager process <PID> exited with code 0<br>
> start cache manager process <PID><br>
> start cache loader process <PID><br>
> 14. Запрос в тот же локейшен опять дает ожидаемое:<br>
> /var/www/html/cache/3/e62d74fdc44e220f0225168323c28053<br>
> <br>
> Если это нормальное поведение, может, имеет смысл как-то отметить в документации необходимость рестарта?<br>
<br>
Это нормальное поведение.<br>
<br>
Многие вещи, работа с которыми происходит через зоны разделяемой <br>
памяти из всех процессов, поменять без пересоздания зоны <br>
разделяемой памяти - нельзя.  Наиболее банальный пример - нельзя <br>
поменять собственно размер зоны разделяемой памяти.<br>
<br>
В чуть более сложных случаях - нельзя менять параметры, которые <br>
меняют поведение рабочих процессов на несовместимое с другими <br>
рабочими процессами или с уже имеющейся в разделяемой памяти <br>
информацией.  В частности, levels в кэше - определяют, в каком <br>
именно виде лежат данные на диске, и каким именно файлам на диске <br>
соответствуют элементы в разделяемой памяти.  То есть поменять <br>
levels просто так нельзя - фактически, надо выкинуть из памяти всю <br>
информацию, которая становится негодной, и презагрузить содержимое <br>
кэша заново.  Кроме того, всё ещё осложняется тем, что у нас есть <br>
старые рабочи процессы, которые могут работать неопределённо <br>
долго, и эти рабочие процессы предполагают старое значение levels, то <br>
есть если мы таки выкинем и перезагрузим содержимое разделяемой <br>
памяти - начнут вести себя некорретно они.<br>
<br>
Чтобы подобных проблем не возникало - при применении новой <br>
конфигурации nginx проверяет, что конфигурация совместима с тем, <br>
как использовались зоны разделяемой памяти ранее.  И если <br>
обнаруживает, что попытались поменять что-то, что менять нельзя - <br>
логгирует соответствующую ошибку в error log, и откатывается к <br>
старой конфигурации.<br>
<br>
Если тем не менее хочется соответствующие параметры поменять, то <br>
это можно сделать одним из следующих способов:<br>
<br>
- Переименовать зону разделяемой памяти (в случае кэша - лучше <br>
  при этом заодно задать новый путь), и использовать её в <br>
  конфигурации с новыми параметрами.  При таком изменении <br>
  конфликтов между старой и новой конфигурацией не будет, можно <br>
  будет сделать reload.  И при этом сохранится содержимое <br>
  остальных зон разделяемой памяти, конфигурацию которых не меняли.<br>
<br>
- Сделать binary upgrade.  При этом все зоны разделяемой памяти будут <br>
  созданы заново, однако потерь запросов не будет.<br>
<br>
- Ну и собственно сделать restart.  Всё тоже заработает с новой <br>
  конфигурацией, но смысла в этом приблизительно никакого - binary <br>
  upgrade даст тот же результат, но без потери запросов.<br>
<br>
-- <br>
Maxim Dounin<br>
<a href="http://mdounin.ru/" target="_blank">http://mdounin.ru/</a><br>
_______________________________________________<br>
nginx-ru mailing list<br>
<a href="mailto:nginx-ru@nginx.org">nginx-ru@nginx.org</a><br>
<a href="http://mailman.nginx.org/mailman/listinfo/nginx-ru" target="_blank">http://mailman.nginx.org/mailman/listinfo/nginx-ru</a><br data-mce-bogus="1"></div>
            
        
                <base target="_self" href="https://e.mail.ru/">
        </div>

        
</div>


</div>
</blockquote>
<br>
<br>--<br></BODY></HTML>