1. 24 Feb, 2021 3 commits
  2. 23 Feb, 2021 2 commits
    • Dridi Boukelmoune's avatar
      pool: Wait when we run out of workers · 68727334
      Dridi Boukelmoune authored
      Since the removal of dry signals, pools will spin when they run out of
      threads and increment MAIN.threads_limited at a very high rate. That
      spike in CPU consumption will also have detrimental effects on useful
      tasks.
      
      This change introduces a 1s delay when the pool is saturated. This
      allows to periodically exercise the watchdog check. We could wait until
      the watchdog times out but we would also miss potential updates to the
      thread_pool_watchdog parameter.
      
      To avoid spurious increments of MAIN.threads_limited we only take task
      submissions into account and ignore timeouts of the condvar.
      
      Refs #2942
      Refs #3531
      68727334
    • Poul-Henning Kamp's avatar
      Add missing X-ref · fbee34a6
      Poul-Henning Kamp authored
      fbee34a6
  3. 22 Feb, 2021 11 commits
  4. 21 Feb, 2021 1 commit
    • Nils Goroll's avatar
      Make threads_limited counter accurate · 2bd5d2ad
      Nils Goroll authored
      In pool_herder(), we do as much work as possible outside the pool
      mutex. In particular, we check if we need to breed more threads, then
      we do more checks, and finally we aquire the lock and either go sleep
      or increase the threads_limited counter if, at that point, lqueue is
      non-zero.
      
      Yet it could have increased since we last checked, and there is
      nothing wrong with that, we will breed a new thread in the next
      iteration of the loop.
      
      Increase threads_limited only if we would not bread a new thread right
      away.
      
      Fixes #3531
      2bd5d2ad
  5. 20 Feb, 2021 1 commit
  6. 18 Feb, 2021 1 commit
  7. 17 Feb, 2021 5 commits
  8. 16 Feb, 2021 5 commits
  9. 15 Feb, 2021 9 commits
    • Guillaume Quintard's avatar
      [cci] download fixed package in /tmp · 47a9ae00
      Guillaume Quintard authored
      47a9ae00
    • Poul-Henning Kamp's avatar
    • Poul-Henning Kamp's avatar
      49f4f916
    • Poul-Henning Kamp's avatar
      Extend -p(ass) mode also to argv mode. · eb3c0e11
      Poul-Henning Kamp authored
      eb3c0e11
    • Guillaume Quintard's avatar
      [cci] work around glibc bug · 1d5c0aae
      Guillaume Quintard authored
      1d5c0aae
    • Nils Goroll's avatar
      Enable calling a dynamic sub · 7ec28f1a
      Nils Goroll authored
      that is,
      
      	call vmod.returning_sub();
      
      in VCL.
      
      Background:
      
      The existing
      
      	call sub;
      
      is special in that it instantiates "sub", if it does not exist
      already, enabling use-before-definition semantics.
      
      The doctrine of this change is to preserve this behaviour and to not
      make existing, static calls any less efficient.
      
      Implementation:
      
      To support calling both literal SUBs as well as SUB expressions, we
      peek into the symbol table to check if the called expression is a
      function, based on the knowledge that, as of now, only functions can
      have a non-literal SUB return. We also know that no other expression
      can yield a SUB. So if peeking ahead tells us that a function follows,
      we call into expression evaluation.
      
      Otherwise, we expect a literal SUB as before.
      
      Null check:
      
      For dynamic SUB calls from vmods via VRT_call(), we require the SUB
      argument be non-NULL. But we can not for call: To signal error with a
      SUB return, a vmod function needs to be allowed to return NULL,
      otherwise it would need to have a dummy return value available for the
      VRT_fail() case. So we need to check for NULL in VGC.
      
      Alternatives considered:
      
      - We could make expression evaluation return SUB also for literal SUB
      symbols, turning all calls into sub->func(ctx, ...) C statements. I
      tried this path and it resulted in a change of behaviour with
      cc_command="clang -g -O2 ...": Where, previously, sub code was
      inlined, it would now generate an explicit C function call always,
      despite the fact that the C function is known at compile time (because
      all named VCL_SUB structs are).
      
      So this option was dismissed for violating the doctrine.
      
      - The null check could go to VPI, via a VPI_call(), basically identical
      to VRT_call(), but checking for NULL. This option was dismissed because
      it would foreclose the requirement to allow for SUB arguments in the
      future.
      
      Acknowledgements:
      
      reza mentioned the idea of call SUB at one point, and I can not remember
      if I had it before or not, so when in doubt, it was his idea.
      
      Dridi helped with ideas on the implementation and spotted a bug.
      7ec28f1a
    • Dridi Boukelmoune's avatar
      param: New vary_notice parameter · e74abf89
      Dridi Boukelmoune authored
      To control the threshold used to warn.
      e74abf89
    • Dridi Boukelmoune's avatar
      lookup: Add a notice for high numbers of variants · ce9fbe44
      Dridi Boukelmoune authored
      As a recurring pitfall sometimes hard to identify, it deserves its own
      notice. The accounting of variants reuses the worker's strangelove field
      since it doesn't conflict where other parts of the code base use it.
      ce9fbe44
    • Poul-Henning Kamp's avatar
  10. 12 Feb, 2021 2 commits