[Libguestfs] [libnbd PATCH 2/7] golang: Export meta-context constants

Richard W.M. Jones rjones at redhat.com
Mon Jul 31 14:20:25 UTC 2023


On Wed, Jul 26, 2023 at 12:29:45PM -0500, Eric Blake wrote:
> Go insists that a module's members are not public unless they start
> with a capital letter.  Our attempt at defining constants
> 'namespace_base' and 'context_base_allocation' were thus only visible
> to our in-package tests, and not for external clients.
> 
> Although this patch does not completely address gofmt complaints,
> adding some strategic grouping comments inside the const() block has
> an additional benefit of reducing the amount of whitespace that gofmt
> wants to inject into unrelated lines.
> 
> The change to generated golang/bindigs.go is:
> 
> | --- golang/bindings.go.bak	2023-07-26 12:06:47.618324437 -0500
> | +++ golang/bindings.go	2023-07-26 12:06:55.521385295 -0500
> | @@ -111,14 +111,18 @@
> |      READ_DATA uint32 = 1
> |      READ_HOLE uint32 = 2
> |      READ_ERROR uint32 = 3
> | -    namespace_base = "base:"
> | -    context_base_allocation = "base:allocation"
> | +    /* Meta-context namespace "base" */
> | +    NAMESPACE_BASE = "base:"
> | +    CONTEXT_BASE_ALLOCATION = "base:allocation"
> | +    /* Defined bits in "base:allocation" */
> |      STATE_HOLE uint32 = 1
> |      STATE_ZERO uint32 = 2
> | -    namespace_qemu = "qemu:"
> | -    context_qemu_dirty_bitmap = "qemu:dirty-bitmap:"
> | +    /* Meta-context namespace "qemu" */
> | +    NAMESPACE_QEMU = "qemu:"
> | +    CONTEXT_QEMU_DIRTY_BITMAP = "qemu:dirty-bitmap:"
> | +    /* Defined bits in "qemu:dirty-bitmap:" */
> |      STATE_DIRTY uint32 = 1
> | -    context_qemu_allocation_depth = "qemu:allocation-depth"
> | +    CONTEXT_QEMU_ALLOCATION_DEPTH = "qemu:allocation-depth"
> |  )
> |
> |  /* SetDebug: set or clear the debug flag */
> 
> Signed-off-by: Eric Blake <eblake at redhat.com>
> 
> ---
> 
> RFC: Do we want MixedCase rather than ALL_CAPS names?  If so, this
> patch needs to be rethought a bit, as it would impact API for existing
> public constants as well as the ones changed here.  But we don't
> promise API stability for Go.

I don't greatly care either way, unless someone who uses golang
expresses an opinion.

Acked-by: Richard W.M. Jones <rjones at redhat.com>

(upstream in commit 14612ca0)

Rich.

> ---
>  generator/GoLang.ml                           | 10 +++++---
>  golang/libnbd_230_opt_info_test.go            | 24 +++++++++----------
>  golang/libnbd_240_opt_list_meta_test.go       | 14 +++++------
>  .../libnbd_245_opt_list_meta_queries_test.go  |  4 ++--
>  golang/libnbd_250_opt_set_meta_test.go        | 20 ++++++++--------
>  .../libnbd_255_opt_set_meta_queries_test.go   | 12 +++++-----
>  golang/libnbd_460_block_status_test.go        |  4 ++--
>  7 files changed, 46 insertions(+), 42 deletions(-)
> 
> diff --git a/generator/GoLang.ml b/generator/GoLang.ml
> index 7a7e7f4b..82d73ed6 100644
> --- a/generator/GoLang.ml
> +++ b/generator/GoLang.ml
> @@ -469,11 +469,15 @@ let
>    ) constants;
>    List.iter (
>      fun (ns, ctxts) ->
> -      pr "    namespace_%s = \"%s:\"\n" ns ns;
> +      let ns_upper = String.uppercase_ascii ns in
> +      pr "    /* Meta-context namespace \"%s\" */\n" ns;
> +      pr "    NAMESPACE_%s = \"%s:\"\n" ns_upper ns;
>        List.iter (
>          fun (ctxt, consts) ->
> -          let ctxt_macro = macro_name ctxt in
> -          pr "    context_%s_%s = \"%s:%s\"\n" ns ctxt_macro ns ctxt;
> +          let ctxt_macro = String.uppercase_ascii (macro_name ctxt) in
> +          pr "    CONTEXT_%s_%s = \"%s:%s\"\n" ns_upper ctxt_macro ns ctxt;
> +          if consts <> [] then
> +            pr "    /* Defined bits in \"%s:%s\" */\n" ns ctxt;
>            List.iter (fun (n, v) ->
>                pr "    %s uint32 = %d\n" n v
>            ) consts
> diff --git a/golang/libnbd_230_opt_info_test.go b/golang/libnbd_230_opt_info_test.go
> index cd00be9e..cc7c2d91 100644
> --- a/golang/libnbd_230_opt_info_test.go
> +++ b/golang/libnbd_230_opt_info_test.go
> @@ -45,7 +45,7 @@ func Test230OptInfo(t *testing.T) {
>  		t.Fatalf("could not connect: %s", err)
>  	}
> 
> -	err = h.AddMetaContext(context_base_allocation)
> +	err = h.AddMetaContext(CONTEXT_BASE_ALLOCATION)
>  	if err != nil {
>  		t.Fatalf("could not add meta context: %s", err)
>  	}
> @@ -59,7 +59,7 @@ func Test230OptInfo(t *testing.T) {
>  	if err == nil {
>  		t.Fatalf("expected error")
>  	}
> -	_, err = h.CanMetaContext(context_base_allocation)
> +	_, err = h.CanMetaContext(CONTEXT_BASE_ALLOCATION)
>  	if err == nil {
>  		t.Fatalf("expected error")
>  	}
> @@ -83,7 +83,7 @@ func Test230OptInfo(t *testing.T) {
>  	if !ro {
>  		t.Fatalf("unexpected readonly")
>  	}
> -	meta, err := h.CanMetaContext(context_base_allocation)
> +	meta, err := h.CanMetaContext(CONTEXT_BASE_ALLOCATION)
>  	if err != nil {
>  		t.Fatalf("can_meta failed unexpectedly: %s", err)
>  	}
> @@ -104,7 +104,7 @@ func Test230OptInfo(t *testing.T) {
>  	if err == nil {
>  		t.Fatalf("expected error")
>  	}
> -	_, err = h.CanMetaContext(context_base_allocation)
> +	_, err = h.CanMetaContext(CONTEXT_BASE_ALLOCATION)
>  	if err == nil {
>  		t.Fatalf("expected error")
>  	}
> @@ -151,7 +151,7 @@ func Test230OptInfo(t *testing.T) {
>  	if ro {
>  		t.Fatalf("unexpected readonly")
>  	}
> -	_, err = h.CanMetaContext(context_base_allocation)
> +	_, err = h.CanMetaContext(CONTEXT_BASE_ALLOCATION)
>  	if err == nil {
>  		t.Fatalf("expected error")
>  	}
> @@ -177,7 +177,7 @@ func Test230OptInfo(t *testing.T) {
>  	if err == nil {
>  		t.Fatalf("expected error")
>  	}
> -	_, err = h.CanMetaContext(context_base_allocation)
> +	_, err = h.CanMetaContext(CONTEXT_BASE_ALLOCATION)
>  	if err == nil {
>  		t.Fatalf("expected error")
>  	}
> @@ -205,7 +205,7 @@ func Test230OptInfo(t *testing.T) {
>  	if !ro {
>  		t.Fatalf("unexpected readonly")
>  	}
> -	meta, err = h.CanMetaContext(context_base_allocation)
> +	meta, err = h.CanMetaContext(CONTEXT_BASE_ALLOCATION)
>  	if err != nil {
>  		t.Fatalf("can_meta failed unexpectedly: %s", err)
>  	}
> @@ -236,7 +236,7 @@ func Test230OptInfo(t *testing.T) {
>  	if size != 4 {
>  		t.Fatalf("unexpected size")
>  	}
> -	meta, err = h.CanMetaContext(context_base_allocation)
> +	meta, err = h.CanMetaContext(CONTEXT_BASE_ALLOCATION)
>  	if err != nil {
>  		t.Fatalf("can_meta failed unexpectedly: %s", err)
>  	}
> @@ -270,7 +270,7 @@ func Test230OptInfo(t *testing.T) {
>  		t.Fatalf("could not add meta context: %s", err)
>  	}
> 
> -	_, err = h.CanMetaContext(context_base_allocation)
> +	_, err = h.CanMetaContext(CONTEXT_BASE_ALLOCATION)
>  	if err == nil {
>  		t.Fatalf("expected error")
>  	}
> @@ -278,7 +278,7 @@ func Test230OptInfo(t *testing.T) {
>  	if err != nil {
>  		t.Fatalf("opt_info failed unexpectedly: %s", err)
>  	}
> -	meta, err = h.CanMetaContext(context_base_allocation)
> +	meta, err = h.CanMetaContext(CONTEXT_BASE_ALLOCATION)
>  	if err != nil {
>  		t.Fatalf("can_meta failed unexpectedly: %s", err)
>  	}
> @@ -290,7 +290,7 @@ func Test230OptInfo(t *testing.T) {
>  		t.Fatalf("set request meta context failed unexpectedly: %s", err)
>  	}
>  	/* Adding to the request list now won't matter */
> -	err = h.AddMetaContext(context_base_allocation)
> +	err = h.AddMetaContext(CONTEXT_BASE_ALLOCATION)
>  	if err != nil {
>  		t.Fatalf("could not add meta context: %s", err)
>  	}
> @@ -298,7 +298,7 @@ func Test230OptInfo(t *testing.T) {
>  	if err != nil {
>  		t.Fatalf("opt_go failed unexpectedly: %s", err)
>  	}
> -	meta, err = h.CanMetaContext(context_base_allocation)
> +	meta, err = h.CanMetaContext(CONTEXT_BASE_ALLOCATION)
>  	if err != nil {
>  		t.Fatalf("can_meta failed unexpectedly: %s", err)
>  	}
> diff --git a/golang/libnbd_240_opt_list_meta_test.go b/golang/libnbd_240_opt_list_meta_test.go
> index 0235fe3f..011b5704 100644
> --- a/golang/libnbd_240_opt_list_meta_test.go
> +++ b/golang/libnbd_240_opt_list_meta_test.go
> @@ -31,7 +31,7 @@ func listmetaf(user_data int, name string) int {
>  		panic("expected user_data == 42")
>  	}
>  	list_count++
> -	if (name == context_base_allocation) {
> +	if (name == CONTEXT_BASE_ALLOCATION) {
>  		list_seen = true
>  	}
>  	return 0
> @@ -92,7 +92,7 @@ func Test240OptListMeta(t *testing.T) {
>  	/* Third pass: specific query should have one match. */
>  	list_count = 0
>  	list_seen = false
> -	err = h.AddMetaContext(context_base_allocation)
> +	err = h.AddMetaContext(CONTEXT_BASE_ALLOCATION)
>  	if err != nil {
>  		t.Fatalf("could not request add_meta_context: %s", err)
>  	}
> @@ -107,7 +107,7 @@ func Test240OptListMeta(t *testing.T) {
>  	if err != nil {
>  		t.Fatalf("could not request get_meta_context: %s", err)
>  	}
> -	if *tmp != context_base_allocation {
> +	if *tmp != CONTEXT_BASE_ALLOCATION {
>  		t.Fatalf("wrong result of get_meta_context: %s", *tmp)
>  	}
>  	r, err = h.OptListMetaContext(func(name string) int {
> @@ -129,7 +129,7 @@ func Test240OptListMeta(t *testing.T) {
>  	if err == nil {
>  		t.Fatalf("expected error")
>  	}
> -	_, err = h.CanMetaContext(context_base_allocation)
> +	_, err = h.CanMetaContext(CONTEXT_BASE_ALLOCATION)
>  	if err == nil {
>  		t.Fatalf("expected error")
>  	}
> @@ -144,7 +144,7 @@ func Test240OptListMeta(t *testing.T) {
>          if size != 1048576 {
>  		t.Fatalf("get_size gave wrong size")
>          }
> -	meta, err := h.CanMetaContext(context_base_allocation)
> +	meta, err := h.CanMetaContext(CONTEXT_BASE_ALLOCATION)
>  	if err != nil {
>  		t.Fatalf("can_meta_context failed unexpectedly: %s", err)
>  	}
> @@ -175,7 +175,7 @@ func Test240OptListMeta(t *testing.T) {
>          if size != 1048576 {
>  		t.Fatalf("get_size gave wrong size")
>          }
> -	meta, err = h.CanMetaContext(context_base_allocation)
> +	meta, err = h.CanMetaContext(CONTEXT_BASE_ALLOCATION)
>  	if err != nil {
>  		t.Fatalf("can_meta_context failed unexpectedly: %s", err)
>  	}
> @@ -187,7 +187,7 @@ func Test240OptListMeta(t *testing.T) {
>  	/* Final pass: "base:" query should get at least "base:allocation" */
>  	list_count = 0
>  	list_seen = false
> -	err = h.AddMetaContext("base:")
> +	err = h.AddMetaContext(NAMESPACE_BASE)
>  	if err != nil {
>  		t.Fatalf("could not request add_meta_context: %s", err)
>  	}
> diff --git a/golang/libnbd_245_opt_list_meta_queries_test.go b/golang/libnbd_245_opt_list_meta_queries_test.go
> index fc1ab60c..3ae2d854 100644
> --- a/golang/libnbd_245_opt_list_meta_queries_test.go
> +++ b/golang/libnbd_245_opt_list_meta_queries_test.go
> @@ -28,7 +28,7 @@ func listmetaqf(user_data int, name string) int {
>  		panic("expected user_data == 42")
>  	}
>  	listq_count++
> -	if (name == context_base_allocation) {
> +	if (name == CONTEXT_BASE_ALLOCATION) {
>  		listq_seen = true
>  	}
>  	return 0
> @@ -97,7 +97,7 @@ func(name string) int {
>  	listq_count = 0
>  	listq_seen = false
>  	r, err = h.OptListMetaContextQueries([]string{
> -		"x-nosuch:", context_base_allocation },
> +		"x-nosuch:", CONTEXT_BASE_ALLOCATION },
>  		func(name string) int {
>  	        return listmetaqf(42, name)
>  		})
> diff --git a/golang/libnbd_250_opt_set_meta_test.go b/golang/libnbd_250_opt_set_meta_test.go
> index 6d27fa22..4263ede5 100644
> --- a/golang/libnbd_250_opt_set_meta_test.go
> +++ b/golang/libnbd_250_opt_set_meta_test.go
> @@ -28,7 +28,7 @@ func setmetaf(user_data int, name string) int {
>  		panic("expected user_data == 42")
>  	}
>  	set_count++
> -	if (name == context_base_allocation) {
> +	if (name == CONTEXT_BASE_ALLOCATION) {
>  		set_seen = true
>  	}
>  	return 0
> @@ -67,18 +67,18 @@ func Test250OptSetMeta(t *testing.T) {
>  	if sr {
>  		t.Fatalf("unexpected structured replies state")
>  	}
> -	meta, err := h.CanMetaContext(context_base_allocation)
> +	meta, err := h.CanMetaContext(CONTEXT_BASE_ALLOCATION)
>  	if err != nil {
>  		t.Fatalf("could not check can meta context: %s", err)
>  	}
>  	if meta {
>  		t.Fatalf("unexpected can meta context state")
>  	}
> -	err = h.AddMetaContext(context_base_allocation)
> +	err = h.AddMetaContext(CONTEXT_BASE_ALLOCATION)
>  	if err != nil {
>  		t.Fatalf("could not request add_meta_context: %s", err)
>  	}
> -	_, err = h.CanMetaContext(context_base_allocation)
> +	_, err = h.CanMetaContext(CONTEXT_BASE_ALLOCATION)
>  	if err == nil {
>  		t.Fatalf("expected error")
>  	}
> @@ -109,7 +109,7 @@ func Test250OptSetMeta(t *testing.T) {
>  	if !sr {
>  		t.Fatalf("unexpected structured replies state")
>  	}
> -	_, err = h.CanMetaContext(context_base_allocation)
> +	_, err = h.CanMetaContext(CONTEXT_BASE_ALLOCATION)
>  	if err == nil {
>  		t.Fatalf("expected error")
>  	}
> @@ -151,7 +151,7 @@ func Test250OptSetMeta(t *testing.T) {
>  	if r != set_count || r != 0 || set_seen {
>  		t.Fatalf("unexpected set_count after opt_set_meta_context")
>  	}
> -	meta, err = h.CanMetaContext(context_base_allocation)
> +	meta, err = h.CanMetaContext(CONTEXT_BASE_ALLOCATION)
>  	if err != nil {
>  		t.Fatalf("could not check can meta context: %s", err)
>  	}
> @@ -166,7 +166,7 @@ func Test250OptSetMeta(t *testing.T) {
>  	if err != nil {
>  		t.Fatalf("could not request add_meta_context: %s", err)
>  	}
> -	err = h.AddMetaContext(context_base_allocation)
> +	err = h.AddMetaContext(CONTEXT_BASE_ALLOCATION)
>  	if err != nil {
>  		t.Fatalf("could not request add_meta_context: %s", err)
>  	}
> @@ -183,7 +183,7 @@ func Test250OptSetMeta(t *testing.T) {
>  	if r != 1 || r != set_count || !set_seen {
>  		t.Fatalf("unexpected set_count after opt_set_meta_context")
>  	}
> -	meta, err = h.CanMetaContext(context_base_allocation)
> +	meta, err = h.CanMetaContext(CONTEXT_BASE_ALLOCATION)
>  	if err != nil {
>  		t.Fatalf("could not check can meta context: %s", err)
>  	}
> @@ -204,7 +204,7 @@ func Test250OptSetMeta(t *testing.T) {
>  	if err != nil {
>  		t.Fatalf("could not request opt_go: %s", err)
>  	}
> -	meta, err = h.CanMetaContext(context_base_allocation)
> +	meta, err = h.CanMetaContext(CONTEXT_BASE_ALLOCATION)
>  	if err != nil {
>  		t.Fatalf("could not check can meta context: %s", err)
>  	}
> @@ -224,7 +224,7 @@ func Test250OptSetMeta(t *testing.T) {
>  	if set_count != 0 || set_seen {
>  		t.Fatalf("unexpected set_count after opt_set_meta_context")
>  	}
> -	meta, err = h.CanMetaContext(context_base_allocation)
> +	meta, err = h.CanMetaContext(CONTEXT_BASE_ALLOCATION)
>  	if err != nil {
>  		t.Fatalf("could not check can meta context: %s", err)
>  	}
> diff --git a/golang/libnbd_255_opt_set_meta_queries_test.go b/golang/libnbd_255_opt_set_meta_queries_test.go
> index cca25ae7..232560bc 100644
> --- a/golang/libnbd_255_opt_set_meta_queries_test.go
> +++ b/golang/libnbd_255_opt_set_meta_queries_test.go
> @@ -28,7 +28,7 @@ func setmetaqf(user_data int, name string) int {
>  		panic("expected user_data == 42")
>  	}
>  	setq_count++
> -	if (name == context_base_allocation) {
> +	if (name == CONTEXT_BASE_ALLOCATION) {
>  		setq_seen = true
>  	}
>  	return 0
> @@ -74,7 +74,7 @@ func(name string) int {
>  	 */
>  	setq_count = 0
>  	setq_seen = false
> -	err = h.AddMetaContext(context_base_allocation)
> +	err = h.AddMetaContext(CONTEXT_BASE_ALLOCATION)
>  	if err != nil {
>  		t.Fatalf("could not request add_meta_context: %s", err)
>  	}
> @@ -87,7 +87,7 @@ func(name string) int {
>  	if r != setq_count || r != 0 || setq_seen {
>  		t.Fatalf("unexpected set_count after opt_set_meta_context_queries")
>  	}
> -	meta, err := h.CanMetaContext(context_base_allocation)
> +	meta, err := h.CanMetaContext(CONTEXT_BASE_ALLOCATION)
>  	if err != nil {
>  		t.Fatalf("could not check can meta context: %s", err)
>  	}
> @@ -99,7 +99,7 @@ func(name string) int {
>  	setq_count = 0
>  	setq_seen = false
>  	r, err = h.OptSetMetaContextQueries([]string{
> -		"x-nosuch:context", context_base_allocation},
> +		"x-nosuch:context", CONTEXT_BASE_ALLOCATION},
>  		func(name string) int {
>  	        return setmetaqf(42, name)
>  		})
> @@ -109,7 +109,7 @@ func(name string) int {
>  	if r != 1 || r != setq_count || !setq_seen {
>  		t.Fatalf("unexpected set_count after opt_set_meta_context_queries")
>  	}
> -	meta, err = h.CanMetaContext(context_base_allocation)
> +	meta, err = h.CanMetaContext(CONTEXT_BASE_ALLOCATION)
>  	if err != nil {
>  		t.Fatalf("could not check can meta context: %s", err)
>  	}
> @@ -126,7 +126,7 @@ func(name string) int {
>  	if err != nil {
>  		t.Fatalf("could not request opt_go: %s", err)
>  	}
> -	meta, err = h.CanMetaContext(context_base_allocation)
> +	meta, err = h.CanMetaContext(CONTEXT_BASE_ALLOCATION)
>  	if err != nil {
>  		t.Fatalf("could not check can meta context: %s", err)
>  	}
> diff --git a/golang/libnbd_460_block_status_test.go b/golang/libnbd_460_block_status_test.go
> index dca0d1b8..d2d11e9c 100644
> --- a/golang/libnbd_460_block_status_test.go
> +++ b/golang/libnbd_460_block_status_test.go
> @@ -31,7 +31,7 @@ func mcf(metacontext string, offset uint64, e []uint32, error *int) int {
>  	if *error != 0 {
>  		panic("expected *error == 0")
>  	}
> -	if metacontext == "base:allocation" {
> +	if metacontext == CONTEXT_BASE_ALLOCATION {
>  		entries = e
>  	}
>  	return 0
> @@ -69,7 +69,7 @@ func Test460BlockStatus(t *testing.T) {
>  	}
>  	defer h.Close()
> 
> -	err = h.AddMetaContext("base:allocation")
> +	err = h.AddMetaContext(CONTEXT_BASE_ALLOCATION)
>  	if err != nil {
>  		t.Fatalf("%s", err)
>  	}
> -- 
> 2.41.0
> 
> _______________________________________________
> Libguestfs mailing list
> Libguestfs at redhat.com
> https://listman.redhat.com/mailman/listinfo/libguestfs

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
Fedora Windows cross-compiler. Compile Windows programs, test, and
build Windows installers. Over 100 libraries supported.
http://fedoraproject.org/wiki/MinGW


More information about the Libguestfs mailing list