Mailing List Archive

bo access from VFP
Happy holidays to everyone,

Unless I'm mistaken, there's no way for a VFP to access the busyobj, and
was wondering if that could change as I need it to retrieve a vmod_priv.

For some context, I stumbled on this while working on this vmod:
https://github.com/gquintard/vmod_rers/tree/v0.0.2
(It's in rust, and I'm using it to explore what kind of bindings we need. I
already have a couple of examples for VDP[1] and VFP[2] in the crate[3]
repo, but of course they don't need as much as a real vmod.)

With vmod_rers, the user is able to add regex/sub pairs on a per-request
basis [4], and they will be acted upon by the VDP. To store and retrieve
the pairs I use the regular "fake vrt_ctx trick"[4], since the VDP has
access to the req struct, it's very easy to build.
However, I'm unable to do the same thing on the VFP side since I have
neither a req (fair) nor a bo.

Is there a big reason for not having access to it, or is it just that
nobody asked for it until now?

Happy new year!

[1]: https://github.com/gquintard/varnish-rs/tree/main/examples/vmod_vdp
[2]: https://github.com/gquintard/varnish-rs/tree/main/examples/vmod_vfp
[3]: https://crates.io/crates/varnish
[4]: https://github.com/gquintard/vmod_rers/blob/v0.0.2/vmod.vcc#L47
[5]: https://github.com/gquintard/vmod_rers/blob/v0.0.2/src/lib.rs#L221
--
Guillaume Quintard
Re: bo access from VFP [ In reply to ]
Small follow-up on that one: it would be nice for VFP to be able to disable
streaming (bo->do_stream), so that's an extra argument to be able to access
the busyobj

--
Guillaume Quintard


On Sun, Dec 26, 2021 at 6:11 PM Guillaume Quintard <
guillaume.quintard@gmail.com> wrote:

> Happy holidays to everyone,
>
> Unless I'm mistaken, there's no way for a VFP to access the busyobj, and
> was wondering if that could change as I need it to retrieve a vmod_priv.
>
> For some context, I stumbled on this while working on this vmod:
> https://github.com/gquintard/vmod_rers/tree/v0.0.2
> (It's in rust, and I'm using it to explore what kind of bindings we need.
> I already have a couple of examples for VDP[1] and VFP[2] in the crate[3]
> repo, but of course they don't need as much as a real vmod.)
>
> With vmod_rers, the user is able to add regex/sub pairs on a per-request
> basis [4], and they will be acted upon by the VDP. To store and retrieve
> the pairs I use the regular "fake vrt_ctx trick"[4], since the VDP has
> access to the req struct, it's very easy to build.
> However, I'm unable to do the same thing on the VFP side since I have
> neither a req (fair) nor a bo.
>
> Is there a big reason for not having access to it, or is it just that
> nobody asked for it until now?
>
> Happy new year!
>
> [1]: https://github.com/gquintard/varnish-rs/tree/main/examples/vmod_vdp
> [2]: https://github.com/gquintard/varnish-rs/tree/main/examples/vmod_vfp
> [3]: https://crates.io/crates/varnish
> [4]: https://github.com/gquintard/vmod_rers/blob/v0.0.2/vmod.vcc#L47
> [5]: https://github.com/gquintard/vmod_rers/blob/v0.0.2/src/lib.rs#L221
> --
> Guillaume Quintard
>
Re: bo access from VFP [ In reply to ]
On Fri, Dec 31, 2021 at 11:48 PM Guillaume Quintard
<guillaume.quintard@gmail.com> wrote:
>
> Small follow-up on that one: it would be nice for VFP to be able to disable streaming (bo->do_stream), so that's an extra argument to be able to access the busyobj
>
> --
> Guillaume Quintard
>
>
> On Sun, Dec 26, 2021 at 6:11 PM Guillaume Quintard <guillaume.quintard@gmail.com> wrote:
>>
>> Happy holidays to everyone,

Happy new year !

>> Unless I'm mistaken, there's no way for a VFP to access the busyobj, and was wondering if that could change as I need it to retrieve a vmod_priv.

I think your statement is correct.

>> For some context, I stumbled on this while working on this vmod: https://github.com/gquintard/vmod_rers/tree/v0.0.2
>> (It's in rust, and I'm using it to explore what kind of bindings we need. I already have a couple of examples for VDP[1] and VFP[2] in the crate[3] repo, but of course they don't need as much as a real vmod.)
>>
>> With vmod_rers, the user is able to add regex/sub pairs on a per-request basis [4], and they will be acted upon by the VDP. To store and retrieve the pairs I use the regular "fake vrt_ctx trick"[4], since the VDP has access to the req struct, it's very easy to build.
>> However, I'm unable to do the same thing on the VFP side since I have neither a req (fair) nor a bo.

The big difference between both is that we only use VDPs to deliver
client responses, but we use VFPs to fetch both beresp and req bodies,
so the VFP operates at the objcore level.

>> Is there a big reason for not having access to it, or is it just that nobody asked for it until now?

Probably nobody never asked for it?

Passing a VRT_CTX to the VFP init function could help grab a req or bo
and stash it in vfp_entry::priv1, but I don't see a way to do that
today without cheating.

*cough* THR_GetBusyobj() *cough*

Cheers,
Dridi
_______________________________________________
varnish-dev mailing list
varnish-dev@varnish-cache.org
https://www.varnish-cache.org/lists/mailman/listinfo/varnish-dev
Re: bo access from VFP [ In reply to ]
As usual, thanks a bunch for all your help!

Using the THR_* functions work:
https://github.com/gquintard/vmod_rers/blob/270a2f4272be49f8c1c904b899ec91dafcf2f873/src/lib.rs#L227
and they allow me to merge most of the vfp/vdp init code together (helped
by the fact the same rust structure is both a VDP and a VFP)

It would be even more legible if we had access to the vrt_ctx directly (for
both vfp AND vdp) so I wouldn't have to build my own, OR if we hade
VRT_priv_task_raw_parts(const req *, const busyobj *, const void *) so I
didn't have to build my own context, but that is already pretty sweet

Cheers!

--
Guillaume Quintard


On Mon, Jan 3, 2022 at 7:58 AM Dridi Boukelmoune <dridi@varni.sh> wrote:

> On Fri, Dec 31, 2021 at 11:48 PM Guillaume Quintard
> <guillaume.quintard@gmail.com> wrote:
> >
> > Small follow-up on that one: it would be nice for VFP to be able to
> disable streaming (bo->do_stream), so that's an extra argument to be able
> to access the busyobj
> >
> > --
> > Guillaume Quintard
> >
> >
> > On Sun, Dec 26, 2021 at 6:11 PM Guillaume Quintard <
> guillaume.quintard@gmail.com> wrote:
> >>
> >> Happy holidays to everyone,
>
> Happy new year !
>
> >> Unless I'm mistaken, there's no way for a VFP to access the busyobj,
> and was wondering if that could change as I need it to retrieve a vmod_priv.
>
> I think your statement is correct.
>
> >> For some context, I stumbled on this while working on this vmod:
> https://github.com/gquintard/vmod_rers/tree/v0.0.2
> >> (It's in rust, and I'm using it to explore what kind of bindings we
> need. I already have a couple of examples for VDP[1] and VFP[2] in the
> crate[3] repo, but of course they don't need as much as a real vmod.)
> >>
> >> With vmod_rers, the user is able to add regex/sub pairs on a
> per-request basis [4], and they will be acted upon by the VDP. To store and
> retrieve the pairs I use the regular "fake vrt_ctx trick"[4], since the VDP
> has access to the req struct, it's very easy to build.
> >> However, I'm unable to do the same thing on the VFP side since I have
> neither a req (fair) nor a bo.
>
> The big difference between both is that we only use VDPs to deliver
> client responses, but we use VFPs to fetch both beresp and req bodies,
> so the VFP operates at the objcore level.
>
> >> Is there a big reason for not having access to it, or is it just that
> nobody asked for it until now?
>
> Probably nobody never asked for it?
>
> Passing a VRT_CTX to the VFP init function could help grab a req or bo
> and stash it in vfp_entry::priv1, but I don't see a way to do that
> today without cheating.
>
> *cough* THR_GetBusyobj() *cough*
>
> Cheers,
> Dridi
>
Re: bo access from VFP [ In reply to ]
On Fri, Jan 7, 2022 at 2:40 AM Guillaume Quintard
<guillaume.quintard@gmail.com> wrote:
>
> As usual, thanks a bunch for all your help!
>
> Using the THR_* functions work: https://github.com/gquintard/vmod_rers/blob/270a2f4272be49f8c1c904b899ec91dafcf2f873/src/lib.rs#L227 and they allow me to merge most of the vfp/vdp init code together (helped by the fact the same rust structure is both a VDP and a VFP)
>
> It would be even more legible if we had access to the vrt_ctx directly (for both vfp AND vdp) so I wouldn't have to build my own, OR if we hade VRT_priv_task_raw_parts(const req *, const busyobj *, const void *) so I didn't have to build my own context, but that is already pretty sweet

https://github.com/varnishcache/varnish-cache/pull/3772
_______________________________________________
varnish-dev mailing list
varnish-dev@varnish-cache.org
https://www.varnish-cache.org/lists/mailman/listinfo/varnish-dev