1. 05 Nov, 2020 3 commits
    • Nils Goroll's avatar
    • Nils Goroll's avatar
      Support copying PRIV_TASKs from the client to the backend side · 6a1bd719
      Nils Goroll authored
      Until now, more or less the only option to copy data from the VCL
      client side to the backend side is through headers, as `bereq.http` is
      initialized as a copy of `req.http` (additions to this are the
      recently changed `client.identity` and `req.backend_hint`).
      
      We now add the option for vmods to register a callback per `PRIV_TASK`
      which can then be used to copy vmod owned data from the client to the
      backend side.
      
      Callback registrations are kept on a list hanging off `struct req` on
      demand. When a backend request is created, the registered functions
      are called in order of registration.
      
      The base memory cost to this is one pointer added to `struct req`. If
      no registrations are used, this is the only impact on memory
      requirements.
      The runtime overhead when no callbacks are registered is close to a
      noop: one function call to `vbf_privs_copy()`, which only checks a
      pointer (besides the common `CHECK_OBJ_*` argument checks).
      
      Alternatives considered:
      
      A straight forward alternative would be a per `PRIV_TASK` copy
      function pointer paralleling the free pointer. This option would
      charge every `PRIV_TASK` with an additional pointer. Under the
      assumption that `PRIV_TASK` copy operations will be required for
      select data only, this option was dismissed. It should be noted though
      that this option could be more memory efficient if a relevant
      proportion of `PRIV_TASKs` requested copying (one pointer vs. approx 4
      pointers for this solution).
      
      Another option was to add an event signalled to vmods for backend
      request creation (basically `STP_MKBEREQ`). This would allow for the
      same functionality as proposed here, but vmods would be responsible to
      track all `PRIV_TASK`s requiring copying themsevles. This tracking
      would be similar to what is suggested herein, but without the reuse.
      6a1bd719
    • Nils Goroll's avatar
      Split dynamic priv lookup into own function · 262174ac
      Nils Goroll authored
      In the next commit we are going to need a lookup which does not create
      privs.
      262174ac
  2. 04 Nov, 2020 1 commit
  3. 02 Nov, 2020 9 commits
  4. 28 Oct, 2020 7 commits
    • Poul-Henning Kamp's avatar
    • Poul-Henning Kamp's avatar
    • Poul-Henning Kamp's avatar
      541ca133
    • Dridi Boukelmoune's avatar
      ci: Increase parallelism in Travis CI builds · 1b606ff9
      Dridi Boukelmoune authored
      They are taking too long, needlessly holding onto job slots forever.
      
      Align with CircleCI for now, even though we could probably do more.
      1b606ff9
    • Dridi Boukelmoune's avatar
      cocci: Remove redundant AN() checks after REPLACE() · fda02024
      Dridi Boukelmoune authored
      Except those present in varnishtest/vtest.
      fda02024
    • Dridi Boukelmoune's avatar
      test: Over-breeding is still a thing · 1b0a51cc
      Dridi Boukelmoune authored
      Spotted on CircleCI:
      
          ---- v1    Not true: MAIN.threads (26) == 10 (10)
      
      Refs #2942
      1b0a51cc
    • Dridi Boukelmoune's avatar
      vtc: Add varnish macros for all listen addresses · c7ac5266
      Dridi Boukelmoune authored
      When a test case successfully runs this:
      
          varnish v1 -start
      
      The following macros are created:
      
      - ${v1_addr}
      - ${v1_port}
      - ${v1_sock}
      
      When v1 listens to a UNIX domain socket, those macros become useless and
      we generally have to repeat the socket path wherever we need it.
      
      From now on, varnish listen address macros for unix domain sockets match
      their server counterparts:
      
      - ${v1_addr} expands to "0.0.0.0"
      - ${v1_port} expands to "0"
      - ${v1_sock} expands to the socket path
      
      It is now possible to use the following construct regardless of the
      socket type:
      
          client c1 -connect "${v1_sock}"
      
      In addition, the debug.listen_address command now outputs the listen
      address name in addition to its endpoint. For example, in a test case
      with the following command:
      
          varnish v1 -arg "-a :0 -a :0 -b '${bad_backend}'" -start
      
      The output for debug.listen_address could look like this:
      
          a0 127.0.0.1 34567
          a0 ::1 34567
          a1 127.0.0.1 45678
          a1 ::1 45678
      
      The resulting macros would be:
      
      - ${v1_addr}
      - ${v1_port}
      - ${v1_sock}
      - ${v1_a0_addr}
      - ${v1_a0_port}
      - ${v1_a0_sock}
      - ${v1_a1_addr}
      - ${v1_a1_port}
      - ${v1_a1_sock}
      
      It becomes possible to reliably listen to multiple endpoints and use
      either in a test case. On a dual-stack system where we might end up
      with multiple endpoints sharing the same name, only the first one is
      used for a given name. In the example above all macros would expand
      to IPv4 addresses.
      c7ac5266
  5. 27 Oct, 2020 6 commits
  6. 26 Oct, 2020 13 commits
  7. 24 Oct, 2020 1 commit