<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>29236</bug_id>
          
          <creation_ts>2013-07-29 14:17:12 +0400</creation_ts>
          <short_desc>Некорректная остановка squid</short_desc>
          <delta_ts>2013-08-18 01:08:52 +0400</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>squid</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Moskalenko">mav</reporter>
          <assigned_to name="Alexey Shabalin">shaba</assigned_to>
          <cc>egori</cc>
    
    <cc>led</cc>
    
    <cc>shaba</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>141876</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Moskalenko">mav</who>
    <bug_when>2013-07-29 14:17:12 +0400</bug_when>
    <thetext>В init-скрипте squid останавливается командой &quot;stop_daemon --pidfile &quot;$PIDFILE&quot; --lockfile &quot;$LOCKFILE&quot; --expect-user squid -- $SQUID&quot;, из-за чего при повторном запуске он заново проверяет свой кэш. В процессе проверки squid не обслуживает запросы пользователей, а при достаточно большом объеме кэша проверка занимает значительное время (десятки минут).
Вместо этого squid рекомендуется останавливать командой squid -k shutdown (в .service-файле для systemd, кстати, именно так и сделано) - при этом состояние кэша записывается на диск корректно и squid начинает работать без его проверки при старте.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141886</commentid>
    <comment_count>1</comment_count>
    <who name="">led</who>
    <bug_when>2013-07-30 08:16:05 +0400</bug_when>
    <thetext>В 3.2.13-alt2 вроде бы исправил.

Когда дойдёт до репозитория посмотрите, пожалуйста, устраивает ли такое поведение (stop и restart)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141890</commentid>
    <comment_count>2</comment_count>
    <who name="Repository Robot">repository-robot</who>
    <bug_when>2013-07-30 11:26:36 +0400</bug_when>
    <thetext>squid-3.2.13-alt2 -&gt; sisyphus:

* Tue Jul 30 2013 Led &lt;led@altlinux&gt; 3.2.13-alt2
- squid.init: fixed stopping service (ALT#29236)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141936</commentid>
    <comment_count>3</comment_count>
    <who name="Alex Moskalenko">mav</who>
    <bug_when>2013-07-31 13:54:03 +0400</bug_when>
    <thetext>Спасибо, поведение сильно лучше, чем раньше. :) Есть пара мыслей по этому поводу:

1. Есть смысл ввести обработку SQUID_SHUTDOWN_TIMEOUT из /etc/sysconfig/squid. В текущем варианте, если процесс squid помирать откажется (по разным причинам - сбой диска, например), мы получим бесконечное ожидание при его завершении. Предлагаю ждать определенное время, настраиваемое в /etc/sysconfig/squid.
2. Возможно, есть смысл обработать cache_effective_user из /etc/squid/squid.conf аналогично pid-файлу, и использовать полученное значение, вместо жесткого задания в squid.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142090</commentid>
    <comment_count>4</comment_count>
      <attachid>5906</attachid>
    <who name="Alex Moskalenko">mav</who>
    <bug_when>2013-08-14 15:36:54 +0400</bug_when>
    <thetext>Created attachment 5906
Патч на squid.init

Вариант патча для squid.init, реализующий таймаут при остановке и обработку cache_effective_user</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142092</commentid>
    <comment_count>5</comment_count>
    <who name="Alex Moskalenko">mav</who>
    <bug_when>2013-08-14 15:38:22 +0400</bug_when>
    <thetext>Переоткрою багу, так как думаю, что обработка таймаута при остановке squid все-таки нужна.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142096</commentid>
    <comment_count>6</comment_count>
    <who name="">led</who>
    <bug_when>2013-08-14 19:09:41 +0400</bug_when>
    <thetext>(В ответ на комментарий №4)
&gt; Created an attachment (id=5906) [details]
&gt; Патч на squid.init
&gt; 
&gt; Вариант патча для squid.init, реализующий таймаут при остановке и обработку
&gt; cache_effective_user

С SQUIDUSER - согласен.
С SQUID_SHUTDOWN_TIMEOUT=60 - не очень.

Таймаут задаётся в конфиге параметром shutdown_lifetime - его и нужно использовать (или дефолтные 30 секунд, если не задан), а не абстрактные 60 секунд. Плюс 5 секунд накидываем сверху &quot;на всякий случай&quot; (по тестам получается, что нужно сверх 1-3 секунды).

См. http://git.altlinux.org/people/led/packages/?p=squid.git;a=commit;h=89d9197e7d5217a775c3264f63d0a338165f266b

Ну и следующий за ним http://git.altlinux.org/people/led/packages/?p=squid.git;a=commit;h=9b5cb51a1c09333a780686a3ace00bd375c12e6b в котором опять всё упрощаем и используем для остановки по таймауту стандартный stop_daemon(). При этом, если не дождались (почему-то), процесс прибивается с -9.

Если конструктивных возражений не будет, этот вариант и пойдёт на сборку.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142097</commentid>
    <comment_count>7</comment_count>
    <who name="Alex Moskalenko">mav</who>
    <bug_when>2013-08-14 19:19:11 +0400</bug_when>
    <thetext>По-моему, в http://git.altlinux.org/people/led/packages/?p=squid.git;a=commit;h=9b5cb51a1c09333a780686a3ace00bd375c12e6b все упростили настолько, что потеряли собственно цель - гасить squid с помощью squid -k shutdown. :)

Предлагаю &quot;упростить&quot; только цикл остановки по таймауту, а функцию stop() начать с чего-то типа
if start-stop-daemon -q --pid &quot;$PIDFILE&quot; --user $SQUID_USER --stop --test &gt;/dev/null; then
  msg_stopping $&quot;squid&quot;
  $SQUID -f &quot;$SQUID_CONF&quot; -k shutdown
  *** далее остановка по таймауту ***
fi</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142098</commentid>
    <comment_count>8</comment_count>
    <who name="">led</who>
    <bug_when>2013-08-14 19:25:50 +0400</bug_when>
    <thetext>(В ответ на комментарий №7)
&gt; По-моему, в
&gt; http://git.altlinux.org/people/led/packages/?p=squid.git;a=commit;h=9b5cb51a1c09333a780686a3ace00bd375c12e6b
&gt; все упростили настолько, что потеряли собственно цель - гасить squid с помощью
&gt; squid -k shutdown. :)

stop_daemon() делает ровно то же, что и &quot;squid -k shutdown&quot; - посылает процессу с указанным pid&apos;ом сигнал TERM. Просто без --retry он, не дожидаясь, посылал сразу же KILL.
Поэтому разницы никакой, зато на порядок проще и &quot;стандартнее&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142099</commentid>
    <comment_count>9</comment_count>
    <who name="Alex Moskalenko">mav</who>
    <bug_when>2013-08-14 19:38:44 +0400</bug_when>
    <thetext>(В ответ на комментарий №8)
&gt; stop_daemon() делает ровно то же, что и &quot;squid -k shutdown&quot; - посылает процессу
&gt; с указанным pid&apos;ом сигнал TERM. Просто без --retry он, не дожидаясь, посылал
&gt; сразу же KILL.
&gt; Поэтому разницы никакой, зато на порядок проще и &quot;стандартнее&quot;.

Если так - тогда возражений нет.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142100</commentid>
    <comment_count>10</comment_count>
    <who name="Repository Robot">repository-robot</who>
    <bug_when>2013-08-14 21:38:43 +0400</bug_when>
    <thetext>squid-3.2.13-alt3 -&gt; sisyphus:

* Wed Aug 14 2013 Led &lt;led@altlinux&gt; 3.2.13-alt3
- squid.init: use config values for shutdown timeout and effective squid user
  (ALT#29236)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142238</commentid>
    <comment_count>11</comment_count>
    <who name="Alex Moskalenko">mav</who>
    <bug_when>2013-08-16 16:27:36 +0400</bug_when>
    <thetext>(В ответ на комментарий №6)
&gt; (В ответ на комментарий №4)
&gt; С SQUID_SHUTDOWN_TIMEOUT=60 - не очень.
&gt; 
&gt; Таймаут задаётся в конфиге параметром shutdown_lifetime - его и нужно
&gt; использовать (или дефолтные 30 секунд, если не задан), а не абстрактные 60
&gt; секунд. Плюс 5 секунд накидываем сверху &quot;на всякий случай&quot; (по тестам
&gt; получается, что нужно сверх 1-3 секунды).
 
А как Вы считаете, не следует ли абстрактные 5 секунд, накинутые сверху, заменить переменной типа SQUID_EXTRA_SHUTDOWN_TIMEOUT (вместо SQUID_SHUTDOWN_TIMEOUT, которую вообще убрать из /etc/sysconfig/squid), и дать возможность настраивать эти &quot;на всякий случай накидываемые&quot; секунды, с умолчанием в те же 5 секунд например? Случаи разные могут быть, 5 секунд может и не хватить (пример - параллельная остановка нескольких контейнеров OpenVZ, squid в одном из них. 5 секунд может не хватить для корректной остановки).

PS Состояние баги не меняю, так как она таки RESOLVED. Если этот пакет скопировать в p7, то я его протестирую и базу закрою/переоткрою.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142240</commentid>
    <comment_count>12</comment_count>
    <who name="">led</who>
    <bug_when>2013-08-16 17:53:05 +0400</bug_when>
    <thetext>(В ответ на комментарий №11)

http://git.altlinux.org/people/led/packages/?p=squid.git;a=commit;h=5b12e87c8a54916050aa3ce675ebe844c6c15fd2

* Fri Aug 16 2013 Led &lt;led@altlinux.ru&gt; 3.2.13-alt4
- squid.init: made SQUID_EXTRA_SHUTDOWN_TIMEOUT configurable</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142250</commentid>
    <comment_count>13</comment_count>
    <who name="Alex Moskalenko">mav</who>
    <bug_when>2013-08-18 01:08:52 +0400</bug_when>
    <thetext>Спасибо, работает замечательно.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5906</attachid>
            <date>2013-08-14 15:36:54 +0400</date>
            <delta_ts>2013-08-14 15:36:54 +0400</delta_ts>
            <desc>Патч на squid.init</desc>
            <filename>squid.init.patch</filename>
            <type>text/plain</type>
            <size>1698</size>
            <attacher name="Alex Moskalenko">mav</attacher>
            
              <data encoding="base64">LS0tIHNxdWlkLmluaXQub2xkCTIwMTMtMDctMzEgMTM6Mzg6NDUuNjQzMDg5MjgxICswNDAwCisr
KyBzcXVpZC5pbml0CTIwMTMtMDgtMTQgMTU6MDk6MDYuMDE0OTQxNzAyICswNDAwCkBAIC0yOSw2
ICsyOSw3IEBACiAKIFNRVUlEPS91c3Ivc2Jpbi9zcXVpZAogU1FVSURfVUxJTUlUPTQwOTYKK1NR
VUlEX1NIVVRET1dOX1RJTUVPVVQ9NjAKIFNRVUlEX0NPTkY9Ii9ldGMvc3F1aWQvc3F1aWQuY29u
ZiIKIAogIyBPdmVyd3JpdGUgc29tZXRoaW5nCkBAIC0zOSw2ICs0MCw4IEBACiBMT0NLRklMRT0v
dmFyL2xvY2svc3Vic3lzL3NxdWlkCiBQSURGSUxFPSIkKHNlZCAtcm4gJy9eW1s6Ymxhbms6XV0q
cGlkX2ZpbGVuYW1lW1s6Ymxhbms6XV0vcy9eW1s6Ymxhbms6XV0qcGlkX2ZpbGVuYW1lW1s6Ymxh
bms6XV0rKFteWzpibGFuazpdXSkrW1s6Ymxhbms6XV0qJC9cMS8nICIkU1FVSURfQ09ORiIpIgog
UElERklMRT0iJHtQSURGSUxFOi0vdmFyL3J1bi9zcXVpZC5waWR9IgorU1FVSURVU0VSPSIkKHNl
ZCAtcm4gJy9eW1s6Ymxhbms6XV0qY2FjaGVfZWZmZWN0aXZlX3VzZXJbWzpibGFuazpdXS9zL15b
WzpibGFuazpdXSpjYWNoZV9lZmZlY3RpdmVfdXNlcltbOmJsYW5rOl1dKyhbXls6Ymxhbms6XV0p
K1tbOmJsYW5rOl1dKiQvXDEvJyAiJFNRVUlEX0NPTkYiKSIKK1NRVUlEVVNFUj0iJHtTUVVJRFVT
RVI6LXNxdWlkfSIKIFJFVFZBTD0wCiAKIHN0YXJ0KCkKQEAgLTYxLDE0ICs2NCwyMSBAQAogCiBz
dG9wKCkKIHsKLQlsb2NhbCBwPSQoY2F0ICIkUElERklMRSIgMj4vZGV2L251bGwpCi0JaWYgc3Rh
cnQtc3RvcC1kYWVtb24gLXEgLS1waWQgIiRQSURGSUxFIiAtLXVzZXIgc3F1aWQgLS1zdG9wIC0t
dGVzdCA+L2Rldi9udWxsOyB0aGVuCisJbG9jYWwgcD0kKGNhdCAiJFBJREZJTEUiIDI+L2Rldi9u
dWxsKSB0CisJaWYgc3RhcnQtc3RvcC1kYWVtb24gLXEgLS1waWQgIiRQSURGSUxFIiAtLXVzZXIg
JFNRVUlEVVNFUiAtLXN0b3AgLS10ZXN0ID4vZGV2L251bGw7IHRoZW4KIAkJbXNnX3N0b3BwaW5n
IHNxdWlkCiAJCSRTUVVJRCAtZiAiJFNRVUlEX0NPTkYiIC1rIHNodXRkb3duCiAJCVJFVFZBTD0k
PwogCQlpZiBbICRSRVRWQUwgPSAwIF07IHRoZW4KLQkJCXdoaWxlIFsgIngkKExBTkc9QyBzdGF0
IC1jICIlVSAlRiIgL3Byb2MvJHAgMj4vZGV2L251bGwpIiA9ICJ4c3F1aWQgZGlyZWN0b3J5IiBd
OyBkbworCQkJdD0wCisJCQl3aGlsZSBbICJ4JChMQU5HPUMgc3RhdCAtYyAiJVUgJUYiIC9wcm9j
LyRwIDI+L2Rldi9udWxsKSIgPSAieCRTUVVJRFVTRVIgZGlyZWN0b3J5IiBdOyBkbwogCQkJCXNs
ZWVwIDEKKwkJCQlpZiBbICR0IC1nZSAkU1FVSURfU0hVVERPV05fVElNRU9VVCBdOyB0aGVuCisJ
CQkJCWVjaG8gLW4gInRpbWVvdXQhIgorCQkJCQlmYWlsdXJlCisJCQkJCXJldHVybiAxCisJCQkJ
ZmkKKwkJCQlsZXQgdD0kdCsxCiAJCQlkb25lCiAJCQlybSAtZiAiJExPQ0tGSUxFIgogCQkJc3Vj
Y2VzcwpAQCAtMTIwLDcgKzEzMCw3IEBACiAJCVsgLWUgIiRMT0NLRklMRSIgXSAmJiByZWxvYWQK
IAkJOzsKIAlzdGF0dXMpCi0JCXN0YXR1cyAtLXBpZGZpbGUgIiRQSURGSUxFIiAtLWV4cGVjdC11
c2VyIHNxdWlkIHNxdWlkCisJCXN0YXR1cyAtLXBpZGZpbGUgIiRQSURGSUxFIiAtLWV4cGVjdC11
c2VyICRTUVVJRFVTRVIgc3F1aWQKIAkJUkVUVkFMPSQ/CiAJCTs7CiAJKikK
</data>

          </attachment>
      

    </bug>

</bugzilla>