[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v4 29/34] qapi: Implement deprecated-output=hide for QMP even

From: Eric Blake
Subject: Re: [PATCH v4 29/34] qapi: Implement deprecated-output=hide for QMP events
Date: Wed, 18 Mar 2020 07:29:03 -0500
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.5.0

On 3/17/20 6:54 AM, Markus Armbruster wrote:
This policy suppresses deprecated bits in output, and thus permits
"testing the future".  Implement it for QMP events: suppress
deprecated ones.

No QMP event is deprecated right now.

Signed-off-by: Markus Armbruster <address@hidden>

@@ -140,6 +141,23 @@ static void test_event_d(TestEventData *data,
+static void test_event_deprecated(TestEventData *data, const void *unused)
+    data->expect = qdict_from_jsonf_nofail("{ 'event': 'TEST-EVENT-FEATURES1' 
+    memset(&compat_policy, 0, sizeof(compat_policy));
+    qapi_event_send_test_event_features1();
+    g_assert(data->emitted);
+    compat_policy.deprecated_output = COMPAT_POLICY_OUTPUT_HIDE;

Umm, did you forget to set compat_policy.has_deprecated_output = true?

(proof that we really want QAPI defaults to be working, to get rid of pointless has_* members...)

+    data->emitted = false;
+    qapi_event_send_test_event_features1();
+    g_assert(!data->emitted);
+    qobject_unref(data->expect);

+++ b/scripts/qapi/events.py
@@ -61,7 +61,8 @@ def gen_param_var(typ):
      return ret
-def gen_event_send(name, arg_type, boxed, event_enum_name, event_emit):
+def gen_event_send(name, arg_type, features, boxed,
+                   event_enum_name, event_emit):
      # FIXME: Our declaration of local variables (and of 'errp' in the
      # parameter list) can collide with exploded members of the event's
      # data type passed in as parameters.  If this collision ever hits in
@@ -86,6 +87,14 @@ def gen_event_send(name, arg_type, boxed, event_enum_name, 
          if not boxed:
              ret += gen_param_var(arg_type)
+ if 'deprecated' in [f.name for f in features]:
+        ret += mcgen('''
+    if (compat_policy.deprecated_output == COMPAT_POLICY_OUTPUT_HIDE) {
+        return;

Here, you took the shortcut that if we always 0-initialize, deprecated_output will never be true except when has_deprecated_output is also true. But the test above violated that rule of thumb.

Otherwise, this patch makes sense.

Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3226
Virtualization:  qemu.org | libvirt.org

reply via email to

[Prev in Thread] Current Thread [Next in Thread]