openSUSE Commits
Threads by month
- ----- 2024 -----
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
January 2014
- 1 participants
- 1358 discussions
Hello community,
here is the log from the commit of package phpMyAdmin for openSUSE:Factory checked in at 2014-01-30 15:00:00
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/phpMyAdmin (Old)
and /work/SRC/openSUSE:Factory/.phpMyAdmin.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "phpMyAdmin"
Changes:
--------
--- /work/SRC/openSUSE:Factory/phpMyAdmin/phpMyAdmin.changes 2014-01-23 15:53:17.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.phpMyAdmin.new/phpMyAdmin.changes 2014-01-30 15:00:02.000000000 +0100
@@ -1,0 +2,16 @@
+Sun Jan 26 12:56:25 UTC 2014 - ecsos(a)schirra.net
+
+- update to 4.1.6 (2014-01-26)
+ - sf#4232 User not found after creating the user
+ - sf#4241 Confusing dialog when trying to create an already existing user
+ - sf#4239 Missing LIMIT clause for some queries
+ - rfe #1489 Do not show create icon when user has no privileges
+ - sf#4218 Chrome behavior with date fields
+ - sf#3579 NOW() function incorrectly selected (regression)
+ - sf#4244 Advisor complaints about MariaDB 10.x is version less than 5.1
+ - sf#3889 When login fails and error display is active, login data is displayed (regression)
+ - sf#4247 open_basedir warnings on export page
+ - sf#4013 AJAX request waiting until version info is retrieved
+ - sf#4248 js error when changing number of columns in status monitor
+
+-------------------------------------------------------------------
Old:
----
phpMyAdmin-4.1.5-all-languages.tar.bz2
New:
----
phpMyAdmin-4.1.6-all-languages.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ phpMyAdmin.spec ++++++
--- /var/tmp/diff_new_pack.memYua/_old 2014-01-30 15:00:03.000000000 +0100
+++ /var/tmp/diff_new_pack.memYua/_new 2014-01-30 15:00:03.000000000 +0100
@@ -34,7 +34,7 @@
Summary: Administration of MySQL over the web
License: GPL-2.0+
Group: Productivity/Networking/Web/Frontends
-Version: 4.1.5
+Version: 4.1.6
Release: 0
Url: http://www.phpMyAdmin.net
Source0: http://sourceforge.net/projects/phpmyadmin/files/%{name}-%{version}-all-lan…
++++++ phpMyAdmin-4.1.5-all-languages.tar.bz2 -> phpMyAdmin-4.1.6-all-languages.tar.bz2 ++++++
/work/SRC/openSUSE:Factory/phpMyAdmin/phpMyAdmin-4.1.5-all-languages.tar.bz2 /work/SRC/openSUSE:Factory/.phpMyAdmin.new/phpMyAdmin-4.1.6-all-languages.tar.bz2 differ: char 11, line 1
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: opensuse-commit+help(a)opensuse.org
1
0
Hello community,
here is the log from the commit of package pacemaker for openSUSE:Factory checked in at 2014-01-30 14:59:24
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/pacemaker (Old)
and /work/SRC/openSUSE:Factory/.pacemaker.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "pacemaker"
Changes:
--------
--- /work/SRC/openSUSE:Factory/pacemaker/pacemaker.changes 2014-01-15 19:36:01.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.pacemaker.new/pacemaker.changes 2014-01-30 14:59:25.000000000 +0100
@@ -1,0 +2,46 @@
+Sat Jan 25 06:22:21 UTC 2014 - ygao(a)suse.com
+
+- Build: Suppress -Wcast-align warnings/errors on arm and ppc64le (bnc#845525)
+ * Update pacemaker-Wno-cast-align.patch
+
+-------------------------------------------------------------------
+Sat Jan 25 01:22:06 UTC 2014 - ygao(a)suse.com
+
+- services: Do not block synced service executions
+- Upstream version cs: 96cd1941308be48fdf1e827b88ebd9410cf2010a
+
+-------------------------------------------------------------------
+Fri Jan 24 08:51:31 UTC 2014 - ygao(a)suse.com
+
+- crm_mon: Display brief output if "-b/--brief" is supplied or 'b' is toggled (FATE#314757)
+ * Add pacemaker-crm_mon-brief.patch
+- tools: Display pending state in crm_mon/crm_resource/crm_simulate if --pending/-j is supplied (cl#5178) (FATE#315159)
+ * Add pacemaker-display-pending-ops.patch
+
+-------------------------------------------------------------------
+Mon Jan 20 09:55:26 UTC 2014 - ygao(a)suse.com
+
+- Drop the obsolete patch (bnc#857779):
+ * bug-812269_pacemaker-fencing-update-cib.patch
+
+-------------------------------------------------------------------
+Mon Jan 20 09:47:13 UTC 2014 - ygao(a)suse.com
+
+- crm_report: Force grep to interpret logs as text
+- pengine: Force record pending for migrate_to actions
+- pengine: cl#5186 - Avoid running rsc on two nodes when node is fenced during migration
+- cluster: Fix segfault on removing a node (bnc#858745)
+- services: Reset the scheduling policy and priority for lrmd's children without replying on SCHED_RESET_ON_FORK (bnc#858857)
+- fencing: Update stonith device list only if stonith is enabled (bnc#857779)
+- services: Correctly reset the nice value for lrmd's children (bnc#858857)
+- pengine: Correctly perform partial migrations when node's uname is not equal to the id.
+- fencing: Immediately fail remote fencing operation on peer timeout
+- cl#5055: Improved migration support.
+- stonith_admin: Ensure pointers passed to sscanf() are properly initialized
+- Fix: Prevent potential use-of-NULL
+- crmd: Prevent memory leak in error paths
+- services: Fixes segfault associated with cancelling in-flight recurring operations. (bnc#859923)
+- pengine: cl#5174 - Allow resource sets and templates for location constraints (FATE#315158)
+- Upstream version cs: a3cda7619e71399d54f209296aebf3ba713a0bf4
+
+-------------------------------------------------------------------
Old:
----
bug-812269_pacemaker-fencing-update-cib.patch
pacemaker-1.1.10+git20140110.3e89301.tar.bz2
New:
----
pacemaker-1.1.10+git20140124.96cd194.tar.bz2
pacemaker-crm_mon-brief.patch
pacemaker-display-pending-ops.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ pacemaker.spec ++++++
--- /var/tmp/diff_new_pack.mXP18i/_old 2014-01-30 14:59:26.000000000 +0100
+++ /var/tmp/diff_new_pack.mXP18i/_new 2014-01-30 14:59:26.000000000 +0100
@@ -95,7 +95,7 @@
Summary: Scalable High-Availability cluster resource manager
License: GPL-2.0+ and LGPL-2.1+
Group: Productivity/Clustering/HA
-Version: 1.1.10+git20140110.3e89301
+Version: 1.1.10+git20140124.96cd194
Release: 0
#Release: %{pcmk_release}%{?dist}
Url: http://www.clusterlabs.org
@@ -111,9 +111,10 @@
Patch5: pacemaker-colocated-utilization.patch
Patch6: pacemaker-cibsecret-tool-temp-disabled.patch
Patch7: pacemaker-nagios-plugin-dir.patch
-Patch8: bug-812269_pacemaker-fencing-update-cib.patch
-Patch9: bug-812269_pacemaker-fencing-device-register-messages.patch
-Patch10: pacemaker-Wno-cast-align.patch
+Patch8: bug-812269_pacemaker-fencing-device-register-messages.patch
+Patch9: pacemaker-Wno-cast-align.patch
+Patch10: pacemaker-display-pending-ops.patch
+Patch11: pacemaker-crm_mon-brief.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-build
Provides: pacemaker-ticket-support = 2.0
Conflicts: heartbeat < 3.0
@@ -400,6 +401,7 @@
%patch8 -p1
%patch9 -p1
%patch10 -p1
+%patch11 -p1
# Force the local time
#
++++++ _service ++++++
--- /var/tmp/diff_new_pack.mXP18i/_old 2014-01-30 14:59:26.000000000 +0100
+++ /var/tmp/diff_new_pack.mXP18i/_new 2014-01-30 14:59:26.000000000 +0100
@@ -11,7 +11,7 @@
<param name="version">1.1.10</param>
-->
<param name="versionformat">1.1.10+git%cd.%h</param>
- <param name="revision">3e8930190b8b53565ef4ca3fa00006c41511be9f</param>
+ <param name="revision">96cd1941308be48fdf1e827b88ebd9410cf2010a</param>
</service>
<service name="recompress" mode="disabled">
++++++ pacemaker-1.1.10+git20140110.3e89301.tar.bz2 -> pacemaker-1.1.10+git20140124.96cd194.tar.bz2 ++++++
/work/SRC/openSUSE:Factory/pacemaker/pacemaker-1.1.10+git20140110.3e89301.tar.bz2 /work/SRC/openSUSE:Factory/.pacemaker.new/pacemaker-1.1.10+git20140124.96cd194.tar.bz2 differ: char 12, line 1
++++++ pacemaker-Wno-cast-align.patch ++++++
--- /var/tmp/diff_new_pack.mXP18i/_old 2014-01-30 14:59:26.000000000 +0100
+++ /var/tmp/diff_new_pack.mXP18i/_new 2014-01-30 14:59:26.000000000 +0100
@@ -1,13 +1,102 @@
-Index: pacemaker/lib/common/Makefile.am
-===================================================================
---- pacemaker.orig/lib/common/Makefile.am
-+++ pacemaker/lib/common/Makefile.am
-@@ -32,6 +32,8 @@ lib_LTLIBRARIES = libcrmcommon.la
-
- CFLAGS = $(CFLAGS_COPY:-Wcast-qual=) -fPIC
-
-+ipc.lo remote.lo: CFLAGS += -Wno-cast-align
-+
- libcrmcommon_la_SOURCES = ipc.c utils.c xml.c iso8601.c remote.c mainloop.c logging.c
- if BUILD_CIBSECRETS
- libcrmcommon_la_SOURCES += cib_secrets.c
+commit 5e0e36364e242029717ef5bd2061344b8e38e7d2
+Author: Gao,Yan <ygao(a)suse.com>
+Date: Sat Jan 25 14:30:25 2014 +0800
+
+ Build: Suppress -Wcast-align warnings/errors on arm and ppc64le
+
+diff --git a/lib/common/ipc.c b/lib/common/ipc.c
+index 3d34706..d7b525f 100644
+--- a/lib/common/ipc.c
++++ b/lib/common/ipc.c
+@@ -894,7 +894,7 @@ crm_ipc_ready(crm_ipc_t * client)
+ static int
+ crm_ipc_decompress(crm_ipc_t * client)
+ {
+- struct crm_ipc_response_header *header = (struct crm_ipc_response_header *)client->buffer;
++ struct crm_ipc_response_header *header = (struct crm_ipc_response_header *)(void *)client->buffer;
+
+ if (header->size_compressed) {
+ int rc = 0;
+@@ -926,7 +926,7 @@ crm_ipc_decompress(crm_ipc_t * client)
+ CRM_ASSERT(size_u == header->size_uncompressed);
+
+ memcpy(uncompressed, client->buffer, hdr_offset); /* Preserve the header */
+- header = (struct crm_ipc_response_header *)uncompressed;
++ header = (struct crm_ipc_response_header *)(void *)uncompressed;
+
+ free(client->buffer);
+ client->buf_size = new_buf_size;
+@@ -957,7 +957,7 @@ crm_ipc_read(crm_ipc_t * client)
+ return rc;
+ }
+
+- header = (struct crm_ipc_response_header *)client->buffer;
++ header = (struct crm_ipc_response_header *)(void *)client->buffer;
+ if(header->version > PCMK_IPC_VERSION) {
+ crm_err("Filtering incompatible v%d IPC message, we only support versions <= %d",
+ header->version, PCMK_IPC_VERSION);
+@@ -1044,7 +1044,7 @@ internal_ipc_get_reply(crm_ipc_t * client, int request_id, int ms_timeout)
+ return rc;
+ }
+
+- hdr = (struct crm_ipc_response_header *)client->buffer;
++ hdr = (struct crm_ipc_response_header *)(void *)client->buffer;
+ if (hdr->qb.id == request_id) {
+ /* Got it */
+ break;
+@@ -1173,7 +1173,7 @@ crm_ipc_send(crm_ipc_t * client, xmlNode * message, enum crm_ipc_flags flags, in
+ }
+
+ if (rc > 0) {
+- struct crm_ipc_response_header *hdr = (struct crm_ipc_response_header *)client->buffer;
++ struct crm_ipc_response_header *hdr = (struct crm_ipc_response_header *)(void *)client->buffer;
+
+ crm_trace("Received response %d, size=%d, rc=%ld, text: %.200s", hdr->qb.id, hdr->qb.size,
+ rc, crm_ipc_buffer(client));
+diff --git a/lib/common/remote.c b/lib/common/remote.c
+index acffccb..02099e6 100644
+--- a/lib/common/remote.c
++++ b/lib/common/remote.c
+@@ -353,7 +353,7 @@ crm_remote_send(crm_remote_t * remote, xmlNode * msg)
+ header->size_total = iov[0].iov_len + iov[1].iov_len;
+
+ crm_trace("Sending len[0]=%d, start=%x\n",
+- (int)iov[0].iov_len, *(int*)xml_text);
++ (int)iov[0].iov_len, *(int*)(void *)xml_text);
+ rc = crm_remote_sendv(remote, iov, 2);
+ if (rc < 0) {
+ crm_err("Failed to send remote msg, rc = %d", rc);
+@@ -861,13 +861,13 @@ crm_remote_tcp_connect_async(const char *host, int port, int timeout, /*ms */
+
+ memset(buffer, 0, DIMOF(buffer));
+ if (addr->sa_family == AF_INET6) {
+- struct sockaddr_in6 *addr_in = (struct sockaddr_in6 *)addr;
++ struct sockaddr_in6 *addr_in = (struct sockaddr_in6 *)(void *)addr;
+
+ addr_in->sin6_port = htons(port);
+ inet_ntop(addr->sa_family, &addr_in->sin6_addr, buffer, DIMOF(buffer));
+
+ } else {
+- struct sockaddr_in *addr_in = (struct sockaddr_in *)addr;
++ struct sockaddr_in *addr_in = (struct sockaddr_in *)(void *)addr;
+
+ addr_in->sin_port = htons(port);
+ inet_ntop(addr->sa_family, &addr_in->sin_addr, buffer, DIMOF(buffer));
+diff --git a/lrmd/tls_backend.c b/lrmd/tls_backend.c
+index 1600353..32d761f 100644
+--- a/lrmd/tls_backend.c
++++ b/lrmd/tls_backend.c
+@@ -264,11 +264,11 @@ bind_and_listen(struct addrinfo *addr)
+ char buffer[256] = { 0, };
+
+ if (addr->ai_family == AF_INET6) {
+- struct sockaddr_in6 *addr_in = (struct sockaddr_in6 *)addr->ai_addr;
++ struct sockaddr_in6 *addr_in = (struct sockaddr_in6 *)(void *)addr->ai_addr;
+ inet_ntop(addr->ai_family, &addr_in->sin6_addr, buffer, DIMOF(buffer));
+
+ } else {
+- struct sockaddr_in *addr_in = (struct sockaddr_in *)addr->ai_addr;
++ struct sockaddr_in *addr_in = (struct sockaddr_in *)(void *)addr->ai_addr;
+ inet_ntop(addr->ai_family, &addr_in->sin_addr, buffer, DIMOF(buffer));
+ }
+
++++++ pacemaker-crm_mon-brief.patch ++++++
commit 9584fca04fc5b7a72dba09cc44fcfbe917325737
Author: Gao,Yan <ygao(a)suse.com>
Date: Fri Jan 24 16:11:36 2014 +0800
Feature: crm_mon: Display brief output if "-b/--brief" is supplied or 'b' is toggled
It's very helpful if there are many same types of resources.
If -b/--brief is supplied, the output is like:
6 (ocf::pacemaker:Dummy): Active node1
If -r/--inactive is also supplied:
6/10 (ocf::pacemaker:Dummy): Active node1
0/5 (ocf::heartbeat:Dummy): Active
Output for a group is like:
Resource Group: group1
18/20 (ocf::pacemaker:Dummy): Active node1
12/15 (ocf::heartbeat:Dummy): Active node1
If -n/--group-by-node is also supplied, the output of the node is like:
Node node1: online
24 (ocf::pacemaker:Dummy): Active
12 (ocf::heartbeat:Dummy): Active
diff --git a/include/crm/pengine/common.h b/include/crm/pengine/common.h
index c1901ef..ddca95d 100644
--- a/include/crm/pengine/common.h
+++ b/include/crm/pengine/common.h
@@ -98,6 +98,7 @@ enum pe_print_options {
pe_print_suppres_nl = 0x0200,
pe_print_xml = 0x0400,
pe_print_pending = 0x0800,
+ pe_print_brief = 0x1000,
};
/* *INDENT-ON* */
diff --git a/include/crm/pengine/internal.h b/include/crm/pengine/internal.h
index 46e63c4..072c0a9 100644
--- a/include/crm/pengine/internal.h
+++ b/include/crm/pengine/internal.h
@@ -265,4 +265,7 @@ gboolean is_baremetal_remote_node(node_t *node);
gboolean is_container_remote_node(node_t *node);
gboolean is_remote_node(node_t *node);
resource_t * rsc_contains_remote_node(pe_working_set_t * data_set, resource_t *rsc);
+
+void print_rscs_brief(GListPtr rsc_list, const char * pre_text, long options,
+ void * print_data, gboolean print_all);
#endif
diff --git a/lib/pengine/group.c b/lib/pengine/group.c
index 885486e..831376c 100644
--- a/lib/pengine/group.c
+++ b/lib/pengine/group.c
@@ -168,15 +168,20 @@ group_print(resource_t * rsc, const char *pre_text, long options, void *print_da
status_print("\n");
}
- for (; gIter != NULL; gIter = gIter->next) {
- resource_t *child_rsc = (resource_t *) gIter->data;
+ if (options & pe_print_brief) {
+ print_rscs_brief(rsc->children, child_text, options, print_data, TRUE);
- if (options & pe_print_html) {
- status_print("<li>\n");
- }
- child_rsc->fns->print(child_rsc, child_text, options, print_data);
- if (options & pe_print_html) {
- status_print("</li>\n");
+ } else {
+ for (; gIter != NULL; gIter = gIter->next) {
+ resource_t *child_rsc = (resource_t *) gIter->data;
+
+ if (options & pe_print_html) {
+ status_print("<li>\n");
+ }
+ child_rsc->fns->print(child_rsc, child_text, options, print_data);
+ if (options & pe_print_html) {
+ status_print("</li>\n");
+ }
}
}
diff --git a/lib/pengine/native.c b/lib/pengine/native.c
index be95ba1..b223ab3 100644
--- a/lib/pengine/native.c
+++ b/lib/pengine/native.c
@@ -687,3 +687,160 @@ native_location(resource_t * rsc, GListPtr * list, gboolean current)
g_list_free(result);
return one;
}
+
+static void
+get_rscs_brief(GListPtr rsc_list, GHashTable * rsc_table, GHashTable * active_table)
+{
+ GListPtr gIter = rsc_list;
+
+ for (; gIter != NULL; gIter = gIter->next) {
+ resource_t *rsc = (resource_t *) gIter->data;
+
+ const char *class = crm_element_value(rsc->xml, XML_AGENT_ATTR_CLASS);
+ const char *kind = crm_element_value(rsc->xml, XML_ATTR_TYPE);
+
+ int offset = 0;
+ char buffer[LINE_MAX];
+
+ int *rsc_counter = NULL;
+ int *active_counter = NULL;
+
+ if (rsc->variant != pe_native) {
+ continue;
+ }
+
+ offset += snprintf(buffer + offset, LINE_MAX - offset, "%s", class);
+ if (safe_str_eq(class, "ocf")) {
+ const char *prov = crm_element_value(rsc->xml, XML_AGENT_ATTR_PROVIDER);
+ offset += snprintf(buffer + offset, LINE_MAX - offset, "::%s", prov);
+ }
+ offset += snprintf(buffer + offset, LINE_MAX - offset, ":%s", kind);
+
+ if (rsc_table) {
+ rsc_counter = g_hash_table_lookup(rsc_table, buffer);
+ if (rsc_counter == NULL) {
+ rsc_counter = calloc(1, sizeof(int));
+ *rsc_counter = 0;
+ g_hash_table_insert(rsc_table, strdup(buffer), rsc_counter);
+ }
+ (*rsc_counter)++;
+ }
+
+ if (active_table) {
+ GListPtr gIter2 = rsc->running_on;
+
+ for (; gIter2 != NULL; gIter2 = gIter2->next) {
+ node_t *node = (node_t *) gIter2->data;
+ GHashTable *node_table = NULL;
+
+ if (node->details->unclean == FALSE && node->details->online == FALSE) {
+ continue;
+ }
+
+ node_table = g_hash_table_lookup(active_table, node->details->uname);
+ if (node_table == NULL) {
+ node_table = g_hash_table_new_full(crm_str_hash, g_str_equal, free, free);
+ g_hash_table_insert(active_table, strdup(node->details->uname), node_table);
+ }
+
+ active_counter = g_hash_table_lookup(node_table, buffer);
+ if (active_counter == NULL) {
+ active_counter = calloc(1, sizeof(int));
+ *active_counter = 0;
+ g_hash_table_insert(node_table, strdup(buffer), active_counter);
+ }
+ (*active_counter)++;
+ }
+ }
+ }
+}
+
+static void
+destroy_node_table(gpointer data)
+{
+ GHashTable *node_table = data;
+
+ if (node_table) {
+ g_hash_table_destroy(node_table);
+ }
+}
+
+void
+print_rscs_brief(GListPtr rsc_list, const char *pre_text, long options,
+ void *print_data, gboolean print_all)
+{
+ GHashTable *rsc_table = g_hash_table_new_full(crm_str_hash, g_str_equal, free, free);
+ GHashTable *active_table = g_hash_table_new_full(crm_str_hash, g_str_equal,
+ free, destroy_node_table);
+ GHashTableIter hash_iter;
+ char *type = NULL;
+ int *rsc_counter = NULL;
+
+ get_rscs_brief(rsc_list, rsc_table, active_table);
+
+ g_hash_table_iter_init(&hash_iter, rsc_table);
+ while (g_hash_table_iter_next(&hash_iter, (gpointer *)&type, (gpointer *)&rsc_counter)) {
+ GHashTableIter hash_iter2;
+ char *node_name = NULL;
+ GHashTable *node_table = NULL;
+ int active_counter_all = 0;
+
+ g_hash_table_iter_init(&hash_iter2, active_table);
+ while (g_hash_table_iter_next(&hash_iter2, (gpointer *)&node_name, (gpointer *)&node_table)) {
+ int *active_counter = g_hash_table_lookup(node_table, type);
+
+ if (active_counter == NULL || *active_counter == 0) {
+ continue;
+
+ } else {
+ active_counter_all += *active_counter;
+ }
+
+ if (options & pe_print_rsconly) {
+ node_name = NULL;
+ }
+
+ if (options & pe_print_html) {
+ status_print("<li>\n");
+ }
+
+ if (print_all) {
+ status_print("%s%d/%d\t(%s):\tActive %s\n", pre_text ? pre_text : "",
+ active_counter ? *active_counter : 0,
+ rsc_counter ? *rsc_counter : 0, type,
+ active_counter && (*active_counter > 0) && node_name ? node_name : "");
+ } else {
+ status_print("%s%d\t(%s):\tActive %s\n", pre_text ? pre_text : "",
+ active_counter ? *active_counter : 0, type,
+ active_counter && (*active_counter > 0) && node_name ? node_name : "");
+ }
+
+ if (options & pe_print_html) {
+ status_print("</li>\n");
+ }
+ }
+
+ if (print_all && active_counter_all == 0) {
+ if (options & pe_print_html) {
+ status_print("<li>\n");
+ }
+
+ status_print("%s%d/%d\t(%s):\tActive\n", pre_text ? pre_text : "",
+ active_counter_all,
+ rsc_counter ? *rsc_counter : 0, type);
+
+ if (options & pe_print_html) {
+ status_print("</li>\n");
+ }
+ }
+ }
+
+ if (rsc_table) {
+ g_hash_table_destroy(rsc_table);
+ rsc_table = NULL;
+ }
+ if (active_table) {
+ g_hash_table_destroy(active_table);
+ active_table = NULL;
+ }
+}
diff --git a/tools/crm_mon.c b/tools/crm_mon.c
index 746094f..a69a4fe 100644
--- a/tools/crm_mon.c
+++ b/tools/crm_mon.c
@@ -97,6 +97,7 @@ gboolean print_tickets = FALSE;
gboolean watch_fencing = FALSE;
gboolean hide_headers = FALSE;
gboolean print_pending = FALSE;
+gboolean print_brief = FALSE;
/* FIXME allow, detect, and correctly interpret glob pattern or regex? */
const char *print_neg_location_prefix;
@@ -342,6 +343,7 @@ static struct crm_option long_options[] = {
{"show-node-attributes", 0, 0, 'A', "Display node attributes" },
{"hide-headers", 0, 0, 'D', "\tHide all headers" },
{"pending", 0, 0, 'j', "\t\tDisplay pending state if 'record-pending' is enabled" },
+ {"brief", 0, 0, 'b', "\t\tBrief output" },
{"-spacer-", 1, 0, '-', "\nAdditional Options:"},
{"interval", 1, 0, 'i', "\tUpdate frequency in seconds" },
@@ -454,6 +456,9 @@ detect_user_input(GIOChannel *channel, GIOCondition condition, gpointer unused)
case 'j':
print_pending = ! print_pending;
break;
+ case 'b':
+ print_brief = ! print_brief;
+ break;
case '?':
config_mode = TRUE;
break;
@@ -478,6 +483,7 @@ detect_user_input(GIOChannel *channel, GIOCondition condition, gpointer unused)
print_as("%c L: \t%s\n", print_neg_location_prefix ? '*': ' ', get_option_desc('L'));
print_as("%c D: \t%s\n", hide_headers ? '*': ' ', get_option_desc('D'));
print_as("%c j: \t%s\n", print_pending ? '*': ' ', get_option_desc('j'));
+ print_as("%c b: \t%s\n", print_brief ? '*': ' ', get_option_desc('b'));
print_as("\n");
print_as("Toggle fields via field letter, type any other key to return");
}
@@ -562,6 +568,9 @@ main(int argc, char **argv)
case 'D':
hide_headers = TRUE;
break;
+ case 'b':
+ print_brief = TRUE;
+ break;
case 'c':
print_tickets = TRUE;
break;
@@ -1326,7 +1335,11 @@ print_status(pe_working_set_t * data_set)
print_as("Node %s (%s): %s\n", node_name, node->details->id, node_mode);
}
- if (group_by_node) {
+ if (print_brief && group_by_node) {
+ print_rscs_brief(node->details->running_rsc, "\t", print_opts | pe_print_rsconly,
+ stdout, FALSE);
+
+ } else if (group_by_node) {
GListPtr gIter2 = NULL;
for (gIter2 = node->details->running_rsc; gIter2 != NULL; gIter2 = gIter2->next) {
@@ -1368,12 +1381,24 @@ print_status(pe_working_set_t * data_set)
if (group_by_node == FALSE || inactive_resources) {
print_as("\n");
+
+ if (print_brief && group_by_node == FALSE) {
+ print_opts |= pe_print_brief;
+ print_rscs_brief(data_set->resources, NULL, print_opts, stdout,
+ inactive_resources);
+ }
+
for (gIter = data_set->resources; gIter != NULL; gIter = gIter->next) {
resource_t *rsc = (resource_t *) gIter->data;
gboolean is_active = rsc->fns->active(rsc, TRUE);
gboolean partially_active = rsc->fns->active(rsc, FALSE);
+ if (print_brief && group_by_node == FALSE
+ && rsc->variant == pe_native) {
+ continue;
+ }
+
if (is_set(rsc->flags, pe_rsc_orphan) && is_active == FALSE) {
continue;
@@ -1740,7 +1765,13 @@ print_html_status(pe_working_set_t * data_set, const char *filename, gboolean we
fprintf(stream, "Node: %s (%s): %s", node->details->uname, node->details->id,
"<font color=\"red\">OFFLINE</font>\n");
}
- if (group_by_node) {
+ if (print_brief && group_by_node) {
+ fprintf(stream, "<ul>\n");
+ print_rscs_brief(node->details->running_rsc, NULL, print_opts | pe_print_rsconly,
+ stream, FALSE);
+ fprintf(stream, "</ul>\n");
+
+ } else if (group_by_node) {
GListPtr lpc2 = NULL;
fprintf(stream, "<ul>\n");
@@ -1765,11 +1796,22 @@ print_html_status(pe_working_set_t * data_set, const char *filename, gboolean we
}
if (group_by_node == FALSE || inactive_resources) {
+ if (print_brief && group_by_node == FALSE) {
+ print_opts |= pe_print_brief;
+ print_rscs_brief(data_set->resources, NULL, print_opts, stream,
+ inactive_resources);
+ }
+
for (gIter = data_set->resources; gIter != NULL; gIter = gIter->next) {
resource_t *rsc = (resource_t *) gIter->data;
gboolean is_active = rsc->fns->active(rsc, TRUE);
gboolean partially_active = rsc->fns->active(rsc, FALSE);
+ if (print_brief && group_by_node == FALSE
+ && rsc->variant == pe_native) {
+ continue;
+ }
+
if (is_set(rsc->flags, pe_rsc_orphan) && is_active == FALSE) {
continue;
++++++ pacemaker-display-pending-ops.patch ++++++
commit a33aadaf14f1e0cc2fb9d025801a2d86e3732275
Author: Gao,Yan <ygao(a)suse.com>
Date: Mon Jan 13 20:03:28 2014 +0800
Feature: tools: Display pending state in crm_mon/crm_resource/crm_simulate if --pending/-j is supplied (cl#5178)
diff --git a/include/crm/pengine/common.h b/include/crm/pengine/common.h
index 2477e47..c1901ef 100644
--- a/include/crm/pengine/common.h
+++ b/include/crm/pengine/common.h
@@ -97,6 +97,7 @@ enum pe_print_options {
pe_print_ops = 0x0100,
pe_print_suppres_nl = 0x0200,
pe_print_xml = 0x0400,
+ pe_print_pending = 0x0800,
};
/* *INDENT-ON* */
diff --git a/include/crm/pengine/status.h b/include/crm/pengine/status.h
index 3f3de17..3a380cc 100644
--- a/include/crm/pengine/status.h
+++ b/include/crm/pengine/status.h
@@ -275,6 +275,8 @@ struct resource_s {
resource_t *container;
GListPtr fillers;
+
+ char *pending_task;
};
struct pe_action_s {
diff --git a/lib/pengine/complex.c b/lib/pengine/complex.c
index 2ada463..a592fc8 100644
--- a/lib/pengine/complex.c
+++ b/lib/pengine/complex.c
@@ -743,5 +743,6 @@ common_free(resource_t * rsc)
free(rsc->clone_name);
free(rsc->allocated_to);
free(rsc->variant_opaque);
+ free(rsc->pending_task);
free(rsc);
}
diff --git a/lib/pengine/native.c b/lib/pengine/native.c
index adfd5ba..be95ba1 100644
--- a/lib/pengine/native.c
+++ b/lib/pengine/native.c
@@ -291,12 +291,60 @@ native_print_attr(gpointer key, gpointer value, gpointer user_data)
status_print("Option: %s = %s\n", (char *)key, (char *)value);
}
+static const char *
+native_pending_state(resource_t * rsc)
+{
+ const char *pending_state = NULL;
+
+ if (safe_str_eq(rsc->pending_task, CRMD_ACTION_START)) {
+ pending_state = "Starting";
+
+ } else if (safe_str_eq(rsc->pending_task, CRMD_ACTION_STOP)) {
+ pending_state = "Stopping";
+
+ } else if (safe_str_eq(rsc->pending_task, CRMD_ACTION_MIGRATE)) {
+ pending_state = "Migrating";
+
+ } else if (safe_str_eq(rsc->pending_task, CRMD_ACTION_MIGRATED)) {
+ /* Work might be done in here. */
+ pending_state = "Migrating";
+
+ } else if (safe_str_eq(rsc->pending_task, CRMD_ACTION_PROMOTE)) {
+ pending_state = "Promoting";
+
+ } else if (safe_str_eq(rsc->pending_task, CRMD_ACTION_DEMOTE)) {
+ pending_state = "Demoting";
+ }
+
+ return pending_state;
+}
+
+static const char *
+native_pending_task(resource_t * rsc)
+{
+ const char *pending_task = NULL;
+
+ if (safe_str_eq(rsc->pending_task, CRMD_ACTION_NOTIFY)) {
+ /* "Notifying" is not very useful to be shown. */
+ pending_task = NULL;
+
+ } else if (safe_str_eq(rsc->pending_task, CRMD_ACTION_STATUS)) {
+ pending_task = "Monitoring";
+
+ } else if (safe_str_eq(rsc->pending_task, "probe")) {
+ pending_task = "Checking";
+ }
+
+ return pending_task;
+}
+
static void
native_print_xml(resource_t * rsc, const char *pre_text, long options, void *print_data)
{
enum rsc_role_e role = rsc->role;
const char *class = crm_element_value(rsc->xml, XML_AGENT_ATTR_CLASS);
const char *prov = crm_element_value(rsc->xml, XML_AGENT_ATTR_PROVIDER);
+ const char *rsc_state = NULL;
if(role == RSC_ROLE_STARTED && uber_parent(rsc)->variant == pe_master) {
role = RSC_ROLE_SLAVE;
@@ -308,7 +356,14 @@ native_print_xml(resource_t * rsc, const char *pre_text, long options, void *pri
status_print("resource_agent=\"%s%s%s:%s\" ",
class,
prov ? "::" : "", prov ? prov : "", crm_element_value(rsc->xml, XML_ATTR_TYPE));
- status_print("role=\"%s\" ", role2text(role));
+
+ if (options & pe_print_pending) {
+ rsc_state = native_pending_state(rsc);
+ }
+ if (rsc_state == NULL) {
+ rsc_state = role2text(role);
+ }
+ status_print("role=\"%s\" ", rsc_state);
status_print("active=\"%s\" ", rsc->fns->active(rsc, TRUE) ? "true" : "false");
status_print("orphaned=\"%s\" ", is_set(rsc->flags, pe_rsc_orphan) ? "true" : "false");
status_print("managed=\"%s\" ", is_set(rsc->flags, pe_rsc_managed) ? "true" : "false");
@@ -317,6 +372,14 @@ native_print_xml(resource_t * rsc, const char *pre_text, long options, void *pri
is_set(rsc->flags, pe_rsc_failure_ignored) ? "true" : "false");
status_print("nodes_running_on=\"%d\" ", g_list_length(rsc->running_on));
+ if (options & pe_print_pending) {
+ const char *pending_task = native_pending_task(rsc);
+
+ if (pending_task) {
+ status_print("pending=\"%s\" ", pending_task);
+ }
+ }
+
if (options & pe_print_dev) {
status_print("provisional=\"%s\" ",
is_set(rsc->flags, pe_rsc_provisional) ? "true" : "false");
@@ -423,12 +486,29 @@ native_print(resource_t * rsc, const char *pre_text, long options, void *print_d
} else if(is_set(rsc->flags, pe_rsc_failed)) {
offset += snprintf(buffer + offset, LINE_MAX - offset, "FAILED ");
} else {
- offset += snprintf(buffer + offset, LINE_MAX - offset, "%s ", role2text(rsc->role));
+ const char *rsc_state = NULL;
+
+ if (options & pe_print_pending) {
+ rsc_state = native_pending_state(rsc);
+ }
+ if (rsc_state == NULL) {
+ rsc_state = role2text(rsc->role);
+ }
+ offset += snprintf(buffer + offset, LINE_MAX - offset, "%s ", rsc_state);
}
if(node) {
offset += snprintf(buffer + offset, LINE_MAX - offset, "%s ", node->details->uname);
}
+
+ if (options & pe_print_pending) {
+ const char *pending_task = native_pending_task(rsc);
+
+ if (pending_task) {
+ offset += snprintf(buffer + offset, LINE_MAX - offset, "(%s) ", pending_task);
+ }
+ }
+
if(is_not_set(rsc->flags, pe_rsc_managed)) {
offset += snprintf(buffer + offset, LINE_MAX - offset, "(unmanaged) ");
}
diff --git a/lib/pengine/unpack.c b/lib/pengine/unpack.c
index aaa9a67..57960cc 100644
--- a/lib/pengine/unpack.c
+++ b/lib/pengine/unpack.c
@@ -2757,6 +2757,7 @@ unpack_rsc_op(resource_t * rsc, node_t * node, xmlNode * xml_op,
int rc = 0;
int status = PCMK_LRM_OP_PENDING-1;
int target_rc = get_target_rc(xml_op);
+ int interval = 0;
gboolean expired = FALSE;
resource_t *parent = rsc;
@@ -2774,6 +2775,7 @@ unpack_rsc_op(resource_t * rsc, node_t * node, xmlNode * xml_op,
crm_element_value_int(xml_op, XML_LRM_ATTR_RC, &rc);
crm_element_value_int(xml_op, XML_LRM_ATTR_CALLID, &task_id);
crm_element_value_int(xml_op, XML_LRM_ATTR_OPSTATUS, &status);
+ crm_element_value_int(xml_op, XML_LRM_ATTR_INTERVAL, &interval);
CRM_CHECK(task != NULL, return FALSE);
CRM_CHECK(status <= PCMK_LRM_OP_NOT_INSTALLED, return FALSE);
@@ -2807,7 +2809,6 @@ unpack_rsc_op(resource_t * rsc, node_t * node, xmlNode * xml_op,
}
if (expired && target_rc != rc) {
- int interval = 0;
const char *magic = crm_element_value(xml_op, XML_ATTR_TRANSITION_MAGIC);
pe_rsc_debug(rsc, "Expired operation '%s' on %s returned '%s' (%d) instead of the expected value: '%s' (%d)",
@@ -2815,7 +2816,6 @@ unpack_rsc_op(resource_t * rsc, node_t * node, xmlNode * xml_op,
services_ocf_exitcode_str(rc), rc,
services_ocf_exitcode_str(target_rc), target_rc);
- crm_element_value_int(xml_op, XML_LRM_ATTR_INTERVAL, &interval);
if(interval == 0) {
crm_notice("Ignoring expired calculated failure %s (rc=%d, magic=%s) on %s",
task_key, rc, magic, node->details->uname);
@@ -2858,6 +2858,14 @@ unpack_rsc_op(resource_t * rsc, node_t * node, xmlNode * xml_op,
stop_action(rsc, target, FALSE);
}
}
+
+ if (safe_str_eq(task, CRMD_ACTION_STATUS) && interval == 0) {
+ /* Temporarily comment this out until cl#5184 is fixed */
+ /*rsc->pending_task = strdup("probe");*/
+
+ } else {
+ rsc->pending_task = strdup(task);
+ }
break;
case PCMK_LRM_OP_DONE:
diff --git a/tools/crm_mon.c b/tools/crm_mon.c
index a9dd1b7..746094f 100644
--- a/tools/crm_mon.c
+++ b/tools/crm_mon.c
@@ -96,6 +96,7 @@ gboolean print_last_change = TRUE;
gboolean print_tickets = FALSE;
gboolean watch_fencing = FALSE;
gboolean hide_headers = FALSE;
+gboolean print_pending = FALSE;
/* FIXME allow, detect, and correctly interpret glob pattern or regex? */
const char *print_neg_location_prefix;
@@ -340,6 +341,7 @@ static struct crm_option long_options[] = {
{"neg-locations", 2, 0, 'L', "Display negative location constraints [optionally filtered by id prefix]"},
{"show-node-attributes", 0, 0, 'A', "Display node attributes" },
{"hide-headers", 0, 0, 'D', "\tHide all headers" },
+ {"pending", 0, 0, 'j', "\t\tDisplay pending state if 'record-pending' is enabled" },
{"-spacer-", 1, 0, '-', "\nAdditional Options:"},
{"interval", 1, 0, 'i', "\tUpdate frequency in seconds" },
@@ -449,6 +451,9 @@ detect_user_input(GIOChannel *channel, GIOCondition condition, gpointer unused)
case 'D':
hide_headers = ! hide_headers;
break;
+ case 'j':
+ print_pending = ! print_pending;
+ break;
case '?':
config_mode = TRUE;
break;
@@ -472,6 +477,7 @@ detect_user_input(GIOChannel *channel, GIOCondition condition, gpointer unused)
print_as("%c A: \t%s\n", print_nodes_attr ? '*': ' ', get_option_desc('A'));
print_as("%c L: \t%s\n", print_neg_location_prefix ? '*': ' ', get_option_desc('L'));
print_as("%c D: \t%s\n", hide_headers ? '*': ' ', get_option_desc('D'));
+ print_as("%c j: \t%s\n", print_pending ? '*': ' ', get_option_desc('j'));
print_as("\n");
print_as("Toggle fields via field letter, type any other key to return");
}
@@ -550,6 +556,9 @@ main(int argc, char **argv)
case 'L':
print_neg_location_prefix = optarg ?: "";
break;
+ case 'j':
+ print_pending = TRUE;
+ break;
case 'D':
hide_headers = TRUE;
break;
@@ -1159,6 +1168,10 @@ print_status(pe_working_set_t * data_set)
print_opts = pe_print_printf;
}
+ if (print_pending) {
+ print_opts |= pe_print_pending;
+ }
+
updates++;
dc = data_set->dc_node;
@@ -1463,9 +1476,14 @@ print_xml_status(pe_working_set_t * data_set)
xmlNode *stack = NULL;
xmlNode *quorum_node = NULL;
const char *quorum_votes = "unknown";
+ int print_opts = pe_print_xml;
dc = data_set->dc_node;
+ if (print_pending) {
+ print_opts |= pe_print_pending;
+ }
+
fprintf(stream, "<?xml version=\"1.0\"?>\n");
fprintf(stream, "<crm_mon version=\"%s\">\n", VERSION);
@@ -1567,7 +1585,7 @@ print_xml_status(pe_working_set_t * data_set)
for (lpc2 = node->details->running_rsc; lpc2 != NULL; lpc2 = lpc2->next) {
resource_t *rsc = (resource_t *) lpc2->data;
- rsc->fns->print(rsc, " ", pe_print_xml | pe_print_rsconly, stream);
+ rsc->fns->print(rsc, " ", print_opts | pe_print_rsconly, stream);
}
fprintf(stream, " </node>\n");
} else {
@@ -1589,11 +1607,11 @@ print_xml_status(pe_working_set_t * data_set)
} else if (group_by_node == FALSE) {
if (partially_active || inactive_resources) {
- rsc->fns->print(rsc, " ", pe_print_xml, stream);
+ rsc->fns->print(rsc, " ", print_opts, stream);
}
} else if (is_active == FALSE && inactive_resources) {
- rsc->fns->print(rsc, " ", pe_print_xml, stream);
+ rsc->fns->print(rsc, " ", print_opts, stream);
}
}
fprintf(stream, " </resources>\n");
@@ -1614,6 +1632,11 @@ print_html_status(pe_working_set_t * data_set, const char *filename, gboolean we
node_t *dc = NULL;
static int updates = 0;
char *filename_tmp = NULL;
+ int print_opts = pe_print_html;
+
+ if (print_pending) {
+ print_opts |= pe_print_pending;
+ }
if (web_cgi) {
stream = stdout;
@@ -1725,7 +1748,7 @@ print_html_status(pe_working_set_t * data_set, const char *filename, gboolean we
resource_t *rsc = (resource_t *) lpc2->data;
fprintf(stream, "<li>");
- rsc->fns->print(rsc, NULL, pe_print_html | pe_print_rsconly, stream);
+ rsc->fns->print(rsc, NULL, print_opts | pe_print_rsconly, stream);
fprintf(stream, "</li>\n");
}
fprintf(stream, "</ul>\n");
@@ -1752,11 +1775,11 @@ print_html_status(pe_working_set_t * data_set, const char *filename, gboolean we
} else if (group_by_node == FALSE) {
if (partially_active || inactive_resources) {
- rsc->fns->print(rsc, NULL, pe_print_html, stream);
+ rsc->fns->print(rsc, NULL, print_opts, stream);
}
} else if (is_active == FALSE && inactive_resources) {
- rsc->fns->print(rsc, NULL, pe_print_html, stream);
+ rsc->fns->print(rsc, NULL, print_opts, stream);
}
}
}
diff --git a/tools/crm_resource.c b/tools/crm_resource.c
index bd576cc..b2cab67 100644
--- a/tools/crm_resource.c
+++ b/tools/crm_resource.c
@@ -64,6 +64,7 @@ char *xml_file = NULL;
int cib_options = cib_sync_call;
int crmd_replies_needed = 1; /* The welcome message */
GMainLoop *mainloop = NULL;
+gboolean print_pending = FALSE;
extern void cleanup_alloc_calculations(pe_working_set_t * data_set);
@@ -284,6 +285,11 @@ do_find_resource_list(pe_working_set_t * data_set, gboolean raw)
int found = 0;
GListPtr lpc = NULL;
+ int opts = pe_print_printf | pe_print_rsconly;
+
+ if (print_pending) {
+ opts |= pe_print_pending;
+ }
for (lpc = data_set->resources; lpc != NULL; lpc = lpc->next) {
resource_t *rsc = (resource_t *) lpc->data;
@@ -292,7 +298,7 @@ do_find_resource_list(pe_working_set_t * data_set, gboolean raw)
&& rsc->fns->active(rsc, TRUE) == FALSE) {
continue;
}
- rsc->fns->print(rsc, NULL, pe_print_printf | pe_print_rsconly, stdout);
+ rsc->fns->print(rsc, NULL, opts, stdout);
found++;
}
@@ -323,11 +329,16 @@ dump_resource(const char *rsc, pe_working_set_t * data_set, gboolean expanded)
{
char *rsc_xml = NULL;
resource_t *the_rsc = find_rsc_or_clone(rsc, data_set);
+ int opts = pe_print_printf;
if (the_rsc == NULL) {
return -ENXIO;
}
- the_rsc->fns->print(the_rsc, NULL, pe_print_printf, stdout);
+
+ if (print_pending) {
+ opts |= pe_print_pending;
+ }
+ the_rsc->fns->print(the_rsc, NULL, opts, stdout);
if (expanded) {
rsc_xml = dump_xml_formatted(the_rsc->xml);
@@ -1088,6 +1099,10 @@ list_resource_operations(const char *rsc_id, const char *host_uname, gboolean ac
GListPtr ops = find_operations(rsc_id, host_uname, active, data_set);
GListPtr lpc = NULL;
+ if (print_pending) {
+ opts |= pe_print_pending;
+ }
+
for (lpc = ops; lpc != NULL; lpc = lpc->next) {
xmlNode *xml_op = (xmlNode *) lpc->data;
@@ -1275,7 +1290,8 @@ static struct crm_option long_options[] = {
{"list-raw", 0, 0, 'l', "\tList the IDs of all instantiated resources (no groups/clones/...)"},
{"list-cts", 0, 0, 'c', NULL, 1},
{"list-operations", 0, 0, 'O', "\tList active resource operations. Optionally filtered by resource (-r) and/or node (-N)"},
- {"list-all-operations", 0, 0, 'o', "List all resource operations. Optionally filtered by resource (-r) and/or node (-N)\n"},
+ {"list-all-operations", 0, 0, 'o', "List all resource operations. Optionally filtered by resource (-r) and/or node (-N)"},
+ {"pending", 0, 0, 'j', "\t\tDisplay pending state if 'record-pending' is enabled\n"},
{"list-standards", 0, 0, 0, "\tList supported standards"},
{"list-ocf-providers", 0, 0, 0, "List all available OCF providers"},
@@ -1598,6 +1614,9 @@ main(int argc, char **argv)
case 'a':
rsc_cmd = flag;
break;
+ case 'j':
+ print_pending = TRUE;
+ break;
case 'p':
case 'g':
case 'd':
diff --git a/tools/crm_simulate.c b/tools/crm_simulate.c
index 61065c4..0956141 100644
--- a/tools/crm_simulate.c
+++ b/tools/crm_simulate.c
@@ -39,6 +39,7 @@ cib_t *global_cib = NULL;
GListPtr op_fail = NULL;
gboolean quiet = FALSE;
gboolean bringing_nodes_online = FALSE;
+gboolean print_pending = FALSE;
#define new_node_template "//"XML_CIB_TAG_NODE"[@uname='%s']"
#define node_template "//"XML_CIB_TAG_STATE"[@uname='%s']"
@@ -528,7 +529,7 @@ exec_stonith_action(crm_graph_t * graph, crm_action_t * action)
}
static void
-print_cluster_status(pe_working_set_t * data_set)
+print_cluster_status(pe_working_set_t * data_set, long options)
{
char *online_nodes = NULL;
char *online_remote_nodes = NULL;
@@ -649,7 +650,7 @@ print_cluster_status(pe_working_set_t * data_set)
&& rsc->role == RSC_ROLE_STOPPED) {
continue;
}
- rsc->fns->print(rsc, NULL, pe_print_printf, stdout);
+ rsc->fns->print(rsc, NULL, pe_print_printf | options, stdout);
}
fprintf(stdout, "\n");
}
@@ -701,7 +702,7 @@ run_simulation(pe_working_set_t * data_set)
data_set->now = get_date();
cluster_status(data_set);
- print_cluster_status(data_set);
+ print_cluster_status(data_set, 0);
}
if (graph_rc != transition_complete) {
@@ -1201,6 +1202,7 @@ static struct crm_option long_options[] = {
{"show-scores", 0, 0, 's', "Show allocation scores"},
{"show-utilization", 0, 0, 'U', "Show utilization information"},
{"profile", 1, 0, 'P', "Run all tests in the named directory to create profiling data"},
+ {"pending", 0, 0, 'j', "\tDisplay pending state if 'record-pending' is enabled"},
{"-spacer-", 0, 0, '-', "\nSynthetic Cluster Events:"},
{"node-up", 1, 0, 'u', "\tBring a node online"},
@@ -1447,6 +1449,9 @@ main(int argc, char **argv)
process = TRUE;
show_utilization = TRUE;
break;
+ case 'j':
+ print_pending = TRUE;
+ break;
case 'S':
process = TRUE;
simulate = TRUE;
@@ -1515,8 +1520,10 @@ main(int argc, char **argv)
cluster_status(&data_set);
if (quiet == FALSE) {
+ int options = print_pending ? pe_print_pending : 0;
+
quiet_log("\nCurrent cluster status:\n");
- print_cluster_status(&data_set);
+ print_cluster_status(&data_set, options);
}
if (modified) {
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: opensuse-commit+help(a)opensuse.org
1
0
Hello community,
here is the log from the commit of package lyx for openSUSE:Factory checked in at 2014-01-30 14:56:25
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/lyx (Old)
and /work/SRC/openSUSE:Factory/.lyx.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "lyx"
Changes:
--------
--- /work/SRC/openSUSE:Factory/lyx/lyx.changes 2013-09-12 19:52:32.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.lyx.new/lyx.changes 2014-01-30 14:56:27.000000000 +0100
@@ -1,0 +2,18 @@
+Thu Jan 23 00:13:24 UTC 2014 - cornelis(a)solcon.nl
+
+- Moved ImageMagick Require: it is required by all suse versions
+
+-------------------------------------------------------------------
+Thu Jan 23 00:09:40 UTC 2014 - cornelis(a)solcon.nl
+
+- Update to new release tarball:
+ * MacOs fixes
+ * Updated translations: French and Arabic
+
+-------------------------------------------------------------------
+Thu Dec 19 17:32:20 UTC 2013 - cornelis(a)solcon.nl
+
+- Update to version 2.0.7:
+ * Bugfix release (for details see included ANNOUNCE file)
+
+-------------------------------------------------------------------
Old:
----
lyx-2.0.6.tar.xz
New:
----
lyx-2.0.7.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ lyx.spec ++++++
--- /var/tmp/diff_new_pack.AEwlJm/_old 2014-01-30 14:56:28.000000000 +0100
+++ /var/tmp/diff_new_pack.AEwlJm/_new 2014-01-30 14:56:28.000000000 +0100
@@ -1,7 +1,7 @@
#
# spec file for package lyx
#
-# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -26,7 +26,7 @@
BuildRequires: python
BuildRequires: update-desktop-files
BuildRequires: xz
-Version: 2.0.6
+Version: 2.0.7
Release: 0
Summary: WYSIWYM (What You See Is What You Mean) document processor
License: GPL-2.0+
@@ -42,8 +42,8 @@
# PATCH-FIX-UPSTREAM fix for http://www.lyx.org/trac/ticket/8774 (fixed in 2.1)
Patch1: lyx-2.0.6-fix_zombies.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-build
-%if 0%{?suse_version} < 1230
Requires: ImageMagick
+%if 0%{?suse_version} < 1230
Requires: texlive-latex
Recommends: texlive-xetex
Recommends: xindy
++++++ lyx-2.0.6.tar.xz -> lyx-2.0.7.tar.xz ++++++
/work/SRC/openSUSE:Factory/lyx/lyx-2.0.6.tar.xz /work/SRC/openSUSE:Factory/.lyx.new/lyx-2.0.7.tar.xz differ: char 41, line 1
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: opensuse-commit+help(a)opensuse.org
1
0
Hello community,
here is the log from the commit of package lightdm for openSUSE:Factory checked in at 2014-01-30 14:56:12
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/lightdm (Old)
and /work/SRC/openSUSE:Factory/.lightdm.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "lightdm"
Changes:
--------
--- /work/SRC/openSUSE:Factory/lightdm/lightdm.changes 2014-01-23 15:49:03.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.lightdm.new/lightdm.changes 2014-01-30 14:56:13.000000000 +0100
@@ -1,0 +2,5 @@
+Thu Jan 23 20:22:46 UTC 2014 - gber(a)opensuse.org
+
+- simplify lightdm-xauthlocalhostname-support.patch
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ lightdm-use-run-dir.patch ++++++
--- /var/tmp/diff_new_pack.C1dVUH/_old 2014-01-30 14:56:14.000000000 +0100
+++ /var/tmp/diff_new_pack.C1dVUH/_new 2014-01-30 14:56:14.000000000 +0100
@@ -1,11 +1,11 @@
# HG changeset patch
-# Parent 4415a32cab05e4dea9459f89aa25a58a042f23b2
+# Parent 7faa7ecbcde448efc969d5fba985411825dcbee4
Use /run instead of localstatedir/run/lightdm
diff --git a/src/Makefile.am b/src/Makefile.am
--- a/src/Makefile.am
+++ b/src/Makefile.am
-@@ -85,7 +85,7 @@ lightdm_CFLAGS = \
+@@ -83,7 +83,7 @@ lightdm_CFLAGS = \
-DSBIN_DIR=\"$(sbindir)\" \
-DCONFIG_DIR=\"$(sysconfdir)/lightdm\" \
-DLOG_DIR=\"$(localstatedir)/log/lightdm\" \
++++++ lightdm-xauthlocalhostname-support.patch ++++++
--- /var/tmp/diff_new_pack.C1dVUH/_old 2014-01-30 14:56:14.000000000 +0100
+++ /var/tmp/diff_new_pack.C1dVUH/_new 2014-01-30 14:56:14.000000000 +0100
@@ -1,125 +1,51 @@
Set XAUTHLOCALHOSTNAME to the hostname for local logins to avoid issues in the session in case the hostname changes
-diff --git a/src/Makefile.am b/src/Makefile.am
---- a/src/Makefile.am
-+++ b/src/Makefile.am
-@@ -74,7 +74,9 @@ lightdm_SOURCES = \
- xdmcp-session.h \
- xdmcp-session-private.h \
- opensuse-sysconfig.c \
-- opensuse-sysconfig.h
-+ opensuse-sysconfig.h \
-+ util.c \
-+ util.h
-
- lightdm_CFLAGS = \
- $(LIGHTDM_CFLAGS) \
diff --git a/src/seat-xlocal.c b/src/seat-xlocal.c
--- a/src/seat-xlocal.c
+++ b/src/seat-xlocal.c
-@@ -16,6 +16,7 @@
- #include "x-server-local.h"
- #include "plymouth.h"
- #include "vt.h"
-+#include "util.h"
-
- G_DEFINE_TYPE (SeatXLocal, seat_xlocal, SEAT_TYPE);
-
-@@ -235,12 +236,16 @@ static void
- seat_xlocal_run_script (Seat *seat, DisplayServer *display_server, Process *script)
- {
- const gchar *path;
-+ gchar *hostname;
- XServerLocal *x_server;
-
- x_server = X_SERVER_LOCAL (display_server);
+@@ -241,6 +241,7 @@ seat_xlocal_run_script (Seat *seat, Disp
path = x_server_local_get_authority_file_path (x_server);
process_set_env (script, "DISPLAY", x_server_get_address (X_SERVER (x_server)));
process_set_env (script, "XAUTHORITY", path);
-+ hostname = lightdm_gethostname ();
-+ process_set_env (script, "XAUTHLOCALHOSTNAME", hostname);
-+ g_free (hostname);
++ process_set_env (script, "XAUTHLOCALHOSTNAME", g_get_host_name ());
SEAT_CLASS (seat_xlocal_parent_class)->run_script (seat, display_server, script);
}
-diff --git a/src/util.c b/src/util.c
-new file mode 100644
---- /dev/null
-+++ b/src/util.c
-@@ -0,0 +1,15 @@
-+#include <unistd.h>
-+#include <limits.h>
-+#include <glib.h>
-+#include "util.h"
-+
-+gchar *
-+lightdm_gethostname (void)
-+{
-+ gchar hostname[HOST_NAME_MAX + 1];
-+
-+ if (gethostname (hostname, HOST_NAME_MAX) == 0)
-+ return g_strdup (hostname);
-+
-+ return g_strdup ("localhost");
-+}
-diff --git a/src/util.h b/src/util.h
-new file mode 100644
---- /dev/null
-+++ b/src/util.h
-@@ -0,0 +1,3 @@
-+#include <glib.h>
-+
-+gchar * lightdm_gethostname (void);
diff --git a/src/x-server-local.c b/src/x-server-local.c
--- a/src/x-server-local.c
+++ b/src/x-server-local.c
-@@ -22,6 +22,7 @@
- #include "configuration.h"
- #include "process.h"
- #include "vt.h"
-+#include "util.h"
-
- struct XServerLocalPrivate
- {
-@@ -150,13 +151,14 @@ XServerLocal *
+@@ -150,11 +150,12 @@ XServerLocal *
x_server_local_new (void)
{
XServerLocal *self = g_object_new (X_SERVER_LOCAL_TYPE, NULL);
- gchar hostname[1024], *number, *name;
-+ gchar *hostname, *number, *name;
++ const gchar *hostname;
++ gchar *number, *name;
x_server_set_display_number (X_SERVER (self), x_server_local_get_unused_display_number ());
- gethostname (hostname, 1024);
-+ hostname = lightdm_gethostname ();
++ hostname = g_get_host_name ();
number = g_strdup_printf ("%d", x_server_get_display_number (X_SERVER (self)));
x_server_set_authority (X_SERVER (self), x_authority_new_cookie (XAUTH_FAMILY_LOCAL, (guint8*) hostname, strlen (hostname), number));
-+ g_free (hostname);
g_free (number);
-
- name = g_strdup_printf ("x-%d", x_server_get_display_number (X_SERVER (self)));
diff --git a/src/x-server.c b/src/x-server.c
--- a/src/x-server.c
+++ b/src/x-server.c
-@@ -15,6 +15,8 @@
+@@ -15,6 +15,7 @@
#include "x-server.h"
#include "configuration.h"
+#include "x-server-local.h"
-+#include "util.h"
struct XServerPrivate
{
-@@ -168,6 +170,12 @@ x_server_connect_session (DisplayServer
+@@ -168,6 +169,8 @@ x_server_connect_session (DisplayServer
else
l_debug (session, "Not setting XDG_VTNR");
+ if (IS_X_SERVER_LOCAL (display_server))
-+ {
-+ gchar *hostname = lightdm_gethostname ();
-+ session_set_env (session, "XAUTHLOCALHOSTNAME", hostname);
-+ g_free (hostname);
-+ }
++ session_set_env (session, "XAUTHLOCALHOSTNAME", g_get_host_name ());
session_set_env (session, "DISPLAY", x_server_get_address (X_SERVER (display_server)));
session_set_xdisplay (session, x_server_get_address (X_SERVER (display_server)));
session_set_remote_host_name (session, x_server_get_hostname (X_SERVER (display_server)));
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: opensuse-commit+help(a)opensuse.org
1
0
Hello community,
here is the log from the commit of package libqb for openSUSE:Factory checked in at 2014-01-30 14:56:00
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libqb (Old)
and /work/SRC/openSUSE:Factory/.libqb.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libqb"
Changes:
--------
--- /work/SRC/openSUSE:Factory/libqb/libqb.changes 2014-01-13 12:03:04.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.libqb.new/libqb.changes 2014-01-30 14:56:01.000000000 +0100
@@ -1,0 +2,7 @@
+Fri Jan 17 13:34:43 UTC 2014 - ygao(a)suse.com
+
+- ipc: Remove ipc connection reference given to dispatch functions (bnc#857779)
+- ipc: Fixes memory leak in server connection accept when client partially connects (bnc#857779)
+- Upstream version cs: d9706f75619976e334a109d0dbfdeac3b1074fe4
+
+-------------------------------------------------------------------
Old:
----
libqb-0.16.0+git20140108.b579f7a.tar.bz2
New:
----
libqb-0.16.0+git20140116.d9706f7.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ libqb.spec ++++++
--- /var/tmp/diff_new_pack.vkw2Z2/_old 2014-01-30 14:56:01.000000000 +0100
+++ /var/tmp/diff_new_pack.vkw2Z2/_new 2014-01-30 14:56:01.000000000 +0100
@@ -17,7 +17,7 @@
Name: libqb
-Version: 0.16.0+git20140108.b579f7a
+Version: 0.16.0+git20140116.d9706f7
Release: 0
Summary: An IPC library for high performance servers
License: LGPL-2.1+
++++++ _service ++++++
--- /var/tmp/diff_new_pack.vkw2Z2/_old 2014-01-30 14:56:01.000000000 +0100
+++ /var/tmp/diff_new_pack.vkw2Z2/_new 2014-01-30 14:56:01.000000000 +0100
@@ -11,7 +11,7 @@
<param name="version">0.16.0</param>
-->
<param name="versionformat">0.16.0+git%cd.%h</param>
- <param name="revision">b579f7af151f453a870bbaac037084df13b45ef9</param>
+ <param name="revision">d9706f75619976e334a109d0dbfdeac3b1074fe4</param>
</service>
<service name="recompress" mode="disabled">
++++++ libqb-0.16.0+git20140108.b579f7a.tar.bz2 -> libqb-0.16.0+git20140116.d9706f7.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libqb-0.16.0+git20140108.b579f7a/lib/ipc_shm.c new/libqb-0.16.0+git20140116.d9706f7/lib/ipc_shm.c
--- old/libqb-0.16.0+git20140108.b579f7a/lib/ipc_shm.c 2014-01-09 16:06:39.000000000 +0100
+++ new/libqb-0.16.0+git20140116.d9706f7/lib/ipc_shm.c 2014-01-17 14:22:13.000000000 +0100
@@ -231,7 +231,6 @@
qb_ipcc_us_sock_close(c->setup.u.us.sock);
(void)c->service->poll_fns.dispatch_del(c->setup.u.us.sock);
c->setup.u.us.sock = -1;
- qb_ipcs_connection_unref(c);
}
}
if (c->state == QB_IPCS_CONNECTION_SHUTTING_DOWN ||
@@ -323,9 +322,7 @@
c->setup.u.us.sock,
POLLIN | POLLPRI | POLLNVAL,
c, qb_ipcs_dispatch_connection_request);
- if (res == 0) {
- qb_ipcs_connection_ref(c);
- } else {
+ if (res != 0) {
qb_util_log(LOG_ERR,
"Error adding socket to mainloop (%s).",
c->description);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libqb-0.16.0+git20140108.b579f7a/lib/ipc_socket.c new/libqb-0.16.0+git20140116.d9706f7/lib/ipc_socket.c
--- old/libqb-0.16.0+git20140108.b579f7a/lib/ipc_socket.c 2014-01-09 16:06:39.000000000 +0100
+++ new/libqb-0.16.0+git20140116.d9706f7/lib/ipc_socket.c 2014-01-17 14:22:13.000000000 +0100
@@ -579,7 +579,6 @@
c->description);
return res;
}
- qb_ipcs_connection_ref(c);
res = c->service->poll_fns.dispatch_add(c->service->poll_priority,
c->setup.u.us.sock,
@@ -592,7 +591,6 @@
(void)c->service->poll_fns.dispatch_del(c->request.u.us.sock);
return res;
}
- qb_ipcs_connection_ref(c);
return res;
}
@@ -600,10 +598,7 @@
_sock_rm_from_mainloop(struct qb_ipcs_connection *c)
{
(void)c->service->poll_fns.dispatch_del(c->request.u.us.sock);
- qb_ipcs_connection_unref(c);
-
(void)c->service->poll_fns.dispatch_del(c->setup.u.us.sock);
- qb_ipcs_connection_unref(c);
}
static void
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libqb-0.16.0+git20140108.b579f7a/lib/ipcs.c new/libqb-0.16.0+git20140116.d9706f7/lib/ipcs.c
--- old/libqb-0.16.0+git20140108.b579f7a/lib/ipcs.c 2014-01-09 16:06:39.000000000 +0100
+++ new/libqb-0.16.0+git20140116.d9706f7/lib/ipcs.c 2014-01-17 14:22:13.000000000 +0100
@@ -608,6 +608,10 @@
c->service->funcs.disconnect(c);
c->state = QB_IPCS_CONNECTION_INACTIVE;
c->service->stats.closed_connections++;
+
+ /* This removes the initial alloc ref */
+ qb_ipcs_connection_unref(c);
+
/* return early as it's an incomplete connection.
*/
return;
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: opensuse-commit+help(a)opensuse.org
1
0
Hello community,
here is the log from the commit of package fail2ban for openSUSE:Factory checked in at 2014-01-30 14:54:36
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/fail2ban (Old)
and /work/SRC/openSUSE:Factory/.fail2ban.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "fail2ban"
Changes:
--------
--- /work/SRC/openSUSE:Factory/fail2ban/fail2ban.changes 2013-11-19 10:45:04.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.fail2ban.new/fail2ban.changes 2014-01-30 14:54:37.000000000 +0100
@@ -1,0 +2,91 @@
+Wed Jan 29 13:48:38 UTC 2014 - jweberhofer(a)weberhofer.at
+
+Security note: The update to version 0.8.11 has fixed two additional security
+issues: A remote unauthenticated attacker may cause arbitrary IP addresses to
+be blocked by Fail2ban causing legitimate users to be blocked from accessing
+services protected by Fail2ban. CVE-2013-7177 (cyrus-imap) and CVE-2013-7176
+(postfix)
+
+-------------------------------------------------------------------
+Thu Jan 23 21:35:27 UTC 2014 - jweberhofer(a)weberhofer.at
+
+- action firewallcmd-ipset had non-working actioncheck. Removed. rh#1046816
+
+- lsof was required for fail2ban's SysVinit scripts only. Not longer used for
+ newer versions of openSUSE
+
+-------------------------------------------------------------------
+Thu Jan 23 08:40:40 UTC 2014 - jweberhofer(a)weberhofer.at
+
+- Reviewed and fixed github references in the changelog
+
+-------------------------------------------------------------------
+Wed Jan 22 09:27:43 UTC 2014 - jweberhofer(a)weberhofer.at
+
+- Use new flushlogs syntax after logrotate
+
+-------------------------------------------------------------------
+Wed Jan 22 08:50:05 UTC 2014 - jweberhofer(a)weberhofer.at
+
+- Update to version 0.8.12
+
+ * Log rotation can now occur with the command "flushlogs" rather than
+ reloading fail2ban or keeping the logtarget settings consistent in
+ jail.conf/local and /etc/logrotate.d/fail2ban. (dep#697333, rh#891798).
+
+ * Added ignorecommand option for allowing dynamic determination as to ignore
+ and IP or not.
+
+ * Remove indentation of name and loglevel while logging to SYSLOG to resolve
+ syslog(-ng) parsing problems. (dep#730202). Log lines now also
+ report "[PID]" after the name portion too.
+
+ * Epoch dates can now be enclosed within []
+
+ * New actions: badips, firewallcmd-ipset, ufw, blocklist_de
+
+ * New filters: solid-pop3d, nsd, openwebmail, horde, freeswitch, squid,
+ ejabberd, openwebmail, groupoffice
+
+ * Filter improvements:
+ - apache-noscript now includes php cgi scripts
+ - exim-spam filter to match spamassassin log entry for option SAdevnull.
+ - Added to sshd filter expression for
+ "Received disconnect from : 3: Auth fail"
+ - Improved ACL-handling for Asterisk
+ - Added improper command pipelining to postfix filter.
+
+ * General fixes:
+ - Added lots of jail.conf entries for missing filters that creaped in
+ over the last year.
+ - synchat changed to use push method which verifies whether all data was
+ send. This ensures that all data is sent before closing the connection.
+ - Fixed python 2.4 compatibility (as sub-second in date patterns weren't
+ 2.4 compatible)
+ - Complain/email actions fixed to only include relevant IPs to reporting
+
+ * Filter fixes:
+ - Added HTTP referrer bit of the apache access log to the apache filters.
+ - Apache 2.4 perfork regexes fixed
+ - Kernel syslog expression can have leading spaces
+ - allow for ",milliseconds" in the custom date format of proftpd.log
+ - recidive jail to block all protocols
+ - smtps not a IANA standard so may be missing from /etc/services. Due to
+ (still) common use 465 has been used as the explicit port number
+ - Filter dovecot reordered session and TLS items in regex with wider scope
+ for session characters
+
+ * Ugly Fixes (Potentially incompatible changes):
+
+ - Unfortunately at the end of last release when the action
+ firewall-cmd-direct-new was added it was too long and had a broken action
+ check. The action was renamed to firewallcmd-new to fit within jail name
+ name length. (gh#fail2ban/fail2ban#395).
+
+ - Last release added mysqld-syslog-iptables as a jail configuration. This
+ jailname was too long and it has been renamed to mysqld-syslog.
+
+- Fixed formating of github references in changelog
+- reformatted spec-file
+
+-------------------------------------------------------------------
@@ -35 +126 @@
- Addresses a possible DoS. Closes gh-248, bnc#824710
+ Addresses a possible DoS. Closes gh#fail2ban/fail2ban#248, bnc#824710
@@ -37 +128 @@
- within [Init]. Closes gh-232
+ within [Init]. Closes gh#fail2ban/fail2ban#232
@@ -44,2 +135,4 @@
- * Updates to asterisk filter. Closes gh-227/gh-230.
- * Updates to asterisk to include AUTH_UNKNOWN_DOMAIN. Closes gh-244.
+ * Updates to asterisk filter. Closes gh#fail2ban/fail2ban#227,
+ gh#fail2ban/fail2ban#230.
+ * Updates to asterisk to include AUTH_UNKNOWN_DOMAIN. Closes
+ gh#fail2ban/fail2ban#244.
@@ -63 +156,2 @@
- on Fedora. Closes gh-112. Thanks to Camusensei for the bug report.
+ on Fedora. Closes gh#fail2ban/fail2ban#112. Thanks to Camusensei for the
+ bug report.
@@ -65 +159 @@
- insight. Closes gh-103.
+ insight. Closes gh#fail2ban/fail2ban#103.
@@ -69,3 +163,3 @@
- * [f2156604] pyinotify -- monitor IN_MOVED_TO events. Closes gh-184.
- Thanks to Jon Foster for report and troubleshooting.
- Orion Poplawski
+ * [f2156604] pyinotify -- monitor IN_MOVED_TO events. Closes
+ gh#fail2ban/fail2ban#184. Thanks to Jon Foster for report and
+ troubleshooting. Orion Poplawski
@@ -75 +169 @@
- * [39667ff6] Avoid leaking file descriptors. Closes gh-167.
+ * [39667ff6] Avoid leaking file descriptors. Closes gh#fail2ban/fail2ban#167.
@@ -81,2 +175,2 @@
- Closes gh-147, gh-148.
- * [b6a68f51] Fix delaction on server side. Closes gh-124.
+ Closes gh#fail2ban/fail2ban#147, gh#fail2ban/fail2ban#148.
+ * [b6a68f51] Fix delaction on server side. Closes gh#fail2ban/fail2ban#124.
@@ -85 +179 @@
- the fail2ban-client. Closes gh-134.
+ the fail2ban-client. Closes gh#fail2ban/fail2ban#134.
@@ -87 +181 @@
- gh-70. Thanks to iGeorgeX for the idea.
+ gh#fail2ban/fail2ban#70. Thanks to iGeorgeX for the idea.
@@ -89 +183,2 @@
- * [96eb8986] ' and " should also be escaped in action tags Closes gh-109
+ * [96eb8986] ' and " should also be escaped in action tags Closes
+ gh#fail2ban/fail2ban#109
@@ -96 +191 @@
- beilber for the idea. Closes gh-114.
+ beilber for the idea. Closes gh#fail2ban/fail2ban#114.
@@ -100 +195 @@
- fail2ban is running. Closes gh-166.
+ fail2ban is running. Closes gh#fail2ban/fail2ban#166.
@@ -102 +197 @@
- * [29d0df5] Add mysqld filter. Closes gh-152.
+ * [29d0df5] Add mysqld filter. Closes gh#fail2ban/fail2ban#152.
@@ -104 +199 @@
- * [bba3fd8] Add Sogo filter. Closes gh-117.
+ * [bba3fd8] Add Sogo filter. Closes gh#fail2ban/fail2ban#117.
@@ -110 +205 @@
- * [be06b1b] Add action for iptables-ipsets. Closes gh-102.
+ * [be06b1b] Add action for iptables-ipsets. Closes gh#fail2ban/fail2ban#102.
@@ -115 +210 @@
- * [f336d9f] Add filter for webmin. Closes gh-99.
+ * [f336d9f] Add filter for webmin. Closes gh#fail2ban/fail2ban#99.
@@ -125 +220 @@
- consistently. Closes gh-172.
+ consistently. Closes gh#fail2ban/fail2ban#172.
@@ -127 +222 @@
- * [b36835f] Add get cinfo to fail2ban-client. Closes gh-124.
+ * [b36835f] Add get cinfo to fail2ban-client. Closes gh#fail2ban/fail2ban#124.
@@ -131 +226 @@
- Closes gh-142.
+ Closes gh#fail2ban/fail2ban#142.
@@ -135 +230 @@
- Closes gh-126. Bug report by Michael Heuberger.
+ Closes gh#fail2ban/fail2ban#126. Bug report by Michael Heuberger.
@@ -141 +236 @@
- * [3aeb1a9] Add jail.conf manual page. Closes gh-143.
+ * [3aeb1a9] Add jail.conf manual page. Closes gh#fail2ban/fail2ban#143.
@@ -174 +269 @@
- banning due to misconfigured DNS. Close gh-64
+ banning due to misconfigured DNS. Close gh#fail2ban/fail2ban#64
@@ -180 +275,2 @@
- * [0935566,5becaf8] Various python 2.4 and 2.5 compatibility fixes. Close gh-83
+ * [0935566,5becaf8] Various python 2.4 and 2.5 compatibility fixes.
+ Close gh#fail2ban/fail2ban#83
@@ -183 +279 @@
- in the console. Close gh-91
+ in the console. Close gh#fail2ban/fail2ban#91
@@ -188 +284,2 @@
- the log file to take 'banip' or 'unbanip' in effect. Close gh-81, gh-86
+ the log file to take 'banip' or 'unbanip' in effect.
+ Close gh#fail2ban/fail2ban#81, gh#fail2ban/fail2ban#86
@@ -196 +293,2 @@
- * [f52ba99] downgraded "already banned" from WARN to INFO level. Closes gh-79
+ * [f52ba99] downgraded "already banned" from WARN to INFO level.
+ Closes gh#fail2ban/fail2ban#79
@@ -198 +296 @@
- for this gh-87)
+ for this gh#fail2ban/fail2ban#87)
@@ -240 +338 @@
- message stays non-unicode. Close gh-32
+ message stays non-unicode. Close gh#fail2ban/fail2ban#32
@@ -244 +342 @@
- friend to developers stuck with Windows (Closes gh-66)
+ friend to developers stuck with Windows (Closes gh#fail2ban/fail2ban#66)
@@ -257 +355 @@
++++ 5 more lines (skipped)
++++ between /work/SRC/openSUSE:Factory/fail2ban/fail2ban.changes
++++ and /work/SRC/openSUSE:Factory/.fail2ban.new/fail2ban.changes
Old:
----
fail2ban-0.8.11.tar.bz2
New:
----
fail2ban-0.8.12.tar.bz2
fix-for-upstream-firewallcmd-ipset.conf.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ fail2ban.spec ++++++
--- /var/tmp/diff_new_pack.UC2u1H/_old 2014-01-30 14:54:37.000000000 +0100
+++ /var/tmp/diff_new_pack.UC2u1H/_new 2014-01-30 14:54:37.000000000 +0100
@@ -1,7 +1,7 @@
#
# spec file for package fail2ban
#
-# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -17,25 +17,7 @@
Name: fail2ban
-Requires: cron
-Requires: iptables
-Requires: logrotate
-Requires: lsof
-Requires: python >= 2.5
-%if 0%{?suse_version} >= 1140 && 0%{?sles_version} == 0
-Requires: python-pyinotify
-%endif
-%if 0%{?suse_version} >= 1220
-Requires: python-gamin
-%endif
-%if 0%{?suse_version} >= 1230
-%{?systemd_requires}
-BuildRequires: systemd
-%endif
-BuildRequires: logrotate
-BuildRequires: python-devel
-PreReq: %fillup_prereq
-Version: 0.8.11
+Version: 0.8.12
Release: 0
Url: http://www.fail2ban.org/
BuildRoot: %{_tmppath}/%{name}-%{version}-build
@@ -45,6 +27,8 @@
Group: Productivity/Networking/Security
Source0: https://github.com/%{name}/%{name}/releases/download/%{version}/%{name}-%{v…
%if 0%{?suse_version} < 1230
+# the init-script requires lsof
+Requires: lsof
Source1: %{name}.init
%endif
Source2: %{name}.sysconfig
@@ -53,6 +37,24 @@
Source4: %{name}.service
Source5: %{name}.tmpfiles
%endif
+# PATCH-FIX-UPSTREAM fix-for-upstream-firewallcmd-ipset.conf.patch rh#1046816
+Patch0: fix-for-upstream-firewallcmd-ipset.conf.patch
+Requires: cron
+Requires: iptables
+Requires: logrotate
+Requires: python >= 2.5
+%if 0%{?suse_version} >= 1140 && 0%{?sles_version} == 0
+Requires: python-pyinotify
+%endif
+%if 0%{?suse_version} >= 1220
+Requires: python-gamin
+%endif
+%if 0%{?suse_version} >= 1230
+%{?systemd_requires}
+BuildRequires: systemd
+%endif
+BuildRequires: logrotate
+BuildRequires: python-devel
%description
Fail2ban scans log files like /var/log/messages and bans IP addresses
@@ -63,6 +65,7 @@
%prep
%setup
+%patch0 -p1
# correct doc-path
sed -i -e 's|/usr/share/doc/fail2ban|%{_docdir}/%{name}|' setup.py
++++++ fail2ban-0.8.11.tar.bz2 -> fail2ban-0.8.12.tar.bz2 ++++++
++++ 4668 lines of diff (skipped)
++++++ fail2ban.logrotate ++++++
--- /var/tmp/diff_new_pack.UC2u1H/_old 2014-01-30 14:54:38.000000000 +0100
+++ /var/tmp/diff_new_pack.UC2u1H/_new 2014-01-30 14:54:38.000000000 +0100
@@ -8,6 +8,6 @@
missingok
create 644 root root
postrotate
- fail2ban-client set logtarget /var/log/fail2ban.log 1>/dev/null || true
+ fail2ban-client flushlogs 1>/dev/null || true
endscript
}
++++++ fix-for-upstream-firewallcmd-ipset.conf.patch ++++++
diff -ur fail2ban-0.8.12.orig/config/action.d/firewallcmd-ipset.conf fail2ban-0.8.12/config/action.d/firewallcmd-ipset.conf
--- fail2ban-0.8.12.orig/config/action.d/firewallcmd-ipset.conf 2014-01-16 09:20:14.000000000 +0100
+++ fail2ban-0.8.12/config/action.d/firewallcmd-ipset.conf 2014-01-23 22:43:53.115263616 +0100
@@ -25,8 +25,6 @@
ipset flush fail2ban-<name>
ipset destroy fail2ban-<name>
-actioncheck = firewall-cmd --direct --get-chains ipv4 filter | grep -q '^fail2ban-<name>$'
-
actionban = ipset add fail2ban-<name> <ip> timeout <bantime> -exist
actionunban = ipset del fail2ban-<name> <ip> -exist
diff -ur fail2ban-0.8.12.orig/THANKS fail2ban-0.8.12/THANKS
--- fail2ban-0.8.12.orig/THANKS 2014-01-21 21:59:49.000000000 +0100
+++ fail2ban-0.8.12/THANKS 2014-01-23 22:43:53.115263616 +0100
@@ -30,6 +30,7 @@
Daniel B.
Daniel Black
David Nutter
+Derek Atkins
Eric Gerbier
Enrico Labedzki
ftoppi
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: opensuse-commit+help(a)opensuse.org
1
0
Hello community,
here is the log from the commit of package exim for openSUSE:Factory checked in at 2014-01-30 14:54:31
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/exim (Old)
and /work/SRC/openSUSE:Factory/.exim.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "exim"
Changes:
--------
--- /work/SRC/openSUSE:Factory/exim/exim.changes 2013-12-08 19:26:30.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.exim.new/exim.changes 2014-01-30 14:54:32.000000000 +0100
@@ -1,0 +2,6 @@
+Thu Jan 23 09:25:36 UTC 2014 - meissner(a)suse.com
+
+- exim482-enable_ecdh_openssl.patch: Enable ECDH (elliptic curve diffie
+ hellman) support, taken from http://bugs.exim.org/show_bug.cgi?id=1397
+
+-------------------------------------------------------------------
New:
----
exim482-enable_ecdh_openssl.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ exim.spec ++++++
--- /var/tmp/diff_new_pack.16uUNk/_old 2014-01-30 14:54:33.000000000 +0100
+++ /var/tmp/diff_new_pack.16uUNk/_new 2014-01-30 14:54:33.000000000 +0100
@@ -1,7 +1,7 @@
#
# spec file for package exim
#
-# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -73,6 +73,7 @@
Source31: eximstats.conf
Source32: exim.service
Patch: exim-tail.patch
+Patch1: exim482-enable_ecdh_openssl.patch
%if !%{?build_with_mysql:1}0 && !%{?build_with_pgsql:1}0
%package -n eximon
@@ -124,6 +125,7 @@
%prep
%setup -q -n exim-%{version}
%patch
+%patch1 -p1
# build with fPIE/pie on SUSE 10.0 or newer, or on any other platform
%if %{?suse_version:%suse_version}%{?!suse_version:99999} > 930
fPIE="-fPIE"
++++++ exim482-enable_ecdh_openssl.patch ++++++
# Taken from:
# http://bugs.exim.org/show_bug.cgi?id=1397
# http://bugs.exim.org/attachment.cgi?id=661
diff -urN exim-4.82_RC3.orig/src/globals.c exim-4.82_RC3.ecdh/src/globals.c
--- exim-4.82_RC3.orig/src/globals.c 2013-10-09 22:47:52.000000000 +0200
+++ exim-4.82_RC3.ecdh/src/globals.c 2013-10-15 00:53:16.000000000 +0200
@@ -137,6 +137,7 @@
bit-count as "NORMAL" (2432) and Thunderbird dropping connection. */
int tls_dh_max_bits = 2236;
uschar *tls_dhparam = NULL;
+uschar *tls_eccurve = NULL;
#if defined(EXPERIMENTAL_OCSP) && !defined(USE_GNUTLS)
uschar *tls_ocsp_file = NULL;
#endif
diff -urN exim-4.82_RC3.orig/src/globals.h exim-4.82_RC3.ecdh/src/globals.h
--- exim-4.82_RC3.orig/src/globals.h 2013-10-09 22:47:52.000000000 +0200
+++ exim-4.82_RC3.ecdh/src/globals.h 2013-10-15 00:52:25.000000000 +0200
@@ -105,6 +105,7 @@
extern uschar *tls_crl; /* CRL File */
extern int tls_dh_max_bits; /* don't accept higher lib suggestions */
extern uschar *tls_dhparam; /* DH param file */
+extern uschar *tls_eccurve; /* EC curve */
#if defined(EXPERIMENTAL_OCSP) && !defined(USE_GNUTLS)
extern uschar *tls_ocsp_file; /* OCSP stapling proof file */
#endif
diff -urN exim-4.82_RC3.orig/src/readconf.c exim-4.82_RC3.ecdh/src/readconf.c
--- exim-4.82_RC3.orig/src/readconf.c 2013-10-09 22:47:52.000000000 +0200
+++ exim-4.82_RC3.ecdh/src/readconf.c 2013-10-15 00:53:58.000000000 +0200
@@ -433,6 +433,7 @@
{ "tls_crl", opt_stringptr, &tls_crl },
{ "tls_dh_max_bits", opt_int, &tls_dh_max_bits },
{ "tls_dhparam", opt_stringptr, &tls_dhparam },
+ { "tls_eccurve", opt_stringptr, &tls_eccurve },
# if defined(EXPERIMENTAL_OCSP) && !defined(USE_GNUTLS)
{ "tls_ocsp_file", opt_stringptr, &tls_ocsp_file },
# endif
diff -urN exim-4.82_RC3.orig/src/tls-openssl.c exim-4.82_RC3.ecdh/src/tls-openssl.c
--- exim-4.82_RC3.orig/src/tls-openssl.c 2013-10-09 22:47:52.000000000 +0200
+++ exim-4.82_RC3.ecdh/src/tls-openssl.c 2013-10-15 00:51:20.000000000 +0200
@@ -446,7 +446,57 @@
return TRUE;
}
+#if !defined(OPENSSL_NO_ECDH)
+static BOOL
+init_ecdh(SSL_CTX *sctx, host_item *host)
+{
+EC_KEY *ecdh;
+int nid;
+# if !defined(OPENSSL_NO_ECDH) && OPENSSL_VERSION_NUMBER >= 0x10002000L
+/* check if OpenSSL >= 1.0.2 auto ECDH temp key parameter selection should be used */
+if (Ustrcmp(tls_eccurve, "auto") == 0)
+ {
+ DEBUG(D_tls) debug_printf("ECDH temp key parameter settings: OpenSSL 1.2+ autoselection\n");
+ SSL_CTX_set_ecdh_auto(sctx, 1);
+ return TRUE;
+ }
+# endif
+
+if (tls_eccurve == NULL)
+ {
+ DEBUG(D_tls)
+ debug_printf("ECDH curve (default): prime256v1\n", tls_eccurve);
+ nid = NID_X9_62_prime256v1;
+ }
+else
+ {
+ /* search curve name */
+ DEBUG(D_tls)
+ debug_printf("ECDH curve: %s\n", tls_eccurve);
+ nid = OBJ_sn2nid((uschar *)tls_eccurve);
+ if (nid == 0)
+ {
+ tls_error(string_sprintf("Unkown curve name tls_eccurve \"%s\"", tls_eccurve),
+ host, NULL);
+ return FALSE;
+ }
+ }
+
+ecdh = EC_KEY_new_by_curve_name(nid);
+if (ecdh == NULL)
+ {
+ tls_error("Unable to create ec curve",
+ host, NULL);
+ return FALSE;
+ }
+
+SSL_CTX_set_tmp_ecdh(sctx, ecdh);
+EC_KEY_free(ecdh);
+
+return TRUE;
+}
+#endif
#ifdef EXPERIMENTAL_OCSP
@@ -1066,6 +1116,11 @@
rc = tls_expand_session_files(*ctxp, cbinfo);
if (rc != OK) return rc;
+#if !defined(OPENSSL_NO_ECDH)
+/* Initialize ECDH temp key parameter selection */
+if (!init_ecdh(*ctxp, host)) return DEFER;
+#endif
+
/* If we need to handle SNI, do so */
#ifdef EXIM_HAVE_OPENSSL_TLSEXT
if (host == NULL) /* server */
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: opensuse-commit+help(a)opensuse.org
1
0
Hello community,
here is the log from the commit of package corosync for openSUSE:Factory checked in at 2014-01-30 14:54:24
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/corosync (Old)
and /work/SRC/openSUSE:Factory/.corosync.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "corosync"
Changes:
--------
--- /work/SRC/openSUSE:Factory/corosync/corosync.changes 2014-01-07 16:15:31.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.corosync.new/corosync.changes 2014-01-30 14:54:25.000000000 +0100
@@ -1,0 +2,22 @@
+Tue Jan 21 07:48:22 UTC 2014 - xli(a)suse.com
+
+- Update to corosync 2.3.3
+- Properly check result of symlink
+- Fix cppchecks warning
+- Close devnull file handler
+- votequorum: Add missing man pages
+- totem: Drop invalid join msg in operational state
+- systemd unit: Make sure network is really up
+- votequorum: Improve/add documentation for quorum device API
+- votequorum: Add persistent expected_votes tracking.
+- Upstream version cs: 45dd9861ff78362068d214cf520006a1b26376cd
+
+-------------------------------------------------------------------
+Thu Jan 9 09:14:50 UTC 2014 - xli(a)suse.com
+
+- Add patch to fix cts api wrong issue
+ + corosync-cts-api-error.patch
+- Add patch to change default settings of conf.example
+ + corosync-conf-example.patch
+
+-------------------------------------------------------------------
@@ -13 +35 @@
-- Upsteam version cs: 7014f10123a634cf026491edc9a09d6044106116
+- Upstream version cs: 7014f10123a634cf026491edc9a09d6044106116
Old:
----
corosync-2.3.2.tar.gz
New:
----
corosync-2.3.3.tar.gz
corosync-conf-example.patch
corosync-cts-api-error.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ corosync.spec ++++++
--- /var/tmp/diff_new_pack.EceRDm/_old 2014-01-30 14:54:26.000000000 +0100
+++ /var/tmp/diff_new_pack.EceRDm/_new 2014-01-30 14:54:26.000000000 +0100
@@ -1,7 +1,7 @@
#
# spec file for package corosync
#
-# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -44,12 +44,14 @@
Summary: The Corosync Cluster Engine and Application Programming Interfaces
License: BSD-3-Clause
Group: Productivity/Clustering/HA
-Version: 2.3.2
+Version: 2.3.3
Release: 0
Url: http://www.corosync.org
Source0: %{name}-%{version}.tar.gz
Source2: baselibs.conf
Patch1: corosync-init-lockfile-path-error.patch
+Patch2: corosync-cts-api-error.patch
+Patch3: corosync-conf-example.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-build
# openais is indeed gone and should be uninstalled. No, we do not
# provide openais on purpose, the package has been deleted.
@@ -96,6 +98,8 @@
%prep
%setup -q -n %{name}-%{version}
%patch1 -p1
+%patch2 -p1
+%patch3 -p1
%build
#%if 0%{?buildtrunk} == 1
++++++ corosync-2.3.2.tar.gz -> corosync-2.3.3.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/corosync-2.3.2/exec/cmap.c new/corosync-2.3.3/exec/cmap.c
--- old/corosync-2.3.2/exec/cmap.c 2013-11-26 15:39:34.000000000 +0100
+++ new/corosync-2.3.3/exec/cmap.c 2014-01-14 11:24:31.000000000 +0100
@@ -597,8 +597,8 @@
struct res_lib_cmap_iter_next res_lib_cmap_iter_next;
cs_error_t ret;
icmap_iter_t *iter;
- size_t value_len;
- icmap_value_types_t type;
+ size_t value_len = 0;
+ icmap_value_types_t type = 0;
const char *res = NULL;
struct cmap_conn_info *conn_info = (struct cmap_conn_info *)api->ipc_private_data_get (conn);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/corosync-2.3.2/exec/coroparse.c new/corosync-2.3.3/exec/coroparse.c
--- old/corosync-2.3.2/exec/coroparse.c 2013-11-26 15:39:34.000000000 +0100
+++ new/corosync-2.3.3/exec/coroparse.c 2014-01-14 11:24:31.000000000 +0100
@@ -507,6 +507,7 @@
}
if ((strcmp(path, "quorum.two_node") == 0) ||
+ (strcmp(path, "quorum.expected_votes_tracking") == 0) ||
(strcmp(path, "quorum.allow_downscale") == 0) ||
(strcmp(path, "quorum.wait_for_all") == 0) ||
(strcmp(path, "quorum.auto_tie_breaker") == 0) ||
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/corosync-2.3.2/exec/main.c new/corosync-2.3.3/exec/main.c
--- old/corosync-2.3.2/exec/main.c 2013-11-26 15:39:34.000000000 +0100
+++ new/corosync-2.3.3/exec/main.c 2014-01-14 11:24:31.000000000 +0100
@@ -209,7 +209,10 @@
qb_log_blackbox_write_to_file(fname);
unlink(LOCALSTATEDIR "/lib/corosync/fdata");
- symlink(fname, LOCALSTATEDIR "/lib/corosync/fdata");
+ if (symlink(fname, LOCALSTATEDIR "/lib/corosync/fdata") == -1) {
+ log_printf(LOGSYS_LEVEL_ERROR, "Can't create symlink to '%s' for corosync blackbox file '%s'",
+ fname, LOCALSTATEDIR "/lib/corosync/fdata");
+ }
}
static void unlink_all_completed (void)
@@ -431,8 +434,10 @@
if (dup2(devnull, 0) < 0 || dup2(devnull, 1) < 0
|| dup2(devnull, 2) < 0) {
+ close(devnull);
corosync_exit_error (COROSYNC_DONE_STD_TO_NULL_REDIR);
}
+ close(devnull);
}
static void corosync_mlockall (void)
@@ -560,8 +565,8 @@
void *user_data)
{
int res;
- int ring_no;
- int member_no;
+ unsigned int ring_no;
+ unsigned int member_no;
struct totem_ip_address member;
int add_new_member = 0;
int remove_old_member = 0;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/corosync-2.3.2/exec/totemconfig.c new/corosync-2.3.3/exec/totemconfig.c
--- old/corosync-2.3.2/exec/totemconfig.c 2013-11-26 15:39:34.000000000 +0100
+++ new/corosync-2.3.3/exec/totemconfig.c 2014-01-14 11:24:31.000000000 +0100
@@ -292,7 +292,7 @@
icmap_iter_t iter;
const char *iter_key;
int res = 0;
- int node_pos;
+ unsigned int node_pos;
int local_node_pos = -1;
struct totem_ip_address bind_addr;
int interface_up, interface_num;
@@ -343,7 +343,7 @@
icmap_iter_t iter, iter2;
const char *iter_key, *iter_key2;
int res = 0;
- int node_pos;
+ unsigned int node_pos;
char tmp_key[ICMAP_KEYNAME_MAXLEN];
char tmp_key2[ICMAP_KEYNAME_MAXLEN];
char *node_addr_str;
@@ -394,7 +394,7 @@
icmap_iter_t iter;
const char *iter_key;
int res = 0;
- int node_pos;
+ unsigned int node_pos;
char tmp_key[ICMAP_KEYNAME_MAXLEN];
char tmp_key2[ICMAP_KEYNAME_MAXLEN];
char *node_addr_str;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/corosync-2.3.2/exec/totemsrp.c new/corosync-2.3.3/exec/totemsrp.c
--- old/corosync-2.3.2/exec/totemsrp.c 2013-11-26 15:39:34.000000000 +0100
+++ new/corosync-2.3.3/exec/totemsrp.c 2014-01-14 11:24:31.000000000 +0100
@@ -4400,6 +4400,36 @@
srp_addr_copy_endian_convert (&out->system_from, &in->system_from);
}
+static int ignore_join_under_operational (
+ struct totemsrp_instance *instance,
+ const struct memb_join *memb_join)
+{
+ struct srp_addr *proc_list;
+ struct srp_addr *failed_list;
+ unsigned long long ring_seq;
+
+ proc_list = (struct srp_addr *)memb_join->end_of_memb_join;
+ failed_list = proc_list + memb_join->proc_list_entries;
+ ring_seq = memb_join->ring_seq;
+
+ if (memb_set_subset (&instance->my_id, 1,
+ failed_list, memb_join->failed_list_entries)) {
+ return (1);
+ }
+
+ /*
+ * In operational state, my_proc_list is exactly the same as
+ * my_memb_list.
+ */
+ if ((memb_set_subset (&memb_join->system_from, 1,
+ instance->my_memb_list, instance->my_memb_entries)) &&
+ (ring_seq < instance->my_ring_id.seq)) {
+ return (1);
+ }
+
+ return (0);
+}
+
static int message_handler_memb_join (
struct totemsrp_instance *instance,
const void *msg,
@@ -4430,7 +4460,9 @@
}
switch (instance->memb_state) {
case MEMB_STATE_OPERATIONAL:
- memb_join_process (instance, memb_join);
+ if (!ignore_join_under_operational (instance, memb_join)) {
+ memb_join_process (instance, memb_join);
+ }
break;
case MEMB_STATE_GATHER:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/corosync-2.3.2/exec/votequorum.c new/corosync-2.3.3/exec/votequorum.c
--- old/corosync-2.3.2/exec/votequorum.c 2013-11-26 15:39:34.000000000 +0100
+++ new/corosync-2.3.3/exec/votequorum.c 2014-01-14 11:24:31.000000000 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009-2012 Red Hat, Inc.
+ * Copyright (c) 2009-2014 Red Hat, Inc.
*
* All rights reserved.
*
@@ -36,7 +36,10 @@
#include <config.h>
#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
#include <stdint.h>
+#include <unistd.h>
#include <qb/qbipc_common.h>
@@ -85,6 +88,10 @@
static uint8_t allow_downscale = 0;
static uint32_t ev_barrier = 0;
+static uint8_t ev_tracking = 0;
+static uint32_t ev_tracking_barrier = 0;
+static int ev_tracking_fd = -1;
+
/*
* votequorum_exec defines/structs/forward definitions
*/
@@ -589,6 +596,47 @@
LEAVE();
}
+/*
+ * load/save are copied almost pristine from totemsrp,c
+ */
+static int load_ev_tracking_barrier(void)
+{
+ int res = 0;
+ char filename[PATH_MAX];
+
+ ENTER();
+
+ snprintf(filename, sizeof(filename) - 1, LOCALSTATEDIR "/lib/corosync/ev_tracking");
+
+ ev_tracking_fd = open(filename, O_RDWR, 0700);
+ if (ev_tracking_fd != -1) {
+ res = read (ev_tracking_fd, &ev_tracking_barrier, sizeof(uint32_t));
+ if (res == sizeof (uint32_t)) {
+ LEAVE();
+ return 0;
+ }
+ }
+
+ ev_tracking_barrier = 0;
+ umask(0);
+ ev_tracking_fd = open (filename, O_CREAT|O_RDWR, 0700);
+ if (ev_tracking_fd != -1) {
+ res = write (ev_tracking_fd, &ev_tracking_barrier, sizeof (uint32_t));
+ if ((res == -1) || (res != sizeof (uint32_t))) {
+ log_printf(LOGSYS_LEVEL_WARNING,
+ "Unable to write to %s", filename);
+ }
+ LEAVE();
+ return 0;
+ }
+ log_printf(LOGSYS_LEVEL_WARNING,
+ "Unable to create %s file", filename);
+
+ LEAVE();
+
+ return -1;
+}
+
static void update_wait_for_all_status(uint8_t wfa_status)
{
ENTER();
@@ -644,6 +692,32 @@
LEAVE();
}
+static void update_ev_tracking_barrier(uint32_t ev_t_barrier)
+{
+ int res;
+
+ ENTER();
+
+ ev_tracking_barrier = ev_t_barrier;
+ icmap_set_uint32("runtime.votequorum.ev_tracking_barrier", ev_tracking_barrier);
+
+ if (lseek (ev_tracking_fd, 0, SEEK_SET) != 0) {
+ log_printf(LOGSYS_LEVEL_WARNING,
+ "Unable to update ev_tracking_barrier on disk data!!!");
+ LEAVE();
+ return;
+ }
+
+ res = write (ev_tracking_fd, &ev_tracking_barrier, sizeof (uint32_t));
+ if (res != sizeof (uint32_t)) {
+ log_printf(LOGSYS_LEVEL_WARNING,
+ "Unable to update ev_tracking_barrier on disk data!!!");
+ }
+ fdatasync(ev_tracking_fd);
+
+ LEAVE();
+}
+
/*
* quorum calculation core bits
*/
@@ -854,6 +928,11 @@
votequorum_exec_send_expectedvotes_notification();
}
+ if ((ev_tracking) &&
+ (us->expected_votes > ev_tracking_barrier)) {
+ update_ev_tracking_barrier(us->expected_votes);
+ }
+
quorum = calculate_quorum(allow_decrease, cluster_members, &total_votes);
are_we_quorate(total_votes);
@@ -1022,6 +1101,21 @@
icmap_get_uint8("quorum.auto_tie_breaker", &auto_tie_breaker);
icmap_get_uint8("quorum.last_man_standing", &last_man_standing);
icmap_get_uint32("quorum.last_man_standing_window", &last_man_standing_window);
+ icmap_get_uint8("quorum.expected_votes_tracking", &ev_tracking);
+
+ /* allow_downscale requires ev_tracking */
+ if (allow_downscale) {
+ ev_tracking = 1;
+ }
+
+ if (ev_tracking) {
+ if (load_ev_tracking_barrier() < 0) {
+ LEAVE();
+ return ((char *)"Unable to load ev_tracking file!");
+ }
+ update_ev_tracking_barrier(ev_tracking_barrier);
+ }
+
}
/*
@@ -1144,6 +1238,11 @@
/*
* set this node votes and expected_votes
*/
+ log_printf(LOGSYS_LEVEL_DEBUG, "ev_tracking=%d, ev_tracking_barrier = %d: expected_votes = %d\n", ev_tracking, ev_tracking_barrier, expected_votes);
+
+ if (ev_tracking) {
+ expected_votes = ev_tracking_barrier;
+ }
if (have_nodelist) {
us->votes = node_votes;
@@ -1666,7 +1765,7 @@
us->expected_votes = req_exec_quorum_nodeinfo->expected_votes;
}
- if (node->flags & NODE_FLAGS_QUORATE) {
+ if (node->flags & NODE_FLAGS_QUORATE || (ev_tracking)) {
node->expected_votes = req_exec_quorum_nodeinfo->expected_votes;
} else {
node->expected_votes = us->expected_votes;
@@ -1683,7 +1782,6 @@
}
recalculate:
-
if ((new_node) ||
(nodeid == us->node_id) ||
(node->flags & NODE_FLAGS_FIRST) ||
@@ -1739,6 +1837,9 @@
}
votequorum_exec_send_expectedvotes_notification();
update_ev_barrier(req_exec_quorum_reconfigure->value);
+ if (ev_tracking) {
+ us->expected_votes = max(us->expected_votes, ev_tracking_barrier);
+ }
recalculate_quorum(1, 0); /* Allow decrease */
break;
@@ -1772,6 +1873,11 @@
ret = votequorum_exec_send_nodeinfo(us->node_id);
}
+ if ((ev_tracking) && (ev_tracking_fd != -1)) {
+ close(ev_tracking_fd);
+ }
+
+
LEAVE();
return ret;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/corosync-2.3.2/init/corosync.service.in new/corosync-2.3.3/init/corosync.service.in
--- old/corosync-2.3.2/init/corosync.service.in 2013-11-26 15:39:34.000000000 +0100
+++ new/corosync-2.3.3/init/corosync.service.in 2014-01-14 11:24:31.000000000 +0100
@@ -1,8 +1,8 @@
[Unit]
Description=Corosync Cluster Engine
ConditionKernelCommandLine=!nocluster
-Requires=network.target
-After=network.target
+Requires=network-online.target
+After=network-online.target
[Service]
ExecStart=@INITWRAPPERSDIR@/corosync start
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/corosync-2.3.2/man/Makefile.am new/corosync-2.3.3/man/Makefile.am
--- old/corosync-2.3.2/man/Makefile.am 2013-11-26 15:39:34.000000000 +0100
+++ new/corosync-2.3.3/man/Makefile.am 2014-01-14 11:24:31.000000000 +0100
@@ -1,5 +1,5 @@
# Copyright (c) 2004 MontaVista Software, Inc.
-# Copyright (c) 2009, 2012 Red Hat, Inc.
+# Copyright (c) 2009, 2012, 2014 Red Hat, Inc.
#
# Authors: Steven Dake (sdake(a)redhat.com)
# Fabio M. Di Nitto (fdinitto(a)redhat.com)
@@ -77,6 +77,11 @@
votequorum_setvotes.3 \
votequorum_trackstart.3 \
votequorum_trackstop.3 \
+ votequorum_qdevice_register.3 \
+ votequorum_qdevice_unregister.3 \
+ votequorum_qdevice_update.3 \
+ votequorum_qdevice_master_wins.3 \
+ votequorum_qdevice_poll.3 \
sam_data_getsize.3 \
sam_data_restore.3 \
sam_data_store.3 \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/corosync-2.3.2/man/votequorum.5 new/corosync-2.3.3/man/votequorum.5
--- old/corosync-2.3.2/man/votequorum.5 2013-11-26 15:39:34.000000000 +0100
+++ new/corosync-2.3.3/man/votequorum.5 2014-01-14 11:24:31.000000000 +0100
@@ -1,5 +1,5 @@
.\"/*
-.\" * Copyright (c) 2012 Red Hat, Inc.
+.\" * Copyright (c) 2012-2014 Red Hat, Inc.
.\" *
.\" * All rights reserved.
.\" *
@@ -317,6 +317,27 @@
allow_downscale: 1
}
.fi
+allow_downscale implicitly enabled EVT (see below).
+.PP
+.B expected_votes_tracking: 1
+.PP
+Enables Expected Votes Tracking (EVT) feature (default: 0).
+.PP
+Expected Votes Tracking stores the highest-seen value of expected votes on disk and uses
+that as the minimum value for expected votes in the absence of any higher authority (eg
+a current quorate cluster). This is useful for when a group of nodes becomes detached from
+the main cluster and after a restart could have enough votes to provide quorum, which can
+happen after using allow_downscale.
+.PP
+Note that even if the in-memory version of expected_votes is reduced, eg by removing nodes
+or using corosync-quorumtool, the stored value will still be the highest value seen - it
+never gets reduced.
+.PP
+The value is held in the file /var/lib/corosync/ev_tracking which can be deleted if you
+really do need to reduce the expected votes for any reason, like the node has been moved
+to a different cluster.
+.PP
+.fi
.PP
.SH VARIOUS NOTES
.PP
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/corosync-2.3.2/man/votequorum_qdevice_master_wins.3.in new/corosync-2.3.3/man/votequorum_qdevice_master_wins.3.in
--- old/corosync-2.3.2/man/votequorum_qdevice_master_wins.3.in 1970-01-01 01:00:00.000000000 +0100
+++ new/corosync-2.3.3/man/votequorum_qdevice_master_wins.3.in 2014-01-14 11:24:31.000000000 +0100
@@ -0,0 +1,77 @@
+.\"/*
+.\" * Copyright (c) 2014 Red Hat, Inc.
+.\" *
+.\" * All rights reserved.
+.\" *
+.\" * Author: Christine Caulfield <ccaulfie(a)redhat.com>
+.\" *
+.\" * This software licensed under BSD license, the text of which follows:
+.\" *
+.\" * Redistribution and use in source and binary forms, with or without
+.\" * modification, are permitted provided that the following conditions are met:
+.\" *
+.\" * - Redistributions of source code must retain the above copyright notice,
+.\" * this list of conditions and the following disclaimer.
+.\" * - Redistributions in binary form must reproduce the above copyright notice,
+.\" * this list of conditions and the following disclaimer in the documentation
+.\" * and/or other materials provided with the distribution.
+.\" * - Neither the name of the MontaVista Software, Inc. nor the names of its
+.\" * contributors may be used to endorse or promote products derived from this
+.\" * software without specific prior written permission.
+.\" *
+.\" * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+.\" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+.\" * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+.\" * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+.\" * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+.\" * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+.\" * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+.\" * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+.\" * THE POSSIBILITY OF SUCH DAMAGE.
+.\" */
+.TH VOTEQUORUM_QDEVICE_MASTER_WINS 3 @BUILDDATE@ "corosync Man Page" "Corosync Cluster Engine Programmer's Manual"
+.SH NAME
+votequorum_qdevice_master_wins \- Sets or clears quorum device master_wins flag
+.SH SYNOPSIS
+.B #include <corosync/votequorum.h>
+.sp
+.BI "int votequorum_qdevice_master_wins(votequorum_handle_t " handle " const char " name ", unsigned int " allow ");"
+.SH DESCRIPTION
+The
+.B votequorum_qdevice_master_wins
+informs votequorum whether or not the currently registered qdevice subsystem supports 'master_wins' mode (default 0).
+This mode allows the qdevice to effectively take over the quorum calculations of votequorum. Any node with an active
+qdevice that also has master_wins set becomes quorate regardless of the node votes of the cluster. It is left up to the
+qdevice subsystem itself (not part of votequorum) to communicate across the nodes or otherwise provide some system of
+deciding which nodes will be part of the quorate cluster, if any. eg They may be the set of nodes that has access to
+a quorum disk.
+.br
+.B name
+The name of the currently registered quorum device on this node. This must match the existing name known to votequorum.
+.br
+.B allow
+0 (the default) means that master_wins is not active on this node. 1 means that master_wins is active on this node.
+.SH RETURN VALUE
+This call returns the CS_OK value if successful, otherwise an error is returned.
+.PP
+.SH ERRORS
+@COMMONIPCERRORS@
+.SH "SEE ALSO"
+.BR votequorum_overview (8),
+.BR votequorum_initialize (3),
+.BR votequorum_finalize (3),
+.BR votequorum_getinfo (3),
+.BR votequorum_trackstart (3),
+.BR votequorum_trackstop (3),
+.BR votequorum_fd_get (3),
+.BR votequorum_dispatch (3),
+.BR votequorum_context_set (3),
+.BR votequorum_context_get (3),
+.BR votequorum_setexpected (3),
+.BR votequorum_setvotes (3),
+.BR votequorum_qdevice_register (3),
+.BR votequorum_qdevice_poll (3),
+.BR votequorum_qdevice_update (3),
+.PP
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/corosync-2.3.2/man/votequorum_qdevice_poll.3.in new/corosync-2.3.3/man/votequorum_qdevice_poll.3.in
--- old/corosync-2.3.2/man/votequorum_qdevice_poll.3.in 2013-11-26 15:39:34.000000000 +0100
+++ new/corosync-2.3.3/man/votequorum_qdevice_poll.3.in 2014-01-14 11:24:31.000000000 +0100
@@ -1,5 +1,5 @@
.\"/*
-.\" * Copyright (c) 2009,2012 Red Hat, Inc.
+.\" * Copyright (c) 2009,2012,2014 Red Hat, Inc.
.\" *
.\" * All rights reserved.
.\" *
@@ -37,7 +37,7 @@
.SH SYNOPSIS
.B #include <corosync/votequorum.h>
.sp
-.BI "int votequorum_qdevice_poll(votequorum_handle_t " handle ", unsigned int " cast_vote ");"
+.BI "int votequorum_qdevice_poll(votequorum_handle_t " handle ", const char * " name ", unsigned int " cast_vote ");"
.SH DESCRIPTION
The
.B votequorum_qdevice_poll
@@ -48,9 +48,9 @@
This routine should be called at regular intervals to ensure that the device status
is always known to votequorum. If
.B votequorum_qdevice_poll
-is not called after (default) 10 seconds then the device will be deeded to be dead and
+is not called for (default) 10 seconds then the device will be deemed to be dead and
its votes removed from the cluster. This does not unregister the device.
-The default poll time can be changed by setting the object database variable
+The default poll time can be changed by setting the cmap variable
quorum.quorumdev_poll.
.SH RETURN VALUE
This call returns the CS_OK value if successful, otherwise an error is returned.
@@ -72,5 +72,6 @@
.BR votequorum_setvotes (3),
.BR votequorum_qdevice_register (3),
.BR votequorum_qdevice_unregister (3),
-.BR votequorum_qdevice_get_info (3)
+.BR votequorum_qdevice_update (3),
+.BR votequorum_qdevice_master_wins (3),
.PP
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/corosync-2.3.2/man/votequorum_qdevice_register.3.in new/corosync-2.3.3/man/votequorum_qdevice_register.3.in
--- old/corosync-2.3.2/man/votequorum_qdevice_register.3.in 2013-11-26 15:39:34.000000000 +0100
+++ new/corosync-2.3.3/man/votequorum_qdevice_register.3.in 2014-01-14 11:24:31.000000000 +0100
@@ -1,5 +1,5 @@
.\"/*
-.\" * Copyright (c) 2009,2012 Red Hat, Inc.
+.\" * Copyright (c) 2009,2012,2014 Red Hat, Inc.
.\" *
.\" * All rights reserved.
.\" *
@@ -37,7 +37,7 @@
.SH SYNOPSIS
.B #include <corosync/votequorum.h>
.sp
-.BI "int votequorum_qdevice_register(votequorum_handle_t " handle ", char * " name ", unsigned int " votes ");"
+.BI "int votequorum_qdevice_register(votequorum_handle_t " handle ", const char * " name ");"
.SH DESCRIPTION
The
.B votequorum_qdevice_register
@@ -48,7 +48,14 @@
This call creates the device but does not mark it active.
.B votequorum_qdevice_poll
must be called for the votes to be included in the quorum calculation.
-.BR
+.br
+.B name
+is string containing an informative name for the quorum device. It is simply stored
+by votequorum and used in the display of corosync-quorumtool, it can be a maximum of 254 characters.
+.br
+The number of votes contributed by the quorum device is already known to votequorum, it is set in cmap
+quorum.device.votes and not by the device.
+.br
Note that it is the responsibility of the quorum device subsystem (not provided as part of votequorum)
to keep all nodes informed of the quorum device status.
.SH RETURN VALUE
@@ -71,5 +78,6 @@
.BR votequorum_setvotes (3),
.BR votequorum_qdevice_unregister (3),
.BR votequorum_qdevice_poll (3),
-.BR votequorum_qdevice_get_info (3)
+.BR votequorum_qdevice_update (3),
+.BR votequorum_qdevice_master_wins (3)
.PP
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/corosync-2.3.2/man/votequorum_qdevice_unregister.3.in new/corosync-2.3.3/man/votequorum_qdevice_unregister.3.in
--- old/corosync-2.3.2/man/votequorum_qdevice_unregister.3.in 2013-11-26 15:39:34.000000000 +0100
+++ new/corosync-2.3.3/man/votequorum_qdevice_unregister.3.in 2014-01-14 11:24:31.000000000 +0100
@@ -1,5 +1,5 @@
.\"/*
-.\" * Copyright (c) 2009,2012 Red Hat, Inc.
+.\" * Copyright (c) 2009,2012,2014 Red Hat, Inc.
.\" *
.\" * All rights reserved.
.\" *
@@ -37,7 +37,7 @@
.SH SYNOPSIS
.B #include <corosync/votequorum.h>
.sp
-.BI "int votequorum_qdevice_unregister(votequorum_handle_t " handle ");"
+.BI "int votequorum_qdevice_unregister(votequorum_handle_t " handle ", const char * " name ");"
.SH DESCRIPTION
The
.B votequorum_qdevice_unregister
@@ -63,5 +63,6 @@
.BR votequorum_setvotes (3),
.BR votequorum_qdevice_register (3),
.BR votequorum_qdevice_poll (3),
-.BR votequorum_qdevice_get_info (3)
+.BR votequorum_qdevice_update (3),
+.BR votequorum_qdevice_master_wins (3)
.PP
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/corosync-2.3.2/man/votequorum_qdevice_update.3.in new/corosync-2.3.3/man/votequorum_qdevice_update.3.in
--- old/corosync-2.3.2/man/votequorum_qdevice_update.3.in 1970-01-01 01:00:00.000000000 +0100
+++ new/corosync-2.3.3/man/votequorum_qdevice_update.3.in 2014-01-14 11:24:31.000000000 +0100
@@ -0,0 +1,69 @@
+.\"/*
+.\" * Copyright (c) 2014 Red Hat, Inc.
+.\" *
+.\" * All rights reserved.
+.\" *
+.\" * Author: Christine Caulfield <ccaulfie(a)redhat.com>
+.\" *
+.\" * This software licensed under BSD license, the text of which follows:
+.\" *
+.\" * Redistribution and use in source and binary forms, with or without
+.\" * modification, are permitted provided that the following conditions are met:
+.\" *
+.\" * - Redistributions of source code must retain the above copyright notice,
+.\" * this list of conditions and the following disclaimer.
+.\" * - Redistributions in binary form must reproduce the above copyright notice,
+.\" * this list of conditions and the following disclaimer in the documentation
+.\" * and/or other materials provided with the distribution.
+.\" * - Neither the name of the MontaVista Software, Inc. nor the names of its
+.\" * contributors may be used to endorse or promote products derived from this
+.\" * software without specific prior written permission.
+.\" *
+.\" * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+.\" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+.\" * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+.\" * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+.\" * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+.\" * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+.\" * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+.\" * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+.\" * THE POSSIBILITY OF SUCH DAMAGE.
+.\" */
+.TH VOTEQUORUM_QDEVICE_UPDATE 3 @BUILDDATE@ "corosync Man Page" "Corosync Cluster Engine Programmer's Manual"
+.SH NAME
+votequorum_qdevice_update \- Updates quorum device name
+.SH SYNOPSIS
+.B #include <corosync/votequorum.h>
+.sp
+.BI "int votequorum_qdevice_update(votequorum_handle_t " handle "const char " oldname ", const char " newname ");"
+.SH DESCRIPTION
+The
+.B votequorum_qdevice_update
+is used to change the name of the quorum device to corosync. The name of q quorum device is purely informational
+and has no significance to votequorum itself, but it's useful for the name (displayed by corosync-quorumtool)
+to reflect the actual device contributing votes to quorum to avoid user confusion.
+.SH RETURN VALUE
+This call returns the CS_OK value if successful, otherwise an error is returned.
+.PP
+.SH ERRORS
+@COMMONIPCERRORS@
+.SH "SEE ALSO"
+.BR votequorum_overview (8),
+.BR votequorum_initialize (3),
+.BR votequorum_finalize (3),
+.BR votequorum_getinfo (3),
+.BR votequorum_trackstart (3),
+.BR votequorum_trackstop (3),
+.BR votequorum_fd_get (3),
+.BR votequorum_dispatch (3),
+.BR votequorum_context_set (3),
+.BR votequorum_context_get (3),
+.BR votequorum_setexpected (3),
+.BR votequorum_setvotes (3),
+.BR votequorum_qdevice_register (3),
+.BR votequorum_qdevice_poll (3),
+.BR votequorum_qdevice_master_wins (3),
+.BR corosync-quorumtool (8)
+.PP
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/corosync-2.3.2/test/testvotequorum2.c new/corosync-2.3.3/test/testvotequorum2.c
--- old/corosync-2.3.2/test/testvotequorum2.c 2013-11-26 15:39:34.000000000 +0100
+++ new/corosync-2.3.3/test/testvotequorum2.c 2014-01-14 11:24:31.000000000 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009 Red Hat, Inc.
+ * Copyright (c) 2009-2014 Red Hat, Inc.
*
* All rights reserved.
*
@@ -37,6 +37,7 @@
#include <sys/types.h>
#include <stdio.h>
#include <stdint.h>
+#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <corosync/corotypes.h>
@@ -44,86 +45,132 @@
static votequorum_handle_t handle;
-static void print_info(int ok_to_fail)
+static int print_info(int ok_to_fail)
{
struct votequorum_info info;
int err;
- if ( (err=votequorum_getinfo(handle, VOTEQUORUM_QDEVICE_NODEID, &info)) != CS_OK)
+ if ( (err=votequorum_getinfo(handle, VOTEQUORUM_QDEVICE_NODEID, &info)) != CS_OK) {
fprintf(stderr, "votequorum_getinfo error %d: %s\n", err, ok_to_fail?"OK":"FAILED");
+ return -1;
+ }
else {
printf("name %s\n", info.qdevice_name);
printf("qdevice votes %d\n", info.qdevice_votes);
if (info.flags & VOTEQUORUM_INFO_QDEVICE_ALIVE) {
- printf("alive\n");
+ printf("alive ");
}
if (info.flags & VOTEQUORUM_INFO_QDEVICE_CAST_VOTE) {
- printf("cast vote\n");
+ printf("cast-vote ");
}
if (info.flags & VOTEQUORUM_INFO_QDEVICE_MASTER_WINS) {
- printf("master wins\n");
+ printf("master-wins");
}
- printf("\n");
+ printf("\n\n");
}
+ return 0;
+}
+
+static void usage(const char *command)
+{
+ printf("%s [-p <num>] [-t <time>] [-n <name>] [-c] [-m]\n", command);
+ printf(" -p <num> Number of times to poll qdevice (default 0=infinte)\n");
+ printf(" -t <secs> Time (in seconds) to wait between polls (default=1)\n");
+ printf(" -n <name> Name of quorum device (default QDEVICE)\n");
+ printf(" -c Cast vote (default yes)\n");
+ printf(" -q Don't print device status every poll time (default=will print)\n");
+ printf(" -m Master wins (default no)\n");
+ printf(" -1 Print status once and exit\n");
}
int main(int argc, char *argv[])
{
int ret = 0;
- int cast_vote = 1, master_wins = 1;
- int pollcount=0, polltime=1;
+ int cast_vote = 1, master_wins = 0;
+ int pollcount=0, polltime=1, quiet=0, once=0;
int err;
+ int opt;
+ const char *devicename = "QDEVICE";
+ const char *options = "n:p:t:cmq1h";
+
+ while ((opt = getopt(argc, argv, options)) != -1) {
+ switch (opt) {
+ case 'm':
+ master_wins = 1;
+ break;
+ case 'c':
+ cast_vote = 1;
+ break;
+ case '1':
+ once = 1;
+ break;
+ case 'q':
+ quiet = 1;
+ break;
+ case 'p':
+ pollcount = atoi(optarg)+1;
+ break;
+ case 'n':
+ devicename = strdup(optarg);
+ break;
+ case 't':
+ polltime = atoi(optarg);
+ break;
+ case 'h':
+ usage(argv[0]);
+ exit(0);
+ }
+ }
if ( (err=votequorum_initialize(&handle, NULL)) != CS_OK) {
fprintf(stderr, "votequorum_initialize FAILED: %d\n", err);
return -1;
}
- print_info(1);
-
- if (argc >= 2 && atoi(argv[1])) {
- pollcount = atoi(argv[1]);
- }
- if (argc >= 3 && atoi(argv[2])) {
- polltime = atoi(argv[2]);
+ if (quiet && once) {
+ fprintf(stderr, "setting both -q (quet) and -1 (once) makes no sense\n");
+ usage(argv[0]);
+ exit(1);
}
- if (argc >= 4) {
- cast_vote = atoi(argv[3]);
+
+ if (!quiet) {
+ print_info(1);
}
- if (argc >= 5) {
- master_wins = atoi(argv[4]);
+ if (once) {
+ exit(0);
}
if (argc >= 2) {
- if ( (err=votequorum_qdevice_register(handle, "QDEVICE")) != CS_OK) {
+ if ( (err=votequorum_qdevice_register(handle, devicename)) != CS_OK) {
fprintf(stderr, "qdevice_register FAILED: %d\n", err);
ret = -1;
goto out;
}
- if ( (err=votequorum_qdevice_master_wins(handle, "QDEVICE", master_wins)) != CS_OK) {
+ if ( (err=votequorum_qdevice_master_wins(handle, devicename, master_wins)) != CS_OK) {
fprintf(stderr, "qdevice_master_wins FAILED: %d\n", err);
ret = -1;
goto out;
}
- while (pollcount--) {
- print_info(0);
- if ((err=votequorum_qdevice_poll(handle, "QDEVICE", cast_vote)) != CS_OK) {
+ while (--pollcount) {
+ if (!quiet) print_info(0);
+ if ((err=votequorum_qdevice_poll(handle, devicename, cast_vote)) != CS_OK) {
fprintf(stderr, "qdevice poll FAILED: %d\n", err);
ret = -1;
goto out;
}
- print_info(0);
+ if (!quiet) print_info(0);
sleep(polltime);
}
- if ((err= votequorum_qdevice_unregister(handle, "QDEVICE")) != CS_OK) {
+ if ((err= votequorum_qdevice_unregister(handle, devicename)) != CS_OK) {
fprintf(stderr, "qdevice unregister FAILED: %d\n", err);
ret = -1;
goto out;
}
}
- print_info(1);
+
+ if (!quiet) print_info(1);
out:
votequorum_finalize(handle);
++++++ corosync-conf-example.patch ++++++
Index: corosync-2.3.2/conf/corosync.conf.example
===================================================================
--- corosync-2.3.2.orig/conf/corosync.conf.example
+++ corosync-2.3.2/conf/corosync.conf.example
@@ -9,6 +9,12 @@ totem {
crypto_cipher: none
crypto_hash: none
+ # Limit generated nodeids to 31-bits (positive signed integers)
+ # you would set it to 'yes', the new option 'new' means wiping
+ # off the highest bit in network order to avoid possible nodeid
+ # conflicting.
+ clear_node_high_bit: yes
+
# interface: define at least one interface to communicate
# over. If you define more than one interface stanza, you must
# also set rrp_mode.
@@ -77,5 +83,5 @@ logging {
quorum {
# Enable and configure quorum subsystem (default: off)
# see also corosync.conf.5 and votequorum.5
- #provider: corosync_votequorum
+ provider: corosync_votequorum
}
Index: corosync-2.3.2/conf/corosync.conf.example.udpu
===================================================================
--- corosync-2.3.2.orig/conf/corosync.conf.example.udpu
+++ corosync-2.3.2/conf/corosync.conf.example.udpu
@@ -5,6 +5,8 @@ totem {
crypto_cipher: none
crypto_hash: none
+ clear_node_high_bit: yes
+
interface {
ringnumber: 0
bindnetaddr: 10.16.35.0
@@ -54,5 +56,5 @@ nodelist {
quorum {
# Enable and configure quorum subsystem (default: off)
# see also corosync.conf.5 and votequorum.5
- #provider: corosync_votequorum
+ provider: corosync_votequorum
}
++++++ corosync-cts-api-error.patch ++++++
Index: corosync-2.3.2/cts/corolab.py
===================================================================
--- corosync-2.3.2.orig/cts/corolab.py
+++ corosync-2.3.2/cts/corolab.py
@@ -308,10 +308,10 @@ if __name__ == '__main__':
elif Environment["all-once"] or NumIter == 0:
NumIter = len(Tests)
scenario = AllOnce(
- cm, [ InitClusterManager(Environment), TestAgentComponent(Environment), PacketLoss(Environment) ], Audits, Tests)
+ cm, [ BootCluster(Environment), TestAgentComponent(Environment), PacketLoss(Environment) ], Audits, Tests)
else:
scenario = RandomTests(
- cm, [ InitClusterManager(Environment), TestAgentComponent(Environment), PacketLoss(Environment) ], Audits, Tests)
+ cm, [ BootCluster(Environment), TestAgentComponent(Environment), PacketLoss(Environment) ], Audits, Tests)
Environment.log(">>>>>>>>>>>>>>>> BEGINNING " + repr(NumIter) + " TESTS ")
Environment.log("Stack: %s" % Environment["Stack"])
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: opensuse-commit+help(a)opensuse.org
1
0
Hello community,
here is the log from the commit of package cloud-init for openSUSE:Factory checked in at 2014-01-30 14:54:04
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/cloud-init (Old)
and /work/SRC/openSUSE:Factory/.cloud-init.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "cloud-init"
Changes:
--------
--- /work/SRC/openSUSE:Factory/cloud-init/cloud-init.changes 2014-01-13 13:49:31.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.cloud-init.new/cloud-init.changes 2014-01-30 14:54:05.000000000 +0100
@@ -1,0 +2,6 @@
+Mon Jan 20 17:51:24 UTC 2014 - dmueller(a)suse.com
+
+- add python-jsonpatch, python-pyserial, python-PyYAML requires,
+ otherwise it immediately traces on startup
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ cloud-init.spec ++++++
--- /var/tmp/diff_new_pack.6W0W8W/_old 2014-01-30 14:54:05.000000000 +0100
+++ /var/tmp/diff_new_pack.6W0W8W/_new 2014-01-30 14:54:05.000000000 +0100
@@ -36,8 +36,11 @@
Requires: python-boto >= 2.7
Requires: python-cheetah
Requires: python-configobj
+Requires: python-jsonpatch
Requires: python-oauth
-Requires: python-prettytable
+Requires: python-PrettyTable
+Requires: python-pyserial
+Requires: python-PyYAML
Requires: python-requests
Requires: python-xml
Requires: python-yaml
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: opensuse-commit+help(a)opensuse.org
1
0
Hello community,
here is the log from the commit of package aegisub for openSUSE:Factory checked in at 2014-01-30 14:53:51
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/aegisub (Old)
and /work/SRC/openSUSE:Factory/.aegisub.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "aegisub"
Changes:
--------
--- /work/SRC/openSUSE:Factory/aegisub/aegisub.changes 2013-07-07 22:16:48.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.aegisub.new/aegisub.changes 2014-01-30 14:53:52.000000000 +0100
@@ -1,0 +2,8 @@
+Thu Jan 23 14:43:50 UTC 2014 - reddwarf(a)opensuse.org
+
+- Update to 3.1.1
+ * New features and bug fixes. See http://www.aegisub.org/changelog/3.1.0/
+ and http://www.aegisub.org/changelog/3.1.1/
+- Add aegisub-old_wc.patch
+
+-------------------------------------------------------------------
Old:
----
aegisub-3.0.4.tar.xz
New:
----
aegisub-3.1.1.tar.xz
aegisub-old_wc.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ aegisub.spec ++++++
--- /var/tmp/diff_new_pack.VOURts/_old 2014-01-30 14:53:53.000000000 +0100
+++ /var/tmp/diff_new_pack.VOURts/_new 2014-01-30 14:53:53.000000000 +0100
@@ -1,7 +1,7 @@
#
# spec file for package aegisub
#
-# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -19,18 +19,23 @@
%bcond_with ffms2
Name: aegisub
-Version: 3.0.4
+Version: 3.1.1
Release: 0
Summary: Subtitle editor
License: BSD-3-Clause
Group: Productivity/Multimedia/Video/Editors and Convertors
Url: http://www.aegisub.net/
Source0: http://ftp.aegisub.org/pub/releases/aegisub-%{version}.tar.xz
+Patch0: aegisub-old_wc.patch
+BuildRequires: autoconf
+BuildRequires: automake
+BuildRequires: boost-devel >= 1.50
BuildRequires: gcc-c++
+BuildRequires: intltool
BuildRequires: pkg-config >= 0.20
%define _use_internal_dependency_generator 0
%define __find_requires %wx_requires
-BuildRequires: wxWidgets-devel >= 2.9.3
+BuildRequires: wxWidgets-devel >= 2.9.5
BuildRequires: pkgconfig(alsa)
BuildRequires: pkgconfig(fftw3) >= 3.3
BuildRequires: pkgconfig(fontconfig) >= 2.4
@@ -55,8 +60,9 @@
functions with ease.
%prep
-%setup -q -n aegisub
-rm -r contrib docs
+%setup -q
+%patch0
+rm -r contrib docs deps
cd aegisub
FAKE_BUILDDATE=$(LC_ALL=C date -u -r %{_sourcedir}/%{name}.changes '+%%b %%e %%Y')
sed -i "s/__DATE__/\"$FAKE_BUILDDATE\"/" src/version.cpp
@@ -65,6 +71,7 @@
%build
cd aegisub
+autoreconf -fi
# Don't use --disable-update-checker because of http://blog.aegisub.org/2012/02/bit-of-statistics.html
%configure --with-player-audio=PulseAudio \
--without-oss
@@ -73,12 +80,12 @@
%install
cd aegisub
%make_install
-%find_lang %{name}-30
+%find_lang %{name}-31
-%files -f aegisub/%{name}-30.lang
+%files -f aegisub/%{name}-31.lang
%defattr(0644, root, root, 0755)
%doc aegisub/LICENCE
-%attr(0755,root,root) %{_bindir}/aegisub-3.0
+%attr(0755,root,root) %{_bindir}/aegisub-3.1
%{_datadir}/aegisub/
%{_datadir}/applications/aegisub.desktop
%{_datadir}/icons/hicolor/*/apps/aegisub.*
++++++ aegisub-3.0.4.tar.xz -> aegisub-3.1.1.tar.xz ++++++
++++ 257449 lines of diff (skipped)
++++++ aegisub-old_wc.patch ++++++
Index: aegisub/configure.ac
===================================================================
--- aegisub/configure.ac.orig
+++ aegisub/configure.ac
@@ -16,7 +16,7 @@ m4_define([libpulse_required_version], [
m4_define([lua_auto4_required_version], [5.1])
m4_define([pkgconfig_required_version], [0.20])
m4_define([portaudio_required_version], [19])
-m4_define([wx_required_version], [3.0.0])
+m4_define([wx_required_version], [2.9.5])
#######
# Setup
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe(a)opensuse.org
For additional commands, e-mail: opensuse-commit+help(a)opensuse.org
1
0