[Libguestfs] [PATCH nbdkit v2 02/10] python: Add various constants to the API.

Nir Soffer nsoffer at redhat.com
Fri Nov 22 20:05:15 UTC 2019


On Fri, Nov 22, 2019 at 9:54 PM Richard W.M. Jones <rjones at redhat.com> wrote:
>
> These are accessible from the plugin by:
>
>   import nbdkit
>
>   if flags & nbdkit.FLAG_MAY_TRIM:
>   &c.

Nice way to expose the flags!

> Many (all?) of these are not yet useful for plugins, some will never
> be useful, but they only consume a tiny bit of memory and it's nice to
> have the complete set available for future use.
> ---
>  plugins/python/python.c | 27 +++++++++++++++++++++++++++
>  1 file changed, 27 insertions(+)
>
> diff --git a/plugins/python/python.c b/plugins/python/python.c
> index d65ac45..69cf4e9 100644
> --- a/plugins/python/python.c
> +++ b/plugins/python/python.c
> @@ -231,6 +231,33 @@ create_nbdkit_module (void)
>      nbdkit_error ("could not create the nbdkit API module");
>      exit (EXIT_FAILURE);
>    }
> +
> +  /* Constants corresponding to various flags. */
> +  PyModule_AddIntConstant (m, "THREAD_MODEL_SERIALIZE_CONNECTIONS",
> +                           NBDKIT_THREAD_MODEL_SERIALIZE_CONNECTIONS);

This can fail and needs cleanup. Very unlikely and a lot of code in
the standard library have
this issue.

In sanlock we do:

    if (PyModule_AddIntConstant(m, "LSFLAG_ADD", SANLK_LSF_ADD))
        return -1;

And the caller decref the module object and return NULL.

See
https://github.com/nirs/sanlock/blob/53f7f0284c084ac2e4542fd1f71d0406075adb5d/python/sanlock.c#L1846
https://github.com/nirs/sanlock/blob/53f7f0284c084ac2e4542fd1f71d0406075adb5d/python/sanlock.c#L1763

> +  PyModule_AddIntConstant (m, "THREAD_MODEL_SERIALIZE_ALL_REQUESTS",
> +                           NBDKIT_THREAD_MODEL_SERIALIZE_ALL_REQUESTS);
> +  PyModule_AddIntConstant (m, "THREAD_MODEL_SERIALIZE_REQUESTS",
> +                           NBDKIT_THREAD_MODEL_SERIALIZE_REQUESTS);
> +  PyModule_AddIntConstant (m, "THREAD_MODEL_PARALLEL",
> +                           NBDKIT_THREAD_MODEL_PARALLEL);
> +
> +  PyModule_AddIntConstant (m, "FLAG_MAY_TRIM",  NBDKIT_FLAG_MAY_TRIM);
> +  PyModule_AddIntConstant (m, "FLAG_FUA",       NBDKIT_FLAG_FUA);
> +  PyModule_AddIntConstant (m, "FLAG_REQ_ONE",   NBDKIT_FLAG_REQ_ONE);
> +  PyModule_AddIntConstant (m, "FLAG_FAST_ZERO", NBDKIT_FLAG_FAST_ZERO);
> +
> +  PyModule_AddIntConstant (m, "FUA_NONE",       NBDKIT_FUA_NONE);
> +  PyModule_AddIntConstant (m, "FUA_EMULATE",    NBDKIT_FUA_EMULATE);
> +  PyModule_AddIntConstant (m, "FUA_NATIVE",     NBDKIT_FUA_NATIVE);
> +
> +  PyModule_AddIntConstant (m, "CACHE_NONE",     NBDKIT_CACHE_NONE);
> +  PyModule_AddIntConstant (m, "CACHE_EMULATE",  NBDKIT_CACHE_EMULATE);
> +  PyModule_AddIntConstant (m, "CACHE_NATIVE",   NBDKIT_CACHE_NATIVE);
> +
> +  PyModule_AddIntConstant (m, "EXTENT_HOLE",    NBDKIT_EXTENT_HOLE);
> +  PyModule_AddIntConstant (m, "EXTENT_ZERO",    NBDKIT_EXTENT_ZERO);
> +
>    return m;
>  }
>
> --
> 2.23.0
>





More information about the Libguestfs mailing list