Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
varnish-cache
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
varnishcache
varnish-cache
Commits
5459a027
Commit
5459a027
authored
Sep 12, 2018
by
Nils Goroll
Committed by
Dridi Boukelmoune
Oct 16, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
have a go at some vmod objects dev doc (not new for 6.1)
parent
62f291a1
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
82 additions
and
0 deletions
+82
-0
vmod.rst
doc/sphinx/reference/vmod.rst
+82
-0
No files found.
doc/sphinx/reference/vmod.rst
View file @
5459a027
...
...
@@ -178,6 +178,73 @@ declarations:
Note that in particular also ``PRIV_*`` arguments (which are
unnamed by definition) are passed as ``arg``\ `n`
.. _ref-vmod-vcl-c-objects:
Objects and methods
-------------------
Varnish also supports a simple object model for vmods. Objects and
methods are declared in the vcc file as::
$Object class(`constructor arguments`)
$Method .method(`method arguments`)
For declared object classes of a vmod, object instances can then be
created in ``vcl_init { }`` using the ``new`` statement::
sub vcl_init {
new foo = vmod.class(...);
}
and have their methods called anywhere (including in ``vcl_init {}``
after the instantiation)::
sub somewhere {
foo.method(...);
}
Object instances are represented as pointers to vmod-implemented C
structs. Varnish only provides space to store the address of object
instances and ensures that the right object address gets passed to C
functions implementing methods.
* Objects' scope and lifetime are the vcl
* Objects can only be created in ``vcl_init {}`` and have
their destructors called by varnish after ``vcl_fini {}``
has completed.
vmod authors are advised to understand the prototypes in the
`vmodtool`\ -generated ``vcc_if.c`` file:
* For ``$Object`` declarations, a constructor and destructor
function must be implemented
* The constructor is named by the suffix ``__init``, always is
of ``VOID`` return type and has the following arguments
before the vcc-declared parameters:
* ``VRT_CTX`` as usual
* a pointer-pointer to return the address of the created
oject
* a string containing the vcl name of the object instance
* The destructor is named by the suffix ``__fini``, always is
of ``VOID`` return type and has a single argument, the
pointer-pointer to the address of the object. The destructor
is expected clear the address of the object stored in that
pointer-pointer.
* Methods gain the pointer to the object as an argument after
the ``VRT_CTX``.
As varnish is in no way involved in managing object instances other
than passing their addresses, vmods need to implement all aspects of
managing instances, in particular their memory management. As the
lifetime of object instances is the vcl, they will usually be
allocated from the heap.
.. _ref-vmod-vcl-c-types:
VCL and C data types
...
...
@@ -439,6 +506,20 @@ malloc would look like this::
The per-call vmod_privs are freed before the per-vcl vmod_priv.
Note on use with objects:
``PRIV_TASK`` and ``PRIV_TOP`` arguments are not per object instance,
but still per vmod as for ordinary vmod functions. Thus, vmods
requiring per-task / per top-request state for object instances need
to implement other means to associate storage with object instances.
Using ``VRT_priv_task()`` to maintin per object instance state is a
convenient yet inofficial interface which was not originally intended
for this purpose and will likely be replaced with a more suitable
interface.
.. _ref-vmod-event-functions:
Event functions
...
...
@@ -511,6 +592,7 @@ In the case where properly releasing resources may take some time, you can
opt for an asynchronous worker, either by spawning a thread and tracking it, or
by using Varnish's worker pools.
When to lock, and when not to lock
==================================
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment