[lvm-devel] master - libdm: report: implement DM_REPORT_GROUP_SINGLE for a group containing single report only

Peter Rajnoha prajnoha at fedoraproject.org
Mon Jun 20 09:40:12 UTC 2016


Gitweb:        http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=a9fe57db1c285ef7052a1054891f5eb7dbbb01b2
Commit:        a9fe57db1c285ef7052a1054891f5eb7dbbb01b2
Parent:        9c8f912ea79d9b836c814b3d12cc331de634617e
Author:        Peter Rajnoha <prajnoha at redhat.com>
AuthorDate:    Thu Jun 16 11:23:56 2016 +0200
Committer:     Peter Rajnoha <prajnoha at redhat.com>
CommitterDate: Mon Jun 20 10:42:18 2016 +0200

libdm: report: implement DM_REPORT_GROUP_SINGLE for a group containing single report only

There's no change in output for this report group type - with this type,
we only make sure there's always only one report in a group at a time,
not more.
---
 WHATS_NEW_DM         |    1 +
 libdm/libdm-report.c |   50 ++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 51 insertions(+), 0 deletions(-)

diff --git a/WHATS_NEW_DM b/WHATS_NEW_DM
index c16f0c1..fdae74b 100644
--- a/WHATS_NEW_DM
+++ b/WHATS_NEW_DM
@@ -1,5 +1,6 @@
 Version 1.02.128 -
 =================================
+  Introduce DM_REPORT_GROUP_SINGLE for report group having single report only.
   Add dm_report_group_{create,push,pop,destroy} to support report grouping.
 
 Version 1.02.127 - 11th June 2016
diff --git a/libdm/libdm-report.c b/libdm/libdm-report.c
index ab87ba7..7ea5ebf 100644
--- a/libdm/libdm-report.c
+++ b/libdm/libdm-report.c
@@ -4485,6 +4485,11 @@ out:
 	return r;
 }
 
+static int _report_group_create_single(struct dm_report_group *group)
+{
+	return 1;
+}
+
 struct dm_report_group *dm_report_group_create(dm_report_group_type_t type, void *data)
 {
 	struct dm_report_group *group;
@@ -4513,6 +4518,10 @@ struct dm_report_group *dm_report_group_create(dm_report_group_type_t type, void
 	dm_list_add_h(&group->items, &item->list);
 
 	switch (type) {
+		case DM_REPORT_GROUP_SINGLE:
+			if (!_report_group_create_single(group))
+				goto_bad;
+			break;
 		default:
 			goto_bad;
 	}
@@ -4523,6 +4532,25 @@ bad:
 	return NULL;
 }
 
+static int _report_group_push_single(struct report_group_item *item, void *data)
+{
+	struct report_group_item *item_iter;
+	unsigned count = 0;
+
+	dm_list_iterate_items(item_iter, &item->group->items) {
+		if (item_iter->report)
+			count++;
+	}
+
+	if (count > 1) {
+		log_error("dm_report: unable to add more than one report "
+			  "to current report group");
+		return 0;
+	}
+
+	return 1;
+}
+
 int dm_report_group_push(struct dm_report_group *group, struct dm_report *report, void *data)
 {
 	struct report_group_item *item, *tmp_item;
@@ -4552,6 +4580,10 @@ int dm_report_group_push(struct dm_report_group *group, struct dm_report *report
 	dm_list_add_h(&group->items, &item->list);
 
 	switch (group->type) {
+		case DM_REPORT_GROUP_SINGLE:
+			if (!_report_group_push_single(item, data))
+				goto_bad;
+			break;
 		default:
 			goto_bad;
 	}
@@ -4563,6 +4595,11 @@ bad:
 	return 0;
 }
 
+static int _report_group_pop_single(struct report_group_item *item)
+{
+	return 1;
+}
+
 int dm_report_group_pop(struct dm_report_group *group)
 {
 	struct report_group_item *item;
@@ -4576,6 +4613,10 @@ int dm_report_group_pop(struct dm_report_group *group)
 	}
 
 	switch (group->type) {
+		case DM_REPORT_GROUP_SINGLE:
+			if (!_report_group_pop_single(item))
+				return_0;
+			break;
 		default:
 			return 0;
         }
@@ -4594,6 +4635,11 @@ int dm_report_group_pop(struct dm_report_group *group)
 	return 1;
 }
 
+static int _report_group_destroy_single(void)
+{
+	return 1;
+}
+
 int dm_report_group_destroy(struct dm_report_group *group)
 {
 	struct report_group_item *item, *tmp_item;
@@ -4610,6 +4656,10 @@ int dm_report_group_destroy(struct dm_report_group *group)
 	}
 
 	switch (group->type) {
+		case DM_REPORT_GROUP_SINGLE:
+			if (!_report_group_destroy_single())
+				goto_out;
+			break;
 		default:
 			goto_out;
         }




More information about the lvm-devel mailing list