Hello community, here is the log from the commit of package cacti-spine for openSUSE:Factory checked in at 2020-12-08 13:24:29 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/cacti-spine (Old) and /work/SRC/openSUSE:Factory/.cacti-spine.new.5913 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "cacti-spine" Tue Dec 8 13:24:29 2020 rev:31 rq:853624 version:1.2.16 Changes: -------- --- /work/SRC/openSUSE:Factory/cacti-spine/cacti-spine.changes 2020-11-13 18:58:23.758070292 +0100 +++ /work/SRC/openSUSE:Factory/.cacti-spine.new.5913/cacti-spine.changes 2020-12-08 13:25:48.858745928 +0100 @@ -1,0 +2,11 @@ +Mon Dec 7 16:13:30 UTC 2020 - Andreas Stieger <[email protected]> + +- cacti-spine 1.2.16: + * Some developer debug log messages falsely labeled as WARNINGS + * Remove the need of the dos2unix program + * Fix Spine experiencing MySQL socket error 2002 under load + * Under heavy load MySQL/MariaDB return 2006 and 2013 errors on query + * Add backtrace output to stderr for signals + * Add Data Source turnaround time to debug output + +------------------------------------------------------------------- Old: ---- cacti-spine-1.2.15.tar.gz New: ---- cacti-spine-1.2.16.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ cacti-spine.spec ++++++ --- /var/tmp/diff_new_pack.vmhZDw/_old 2020-12-08 13:25:49.326747263 +0100 +++ /var/tmp/diff_new_pack.vmhZDw/_new 2020-12-08 13:25:49.326747263 +0100 @@ -17,13 +17,12 @@ Name: cacti-spine -Version: 1.2.15 +Version: 1.2.16 Release: 0 Summary: Threaded poller for Cacti written in C License: LGPL-2.1-or-later URL: https://www.cacti.net/spine_info.php Source: https://www.cacti.net/downloads/spine/%{name}-%{version}.tar.gz -BuildRequires: dos2unix BuildRequires: help2man BuildRequires: libtool BuildRequires: mysql-devel ++++++ cacti-spine-1.2.15.tar.gz -> cacti-spine-1.2.16.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cacti-spine-1.2.15/CHANGELOG new/cacti-spine-1.2.16/CHANGELOG --- old/cacti-spine-1.2.15/CHANGELOG 2020-11-02 04:28:32.000000000 +0100 +++ new/cacti-spine-1.2.16/CHANGELOG 2020-11-30 19:21:59.000000000 +0100 @@ -1,5 +1,13 @@ The Cacti Group | spine +1.2.16 +-issue: Some developer debug log messages falsely labeled as WARNINGS +-issue#164: Remove the need of the dos2unix program +-issue#171: Spine experiencing MySQL socket error 2002 under load +-issue#175: Under heavy load MySQL/MariaDB return 2006 and 2013 errors on query +-feature: Add backtrace output to stderr for signals +-feature#176: Add Data Source turnaround time to debug output + 1.2.15 -issue#166: Special characters may not always be ignored properly -issue#168: Correct issues with linking under OpenBSD diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cacti-spine-1.2.15/bootstrap new/cacti-spine-1.2.16/bootstrap --- old/cacti-spine-1.2.15/bootstrap 2020-11-02 04:28:32.000000000 +0100 +++ new/cacti-spine-1.2.16/bootstrap 2020-11-30 19:21:59.000000000 +0100 @@ -28,15 +28,11 @@ } # Check for parameters -if [ "${1}x" = "--helpx" -o "${1}x" = "-hx" ]; then +if [ "${1}" = "--help" -o "${1}" = "-h" ]; then display_help exit 0 fi -# Check for dos2unix -which dos2unix > /dev/null 2>&1 -[ $? -gt 0 ] && echo "FATAL: Unable to locate dos2unix utility" && exit -1 - echo "INFO: Starting Spine build process" # Remove software build specific directories @@ -44,7 +40,10 @@ rm -rf autom4te.cache .deps # Make sure all files are unix formatted files -find . -type f -exec dos2unix --d2u \{\} \; > /dev/null 2>&1 +which dos2unix > /dev/null 2>&1 +if [ $? -eq 0 ]; then + find . -type f -exec dos2unix --d2u \{\} \; > /dev/null 2>&1 +fi # Prepare a build state echo "INFO: Running auto-tools to verify buildability" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cacti-spine-1.2.15/configure.ac new/cacti-spine-1.2.16/configure.ac --- old/cacti-spine-1.2.15/configure.ac 2020-11-02 04:28:32.000000000 +0100 +++ new/cacti-spine-1.2.16/configure.ac 2020-11-30 19:21:59.000000000 +0100 @@ -1,5 +1,5 @@ AC_PREREQ(2.53) -AC_INIT(Spine Poller, 1.2.15, http://www.cacti.net/issues.php) +AC_INIT(Spine Poller, 1.2.16, http://www.cacti.net/issues.php) AC_CONFIG_AUX_DIR(config) AC_SUBST(ac_aux_dir) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cacti-spine-1.2.15/error.c new/cacti-spine-1.2.16/error.c --- old/cacti-spine-1.2.15/error.c 2020-11-02 04:28:32.000000000 +0100 +++ new/cacti-spine-1.2.16/error.c 2020-11-30 19:21:59.000000000 +0100 @@ -54,30 +54,67 @@ set.exit_code = spine_signal; switch (spine_signal) { + case SIGABRT: + spine_print_backtrace(); + die("FATAL: Spine Interrupted by Abort Signal"); + break; case SIGINT: + spine_print_backtrace(); die("FATAL: Spine Interrupted by Console Operator"); break; case SIGSEGV: + spine_print_backtrace(); die("FATAL: Spine Encountered a Segmentation Fault"); break; case SIGBUS: + spine_print_backtrace(); die("FATAL: Spine Encountered a Bus Error"); break; case SIGFPE: + spine_print_backtrace(); die("FATAL: Spine Encountered a Floating Point Exception"); break; case SIGQUIT: + spine_print_backtrace(); die("FATAL: Spine Encountered a Keyboard Quit Command"); break; case SIGPIPE: + spine_print_backtrace(); die("FATAL: Spine Encountered a Broken Pipe"); break; default: + spine_print_backtrace(); die("FATAL: Spine Encountered An Unhandled Exception Signal Number: '%d'", spine_signal); break; } } +void spine_print_backtrace() { + int nptrs; + int bt_buf_size = 100; + void *buffer[bt_buf_size]; + char **strings; + int j; + + nptrs = backtrace(buffer, bt_buf_size); + fprintf(stderr, "backtrace() returned %d addresses\n", nptrs); + + /* The call backtrace_symbols_fd(buffer, nptrs, STDOUT_FILENO) + * would produce similar output to the following: */ + + strings = backtrace_symbols(buffer, nptrs); + if (strings == NULL) { + perror("Spine backtrace symbols follow"); + exit(EXIT_FAILURE); + } + + for (j = 0; j < nptrs; j++) { + fprintf(stderr, "%s\n", strings[j]); + } + + free(strings); +} + static int spine_fatal_signals[] = { SIGINT, SIGPIPE, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cacti-spine-1.2.15/error.h new/cacti-spine-1.2.16/error.h --- old/cacti-spine-1.2.15/error.h 2020-11-02 04:28:32.000000000 +0100 +++ new/cacti-spine-1.2.16/error.h 2020-11-30 19:21:59.000000000 +0100 @@ -31,5 +31,6 @@ +-------------------------------------------------------------------------+ */ +extern void spine_print_backtrace(void); extern void install_spine_signal_handler(void); extern void uninstall_spine_signal_handler(void); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cacti-spine-1.2.15/poller.c new/cacti-spine-1.2.16/poller.c --- old/cacti-spine-1.2.15/poller.c 2020-11-02 04:28:32.000000000 +0100 +++ new/cacti-spine-1.2.16/poller.c 2020-11-30 19:21:59.000000000 +0100 @@ -175,6 +175,8 @@ char last_snmp_context[65]; char last_snmp_engine_id[30]; double poll_time = get_time_as_double(); + double thread_start = 0; + double thread_end = 0; /* reindex shortcuts to speed polling */ int previous_assert_failure = FALSE; @@ -1090,6 +1092,8 @@ i = 0; k = 0; while ((i < num_rows) && (!host->ignore_host)) { + thread_start = get_time_as_double(); + switch(poller_items[i].action) { case POLLER_ACTION_SNMP: /* raw SNMP poll */ /* initialize or reinitialize snmp as required */ @@ -1196,10 +1200,12 @@ snprintf(poller_items[snmp_oids[j].array_position].result, RESULTS_BUFFER, "%s", snmp_oids[j].result); + thread_end = get_time_as_double(); + if (is_debug_device(host_id)) { - SPINE_LOG(("Device[%i] HT[%i] DS[%i] SNMP: v%i: %s, dsname: %s, oid: %s, value: %s", host_id, host_thread, poller_items[snmp_oids[j].array_position].local_data_id, host->snmp_version, host->hostname, poller_items[snmp_oids[j].array_position].rrd_name, poller_items[snmp_oids[j].array_position].arg1, poller_items[snmp_oids[j].array_position].result)); + SPINE_LOG(("Device[%i] HT[%i] DS[%i] TT[%.2f] SNMP: v%i: %s, dsname: %s, oid: %s, value: %s", host_id, host_thread, poller_items[snmp_oids[j].array_position].local_data_id, (thread_end - thread_start) * 1000, host->snmp_version, host->hostname, poller_items[snmp_oids[j].array_position].rrd_name, poller_items[snmp_oids[j].array_position].arg1, poller_items[snmp_oids[j].array_position].result)); } else { - SPINE_LOG_MEDIUM(("Device[%i] HT[%i] DS[%i] SNMP: v%i: %s, dsname: %s, oid: %s, value: %s", host_id, host_thread, poller_items[snmp_oids[j].array_position].local_data_id, host->snmp_version, host->hostname, poller_items[snmp_oids[j].array_position].rrd_name, poller_items[snmp_oids[j].array_position].arg1, poller_items[snmp_oids[j].array_position].result)); + SPINE_LOG_MEDIUM(("Device[%i] HT[%i] DS[%i] TT[%.2f] SNMP: v%i: %s, dsname: %s, oid: %s, value: %s", host_id, host_thread, poller_items[snmp_oids[j].array_position].local_data_id, (thread_end - thread_start) * 1000, host->snmp_version, host->hostname, poller_items[snmp_oids[j].array_position].rrd_name, poller_items[snmp_oids[j].array_position].arg1, poller_items[snmp_oids[j].array_position].result)); } } @@ -1291,10 +1297,12 @@ snprintf(poller_items[snmp_oids[j].array_position].result, RESULTS_BUFFER, "%s", snmp_oids[j].result); + thread_end = get_time_as_double(); + if (is_debug_device(host_id)) { - SPINE_LOG(("Device[%i] HT[%i] DS[%i] SNMP: v%i: %s, dsname: %s, oid: %s, value: %s", host_id, host_thread, poller_items[snmp_oids[j].array_position].local_data_id, host->snmp_version, host->hostname, poller_items[snmp_oids[j].array_position].rrd_name, poller_items[snmp_oids[j].array_position].arg1, poller_items[snmp_oids[j].array_position].result)); + SPINE_LOG(("Device[%i] HT[%i] DS[%i] TT[%.2f] SNMP: v%i: %s, dsname: %s, oid: %s, value: %s", host_id, host_thread, poller_items[snmp_oids[j].array_position].local_data_id, (thread_end - thread_start) * 1000, host->snmp_version, host->hostname, poller_items[snmp_oids[j].array_position].rrd_name, poller_items[snmp_oids[j].array_position].arg1, poller_items[snmp_oids[j].array_position].result)); } else { - SPINE_LOG_MEDIUM(("Device[%i] HT[%i] DS[%i] SNMP: v%i: %s, dsname: %s, oid: %s, value: %s", host_id, host_thread, poller_items[snmp_oids[j].array_position].local_data_id, host->snmp_version, host->hostname, poller_items[snmp_oids[j].array_position].rrd_name, poller_items[snmp_oids[j].array_position].arg1, poller_items[snmp_oids[j].array_position].result)); + SPINE_LOG_MEDIUM(("Device[%i] HT[%i] DS[%i] TT[%.2f] SNMP: v%i: %s, dsname: %s, oid: %s, value: %s", host_id, host_thread, poller_items[snmp_oids[j].array_position].local_data_id, (thread_end - thread_start) * 1000, host->snmp_version, host->hostname, poller_items[snmp_oids[j].array_position].rrd_name, poller_items[snmp_oids[j].array_position].arg1, poller_items[snmp_oids[j].array_position].result)); } if (!IS_UNDEFINED(poller_items[snmp_oids[j].array_position].result)) { @@ -1357,10 +1365,12 @@ if (poll_result) free(poll_result); + thread_end = get_time_as_double(); + if (is_debug_device(host_id)) { - SPINE_LOG(("Device[%i] HT[%i] DS[%i] SCRIPT: %s, output: %s", host_id, host_thread, poller_items[i].local_data_id, poller_items[i].arg1, poller_items[i].result)); + SPINE_LOG(("Device[%i] HT[%i] DS[%i] TT[%.2f] SCRIPT: %s, output: %s", host_id, host_thread, poller_items[i].local_data_id, (thread_end - thread_start) * 1000, poller_items[i].arg1, poller_items[i].result)); } else { - SPINE_LOG_MEDIUM(("Device[%i] HT[%i] DS[%i] SCRIPT: %s, output: %s", host_id, host_thread, poller_items[i].local_data_id, poller_items[i].arg1, poller_items[i].result)); + SPINE_LOG_MEDIUM(("Device[%i] HT[%i] DS[%i] TT[%.2f] SCRIPT: %s, output: %s", host_id, host_thread, poller_items[i].local_data_id, (thread_end - thread_start) * 1000, poller_items[i].arg1, poller_items[i].result)); } if (!IS_UNDEFINED(poller_items[i].result)) { @@ -1413,10 +1423,12 @@ if (poll_result) free(poll_result); + thread_end = get_time_as_double(); + if (is_debug_device(host_id)) { - SPINE_LOG(("Device[%i] HT[%i] DS[%i] SS[%i] SERVER: %s, output: %s", host_id, host_thread, poller_items[i].local_data_id, php_process, poller_items[i].arg1, poller_items[i].result)); + SPINE_LOG(("Device[%i] HT[%i] DS[%i] SS[%i] TT[%.2f] SERVER: %s, output: %s", host_id, host_thread, poller_items[i].local_data_id, php_process, (thread_end - thread_start) * 1000, poller_items[i].arg1, poller_items[i].result)); } else { - SPINE_LOG_MEDIUM(("Device[%i] HT[%i] DS[%i] SS[%i] SERVER: %s, output: %s", host_id, host_thread, poller_items[i].local_data_id, php_process, poller_items[i].arg1, poller_items[i].result)); + SPINE_LOG_MEDIUM(("Device[%i] HT[%i] DS[%i] SS[%i] TT[%.2f] SERVER: %s, output: %s", host_id, host_thread, poller_items[i].local_data_id, php_process, (thread_end - thread_start) * 1000, poller_items[i].arg1, poller_items[i].result)); } if (IS_UNDEFINED(poller_items[i].result)) { @@ -1497,10 +1509,12 @@ snprintf(poller_items[snmp_oids[j].array_position].result, RESULTS_BUFFER, "%s", snmp_oids[j].result); + thread_end = get_time_as_double(); + if (is_debug_device(host_id)) { - SPINE_LOG(("Device[%i] HT[%i] DS[%i] SNMP: v%i: %s, dsname: %s, oid: %s, value: %s", host_id, host_thread, poller_items[snmp_oids[j].array_position].local_data_id, host->snmp_version, host->hostname, poller_items[snmp_oids[j].array_position].rrd_name, poller_items[snmp_oids[j].array_position].arg1, poller_items[snmp_oids[j].array_position].result)); + SPINE_LOG(("Device[%i] HT[%i] DS[%i] TT[%.2f] SNMP: v%i: %s, dsname: %s, oid: %s, value: %s", host_id, host_thread, poller_items[snmp_oids[j].array_position].local_data_id, (thread_end - thread_start) * 1000, host->snmp_version, host->hostname, poller_items[snmp_oids[j].array_position].rrd_name, poller_items[snmp_oids[j].array_position].arg1, poller_items[snmp_oids[j].array_position].result)); } else { - SPINE_LOG_MEDIUM(("Device[%i] HT[%i] DS[%i] SNMP: v%i: %s, dsname: %s, oid: %s, value: %s", host_id, host_thread, poller_items[snmp_oids[j].array_position].local_data_id, host->snmp_version, host->hostname, poller_items[snmp_oids[j].array_position].rrd_name, poller_items[snmp_oids[j].array_position].arg1, poller_items[snmp_oids[j].array_position].result)); + SPINE_LOG_MEDIUM(("Device[%i] HT[%i] DS[%i] TT[%.2f] SNMP: v%i: %s, dsname: %s, oid: %s, value: %s", host_id, host_thread, poller_items[snmp_oids[j].array_position].local_data_id, (thread_end - thread_start) * 1000, host->snmp_version, host->hostname, poller_items[snmp_oids[j].array_position].rrd_name, poller_items[snmp_oids[j].array_position].arg1, poller_items[snmp_oids[j].array_position].result)); } if (!IS_UNDEFINED(poller_items[snmp_oids[j].array_position].result)) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cacti-spine-1.2.15/snmp.c new/cacti-spine-1.2.16/snmp.c --- old/cacti-spine-1.2.15/snmp.c 2020-11-02 04:28:32.000000000 +0100 +++ new/cacti-spine-1.2.16/snmp.c 2020-11-30 19:21:59.000000000 +0100 @@ -344,27 +344,27 @@ if (current_host->snmp_session != NULL) { anOID_len = MAX_OID_LEN; - SPINE_LOG_DEVDBG(("Device[%i] WARNING: snmp_pdu_create(%s)", current_host->id, snmp_oid)); + SPINE_LOG_DEVDBG(("Device[%i] DEBUG: snmp_pdu_create(%s)", current_host->id, snmp_oid)); pdu = snmp_pdu_create(SNMP_MSG_GET); - SPINE_LOG_DEVDBG(("Device[%i] WARNING: snmp_pdu_create(%s) [complete]", current_host->id, snmp_oid)); + SPINE_LOG_DEVDBG(("Device[%i] DEBUG: snmp_pdu_create(%s) [complete]", current_host->id, snmp_oid)); - SPINE_LOG_DEVDBG(("Device[%i] WARNING: snmp_parse_oid(%s)", current_host->id, snmp_oid)); + SPINE_LOG_DEVDBG(("Device[%i] DEBUG: snmp_parse_oid(%s)", current_host->id, snmp_oid)); if (!snmp_parse_oid(snmp_oid, anOID, &anOID_len)) { - SPINE_LOG_DEVDBG(("Device[%i] WARNING: snmp_parse_oid(%s) [complete]", current_host->id, snmp_oid)); + SPINE_LOG_DEVDBG(("Device[%i] DEBUG: snmp_parse_oid(%s) [complete]", current_host->id, snmp_oid)); SPINE_LOG(("Device[%i] ERROR: SNMP Get Problems parsing SNMP OID %s", current_host->id, snmp_oid)); SET_UNDEFINED(result_string); return result_string; } else { - SPINE_LOG_DEVDBG(("Device[%i] WARNING: snmp_parse_oid(%s) [complete]", current_host->id, snmp_oid)); - SPINE_LOG_DEVDBG(("Device[%i] WARNING: snmp_add_null_var(%s)", current_host->id, snmp_oid)); + SPINE_LOG_DEVDBG(("Device[%i] DEBUG: snmp_parse_oid(%s) [complete]", current_host->id, snmp_oid)); + SPINE_LOG_DEVDBG(("Device[%i] DEBUG: snmp_add_null_var(%s)", current_host->id, snmp_oid)); snmp_add_null_var(pdu, anOID, anOID_len); - SPINE_LOG_DEVDBG(("Device[%i] WARNING: snmp_add_null_var(%s) [complete]", current_host->id, snmp_oid)); + SPINE_LOG_DEVDBG(("Device[%i] DEBUG: snmp_add_null_var(%s) [complete]", current_host->id, snmp_oid)); } /* poll host */ - SPINE_LOG_DEVDBG(("Device[%i] WARNING: snmp_sess_sync_response(%s)", current_host->id, snmp_oid)); + SPINE_LOG_DEVDBG(("Device[%i] DEBUG: snmp_sess_sync_response(%s)", current_host->id, snmp_oid)); status = snmp_sess_synch_response(current_host->snmp_session, pdu, &response); - SPINE_LOG_DEVDBG(("Device[%i] WARNING: snmp_sess_sync_response(%s) [complete]", current_host->id, snmp_oid)); + SPINE_LOG_DEVDBG(("Device[%i] DEBUG: snmp_sess_sync_response(%s) [complete]", current_host->id, snmp_oid)); /* add status to host structure */ current_host->snmp_status = status; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/cacti-spine-1.2.15/sql.c new/cacti-spine-1.2.16/sql.c --- old/cacti-spine-1.2.15/sql.c 2020-11-02 04:28:32.000000000 +0100 +++ new/cacti-spine-1.2.16/sql.c 2020-11-30 19:21:59.000000000 +0100 @@ -130,34 +130,32 @@ if (error == 2013 && errno == EINTR) { usleep(50000); continue; - } - - if ((error == 1213) || (error == 1205)) { - #ifndef SOLAR_THREAD + } else if (error == 2013 || (error == 2006 && errno == EINTR)) { + db_disconnect(mysql); usleep(50000); - #endif + db_connect(type, mysql); error_count++; if (error_count > 30) { - SPINE_LOG(("FATAL: Too many Lock/Deadlock errors occurred!, SQL Fragment:'%s'", query_frag)); + SPINE_LOG(("FATAL: Too many Reconnect Attempts!")); exit(1); } continue; - } else if (error == 2006 && errno == EINTR) { - db_disconnect(mysql); + } + + if ((error == 1213) || (error == 1205)) { usleep(50000); - db_connect(type, mysql); error_count++; if (error_count > 30) { - SPINE_LOG(("FATAL: Too many Reconnect Attempts!")); + SPINE_LOG(("FATAL: Too many Lock/Deadlock errors occurred!, SQL Fragment:'%s'", query_frag)); exit(1); } continue; } else { - SPINE_LOG(("FATAL: MySQL Error:'%i', Message:'%s'", error, mysql_error(mysql))); + SPINE_LOG(("FATAL: Database Error:'%i', Message:'%s'", error, mysql_error(mysql))); exit(1); } } else { @@ -236,7 +234,7 @@ mysql_init(mysql); if (mysql == NULL) { - SPINE_LOG(("FATAL: MySQL unable to allocate memory and therefore can not connect")); + SPINE_LOG(("FATAL: Database unable to allocate memory and therefore can not connect")); exit(1); } @@ -291,7 +289,7 @@ error = mysql_errno(mysql); db_disconnect(mysql); - if ((error == 2003 || error == 2013) && errno == EINTR) { + if ((error == 2002 || error == 2003 || error == 2006 || error == 2013) && errno == EINTR) { usleep(50000); tries++; success = FALSE; @@ -299,7 +297,7 @@ } if (error != 1049 && error != 2005 && error != 1045) { - printf("MYSQL: Connection Failed: Error:'%u', Message:'%s'\n", mysql_errno(mysql), mysql_error(mysql)); + printf("Database: Connection Failed: Error:'%u', Message:'%s'\n", mysql_errno(mysql), mysql_error(mysql)); success = FALSE; _______________________________________________ openSUSE Commits mailing list -- [email protected] To unsubscribe, email [email protected] List Netiquette: https://en.opensuse.org/openSUSE:Mailing_list_netiquette List Archives: https://lists.opensuse.org/archives/list/[email protected]
