Blame SOURCES/kvm-pr-manager-helper-report-event-on-connection-disconn.patch

1bdc94
From d6d700d511612f621c0b6dcbd3d7996126f3da80 Mon Sep 17 00:00:00 2001
1bdc94
From: Paolo Bonzini <pbonzini@redhat.com>
1bdc94
Date: Fri, 6 Jul 2018 17:56:56 +0200
1bdc94
Subject: [PATCH 22/89] pr-manager-helper: report event on
1bdc94
 connection/disconnection
1bdc94
1bdc94
RH-Author: Paolo Bonzini <pbonzini@redhat.com>
1bdc94
Message-id: <20180706175659.30615-7-pbonzini@redhat.com>
1bdc94
Patchwork-id: 81247
1bdc94
O-Subject: [RHEL7.6 qemu-kvm-rhev PATCH 6/9] pr-manager-helper: report event on connection/disconnection
1bdc94
Bugzilla: 1533158
1bdc94
RH-Acked-by: Laurent Vivier <lvivier@redhat.com>
1bdc94
RH-Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
1bdc94
RH-Acked-by: Michal Privoznik <mprivozn@redhat.com>
1bdc94
1bdc94
Let management know if there were any problems communicating with
1bdc94
qemu-pr-helper.  The event is edge-triggered, and is sent every time
1bdc94
the connection status of the pr-manager-helper object changes.
1bdc94
1bdc94
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
1bdc94
(cherry picked from commit e2c81a45101fdddfd47477a1805806f2c76639bf)
1bdc94
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
1bdc94
---
1bdc94
 qapi/block.json          | 24 ++++++++++++++++++++++++
1bdc94
 scsi/pr-manager-helper.c | 14 ++++++++++++++
1bdc94
 2 files changed, 38 insertions(+)
1bdc94
1bdc94
diff --git a/qapi/block.json b/qapi/block.json
1bdc94
index c636354..f05b91a 100644
1bdc94
--- a/qapi/block.json
1bdc94
+++ b/qapi/block.json
1bdc94
@@ -403,6 +403,30 @@
1bdc94
   'data': { 'device': 'str', 'id': 'str', 'tray-open': 'bool' } }
1bdc94
 
1bdc94
 ##
1bdc94
+# @PR_MANAGER_STATUS_CHANGED:
1bdc94
+#
1bdc94
+# Emitted whenever the connected status of a persistent reservation
1bdc94
+# manager changes.
1bdc94
+#
1bdc94
+# @id: The id of the PR manager object
1bdc94
+#
1bdc94
+# @connected: true if the PR manager is connected to a backend
1bdc94
+#
1bdc94
+# Since: 3.0
1bdc94
+#
1bdc94
+# Example:
1bdc94
+#
1bdc94
+# <- { "event": "PR_MANAGER_STATUS_CHANGED",
1bdc94
+#      "data": { "id": "pr-helper0",
1bdc94
+#                "connected": true
1bdc94
+#      },
1bdc94
+#      "timestamp": { "seconds": 1519840375, "microseconds": 450486 } }
1bdc94
+#
1bdc94
+##
1bdc94
+{ 'event': 'PR_MANAGER_STATUS_CHANGED',
1bdc94
+  'data': { 'id': 'str', 'connected': 'bool' } }
1bdc94
+
1bdc94
+##
1bdc94
 # @QuorumOpType:
1bdc94
 #
1bdc94
 # An enumeration of the quorum operation types
1bdc94
diff --git a/scsi/pr-manager-helper.c b/scsi/pr-manager-helper.c
1bdc94
index b11481b..519a296 100644
1bdc94
--- a/scsi/pr-manager-helper.c
1bdc94
+++ b/scsi/pr-manager-helper.c
1bdc94
@@ -17,6 +17,7 @@
1bdc94
 #include "io/channel.h"
1bdc94
 #include "io/channel-socket.h"
1bdc94
 #include "pr-helper.h"
1bdc94
+#include "qapi/qapi-events-block.h"
1bdc94
 
1bdc94
 #include <scsi/sg.h>
1bdc94
 
1bdc94
@@ -38,6 +39,16 @@ typedef struct PRManagerHelper {
1bdc94
     QIOChannel *ioc;
1bdc94
 } PRManagerHelper;
1bdc94
 
1bdc94
+static void pr_manager_send_status_changed_event(PRManagerHelper *pr_mgr)
1bdc94
+{
1bdc94
+    char *id = object_get_canonical_path_component(OBJECT(pr_mgr));
1bdc94
+
1bdc94
+    if (id) {
1bdc94
+        qapi_event_send_pr_manager_status_changed(id, !!pr_mgr->ioc,
1bdc94
+                                                  &error_abort);
1bdc94
+    }
1bdc94
+}
1bdc94
+
1bdc94
 /* Called with lock held.  */
1bdc94
 static int pr_manager_helper_read(PRManagerHelper *pr_mgr,
1bdc94
                                   void *buf, int sz, Error **errp)
1bdc94
@@ -47,6 +58,7 @@ static int pr_manager_helper_read(PRManagerHelper *pr_mgr,
1bdc94
     if (r < 0) {
1bdc94
         object_unref(OBJECT(pr_mgr->ioc));
1bdc94
         pr_mgr->ioc = NULL;
1bdc94
+        pr_manager_send_status_changed_event(pr_mgr);
1bdc94
         return -EINVAL;
1bdc94
     }
1bdc94
 
1bdc94
@@ -72,6 +84,7 @@ static int pr_manager_helper_write(PRManagerHelper *pr_mgr,
1bdc94
             assert(n_written != QIO_CHANNEL_ERR_BLOCK);
1bdc94
             object_unref(OBJECT(pr_mgr->ioc));
1bdc94
             pr_mgr->ioc = NULL;
1bdc94
+            pr_manager_send_status_changed_event(pr_mgr);
1bdc94
             return n_written < 0 ? -EINVAL : 0;
1bdc94
         }
1bdc94
 
1bdc94
@@ -127,6 +140,7 @@ static int pr_manager_helper_initialize(PRManagerHelper *pr_mgr,
1bdc94
         goto out_close;
1bdc94
     }
1bdc94
 
1bdc94
+    pr_manager_send_status_changed_event(pr_mgr);
1bdc94
     return 0;
1bdc94
 
1bdc94
 out_close:
1bdc94
-- 
1bdc94
1.8.3.1
1bdc94