import pcp-5.3.5-8.el9
This commit is contained in:
		
						commit
						104d922abc
					
				
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | ||||
| SOURCES/pcp-5.3.5.src.tar.gz | ||||
							
								
								
									
										1
									
								
								.pcp.metadata
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								.pcp.metadata
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | ||||
| ee69b4a4e33cb5366d30c4c006ba41ccd6386d87 SOURCES/pcp-5.3.5.src.tar.gz | ||||
							
								
								
									
										193
									
								
								SOURCES/redhat-bugzilla-1973833.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										193
									
								
								SOURCES/redhat-bugzilla-1973833.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,193 @@ | ||||
| commit 6b907e90c74fce82d6b712493d8b362bdd1a1ec1 | ||||
| Author: Nathan Scott <nathans@redhat.com> | ||||
| Date:   Tue Dec 14 08:54:14 2021 +1100 | ||||
| 
 | ||||
|     pmlogconf: switch to the bulk pmLookupDescs(3) interface | ||||
|      | ||||
|     No functional change, all existing regression tests pass. | ||||
|      | ||||
|     Related to Red Hat BZ #1973833. | ||||
| 
 | ||||
| diff --git a/src/pmlogconf/pmlogconf.c b/src/pmlogconf/pmlogconf.c
 | ||||
| index fa1156859d..ef4fc08bbd 100644
 | ||||
| --- a/src/pmlogconf/pmlogconf.c
 | ||||
| +++ b/src/pmlogconf/pmlogconf.c
 | ||||
| @@ -473,13 +473,19 @@ fetch_groups(void)
 | ||||
|  { | ||||
|      static pmResult	*result; | ||||
|      const char		**names; | ||||
| +    pmDesc		*descs;
 | ||||
|      pmID		*pmids; | ||||
| -    int			i, n, sts;
 | ||||
| +    int			i, n, sts, count;
 | ||||
|   | ||||
| -    /* prepare arrays of names and identifiers for PMAPI metric lookup */
 | ||||
| +    /* prepare arrays of names, descriptors and IDs for PMAPI metric lookup */
 | ||||
|      if ((names = calloc(ngroups, sizeof(char *))) == NULL) | ||||
|  	return -ENOMEM; | ||||
| +    if ((descs = calloc(ngroups, sizeof(pmDesc))) == NULL) {
 | ||||
| +	free(names);
 | ||||
| +	return -ENOMEM;
 | ||||
| +    }
 | ||||
|      if ((pmids = calloc(ngroups, sizeof(pmID))) == NULL) { | ||||
| +	free(descs);
 | ||||
|  	free(names); | ||||
|  	return -ENOMEM; | ||||
|      } | ||||
| @@ -490,15 +496,16 @@ fetch_groups(void)
 | ||||
|  	    continue; | ||||
|  	names[n++] = (const char *)groups[i].metric; | ||||
|      } | ||||
| +    count = n;
 | ||||
|   | ||||
| -    if ((sts = pmLookupName(n, names, pmids)) < 0) {
 | ||||
| -	if (n == 1)
 | ||||
| +    if ((sts = pmLookupName(count, names, pmids)) < 0) {
 | ||||
| +	if (count == 1)
 | ||||
|  	    groups[0].pmid = PM_ID_NULL; | ||||
|  	else | ||||
|  	    fprintf(stderr, "%s: cannot lookup metric names: %s\n", | ||||
|  			    pmGetProgname(), pmErrStr(sts)); | ||||
|      } | ||||
| -    else if ((sts = pmFetch(n, pmids, &result)) < 0) {
 | ||||
| +    else if ((sts = pmFetch(count, pmids, &result)) < 0) {
 | ||||
|  	fprintf(stderr, "%s: cannot fetch metric values: %s\n", | ||||
|  			pmGetProgname(), pmErrStr(sts)); | ||||
|      } | ||||
| @@ -510,6 +517,13 @@ fetch_groups(void)
 | ||||
|  	    else | ||||
|  		groups[i].pmid = pmids[n++]; | ||||
|  	} | ||||
| +	/* descriptor lookup, descs_hash handles failure here */
 | ||||
| +	(void) pmLookupDescs(count, pmids, descs);
 | ||||
| +
 | ||||
| +	/* create a hash over the descs for quick PMID lookup */
 | ||||
| +	if ((sts = descs_hash(count, descs)) < 0)
 | ||||
| +	    fprintf(stderr, "%s: cannot hash metric descs: %s\n",
 | ||||
| +			    pmGetProgname(), pmErrStr(sts));
 | ||||
|  	/* create a hash over the result for quick PMID lookup */ | ||||
|  	if ((sts = values_hash(result)) < 0) | ||||
|  	    fprintf(stderr, "%s: cannot hash metric values: %s\n", | ||||
| @@ -806,14 +820,16 @@ evaluate_string_regexp(group_t *group, regex_cmp_t compare)
 | ||||
|      int			i, found; | ||||
|      pmValueSet		*vsp; | ||||
|      pmValue		*vp; | ||||
| +    pmDesc		*dp;
 | ||||
|      pmAtomValue		atom; | ||||
|      regex_t		regex; | ||||
|      int			sts, type; | ||||
|   | ||||
| -    if ((vsp = metric_values(group->pmid)) == NULL)
 | ||||
| +    if ((vsp = metric_values(group->pmid)) == NULL ||
 | ||||
| +        (dp = metric_desc(group->pmid)) == NULL)
 | ||||
|  	return 0; | ||||
|   | ||||
| -    type = metric_type(group->pmid);
 | ||||
| +    type = dp->type;
 | ||||
|      if (type < 0 || type > PM_TYPE_STRING) { | ||||
|  	fprintf(stderr, "%s: %s uses regular expression on non-scalar metric\n", | ||||
|  		pmGetProgname(), group->tag); | ||||
| @@ -849,11 +865,14 @@ evaluate_string_regexp(group_t *group, regex_cmp_t compare)
 | ||||
|  static int | ||||
|  evaluate_values(group_t *group, numeric_cmp_t ncmp, string_cmp_t scmp) | ||||
|  { | ||||
| -    int			type = metric_type(group->pmid);
 | ||||
| +    pmDesc		*dp;
 | ||||
| +
 | ||||
| +    if ((dp = metric_desc(group->pmid)) == NULL)
 | ||||
| +	return 0;
 | ||||
|   | ||||
| -    if (type == PM_TYPE_STRING)
 | ||||
| +    if (dp->type == PM_TYPE_STRING)
 | ||||
|  	return evaluate_string_values(group, scmp); | ||||
| -    return evaluate_number_values(group, type, ncmp);
 | ||||
| +    return evaluate_number_values(group, dp->type, ncmp);
 | ||||
|  } | ||||
|   | ||||
|  int | ||||
| diff --git a/src/pmlogconf/util.c b/src/pmlogconf/util.c
 | ||||
| index d44c2e529a..293eb2eca3 100644
 | ||||
| --- a/src/pmlogconf/util.c
 | ||||
| +++ b/src/pmlogconf/util.c
 | ||||
| @@ -1,5 +1,5 @@
 | ||||
|  /* | ||||
| - * Copyright (c) 2020 Red Hat.  All Rights Reserved.
 | ||||
| + * Copyright (c) 2020-2021 Red Hat.  All Rights Reserved.
 | ||||
|   *  | ||||
|   * This program is free software; you can redistribute it and/or modify it | ||||
|   * under the terms of the GNU General Public License as published by the | ||||
| @@ -14,7 +14,7 @@
 | ||||
|  #include "util.h" | ||||
|   | ||||
|  static __pmHashCtl	valuesctl;	/* pointers to values in pmResult */ | ||||
| -static __pmHashCtl	typesctl;	/* metric types from pmLookupDesc */
 | ||||
| +static __pmHashCtl	descsctl;	/* metric descs from pmLookupDesc */
 | ||||
|   | ||||
|  int | ||||
|  values_hash(pmResult *result) | ||||
| @@ -47,27 +47,33 @@ metric_values(pmID pmid)
 | ||||
|  } | ||||
|   | ||||
|  int | ||||
| -metric_type(pmID pmid)
 | ||||
| +descs_hash(int numpmid, pmDesc *descs)
 | ||||
|  { | ||||
| -    __pmHashNode	*node;
 | ||||
| -    pmDesc		desc;
 | ||||
| -    int			sts, *data;
 | ||||
| +    unsigned int	i;
 | ||||
| +    pmDesc		*dp;
 | ||||
| +    int			sts;
 | ||||
|   | ||||
| -    if (pmid == PM_IN_NULL)
 | ||||
| -	return PM_TYPE_UNKNOWN;
 | ||||
| -    if ((node = __pmHashSearch(pmid, &typesctl)) == NULL) {
 | ||||
| -	if ((sts = pmLookupDesc(pmid, &desc)) < 0)
 | ||||
| -	    return sts;
 | ||||
| -	if ((data = malloc(sizeof(int))) == NULL)
 | ||||
| -	    return sts;
 | ||||
| -	*data = desc.type;
 | ||||
| -	if ((sts = __pmHashAdd(pmid, data, &typesctl)) < 0) {
 | ||||
| -	    free(data);
 | ||||
| +    if ((sts = __pmHashPreAlloc(numpmid, &descsctl)) < 0)
 | ||||
| +	return sts;
 | ||||
| +
 | ||||
| +    for (i = 0; i < numpmid; i++) {
 | ||||
| +	dp = &descs[i];
 | ||||
| +	if ((sts = __pmHashAdd(dp->pmid, dp, &descsctl)) < 0)
 | ||||
|  	    return sts; | ||||
| -	}
 | ||||
| -	return *data;
 | ||||
|      } | ||||
| -    return *(int *)node->data;
 | ||||
| +    return numpmid;
 | ||||
| +}
 | ||||
| +
 | ||||
| +pmDesc *
 | ||||
| +metric_desc(pmID pmid)
 | ||||
| +{
 | ||||
| +    __pmHashNode	*node;
 | ||||
| +
 | ||||
| +    if (pmid == PM_IN_NULL)
 | ||||
| +	return NULL;
 | ||||
| +    if ((node = __pmHashSearch(pmid, &descsctl)) == NULL)
 | ||||
| +	return NULL;
 | ||||
| +    return (pmDesc *)node->data;
 | ||||
|  } | ||||
|   | ||||
|  int | ||||
| diff --git a/src/pmlogconf/util.h b/src/pmlogconf/util.h
 | ||||
| index 17d856a0d7..a11350d899 100644
 | ||||
| --- a/src/pmlogconf/util.h
 | ||||
| +++ b/src/pmlogconf/util.h
 | ||||
| @@ -34,7 +34,9 @@ extern void fmt(const char *, char *, size_t, int, int, fmt_t, void *);
 | ||||
|   | ||||
|  extern int values_hash(pmResult *); | ||||
|  extern pmValueSet *metric_values(pmID); | ||||
| -extern int metric_type(pmID);
 | ||||
| +
 | ||||
| +extern int descs_hash(int, pmDesc *);
 | ||||
| +extern pmDesc *metric_desc(pmID);
 | ||||
|   | ||||
|  typedef int (*numeric_cmp_t)(double, double); | ||||
|  extern int number_equal(double, double); | ||||
							
								
								
									
										83
									
								
								SOURCES/redhat-bugzilla-1991764.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								SOURCES/redhat-bugzilla-1991764.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,83 @@ | ||||
| commit 69c7d9bf5ac24bda51f8c876dc258bfe054b7cf8 | ||||
| Author: Sunil Mohan Adapa <sunil@medhas.org> | ||||
| Date:   Tue Feb 1 09:55:23 2022 -0800 | ||||
| 
 | ||||
|     pmlogger: zeroconf: Prioritize user configuration over zeroconf | ||||
|      | ||||
|     In 2c17ba0cc16f58de511dff1e3122096d60c50bb0, zeroconf provided | ||||
|     defaults (/usr/share/pcp/zeroconf/pmlogger, which was actually | ||||
|     /etc/sysconf/pmlogger_zeroconf at the time of the change) were prioritized over | ||||
|     user configuration (/etc/sysconf/pmlogger). This lead to regression in clients | ||||
|     which edited the user configuration and expected the changes to be given | ||||
|     priority over zeroconf configuration. This was identified at least in | ||||
|     ansible-pcp[1]. | ||||
|      | ||||
|     Undo the changes in this commit so that the final priority is as follows: | ||||
|      | ||||
|     User configuration (/etc/sysconfig/pmlogger) | ||||
|       (priority over) | ||||
|     Zeroconf defaults (/usr/share/pcp/zeroconf/pmlogger) | ||||
|       (priority over) | ||||
|     Code defaults (pmlogger.c) | ||||
|      | ||||
|     Links: | ||||
|      | ||||
|     1) https://github.com/performancecopilot/pcp/pull/1462#issuecomment-1022714960 | ||||
|      | ||||
|     Tests: | ||||
|      | ||||
|     - Install pcp. Ensure pmlogger is running. Notice that there is no | ||||
|     PMLOGGER_INTERVAL set in the pmlogger daemon's environment. | ||||
|      | ||||
|     - Install pcp-zeroconf. Restart pmlogger. Notice that PMLOGGER_INTERVAL | ||||
|     environment is set in the pmlogger daemon's environment. The value is 10. | ||||
|      | ||||
|     - Edit /etc/sysconfig/pmlogger and set the value of PMLOGGER_INTERVAL to 15. | ||||
|     Restart pmlogger and notice that PMLOGGER_INTERVAL is set to 15 in pmlogger | ||||
|     daemon's environment. | ||||
|      | ||||
|     Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org> | ||||
|     Tested-by: Sunil Mohan Adapa <sunil@medhas.org> | ||||
| 
 | ||||
| diff --git a/src/pmlogger/pmlogger.defaults b/src/pmlogger/pmlogger.defaults
 | ||||
| index 1765760b5..1e96cd6ff 100644
 | ||||
| --- a/src/pmlogger/pmlogger.defaults
 | ||||
| +++ b/src/pmlogger/pmlogger.defaults
 | ||||
| @@ -1,7 +1,7 @@
 | ||||
|  # Environment variables for the primary pmlogger daemon.  See also | ||||
|  # the pmlogger control file and pmlogconf(1) for additional details. | ||||
| -# Settings defined in this file will be overridden by any settings
 | ||||
| -# in the pmlogger zeroconf file (if present).
 | ||||
| +# Settings defined in this file will override any settings in the
 | ||||
| +# pmlogger zeroconf file (if present).
 | ||||
|   | ||||
|  # Behaviour regarding listening on external-facing interfaces; | ||||
|  # unset PMLOGGER_LOCAL to allow connections from remote hosts. | ||||
| diff --git a/src/pmlogger/pmlogger.zeroconf b/src/pmlogger/pmlogger.zeroconf
 | ||||
| index 9defc6e3d..fe86dedcc 100644
 | ||||
| --- a/src/pmlogger/pmlogger.zeroconf
 | ||||
| +++ b/src/pmlogger/pmlogger.zeroconf
 | ||||
| @@ -1,6 +1,6 @@
 | ||||
|  # | ||||
| -# PMLOGGER environment variables defined in this file take precedence over
 | ||||
| -# the same variables defined in the standard pmlogger config file.
 | ||||
| +# PMLOGGER environment variables defined in the standard pmlogger config file
 | ||||
| +# take precedence over the same variables defined in this file.
 | ||||
|  # | ||||
|  # The PMLOGGER_INTERVAL setting affects the default primary pmlogger recording | ||||
|  # frequency. This only affects the *default* interval setting when specified | ||||
| diff --git a/src/pmlogger/pmlogger_check.sh b/src/pmlogger/pmlogger_check.sh
 | ||||
| index 6cc2a8ed7..64750cb5f 100755
 | ||||
| --- a/src/pmlogger/pmlogger_check.sh
 | ||||
| +++ b/src/pmlogger/pmlogger_check.sh
 | ||||
| @@ -983,8 +983,8 @@ END				{ print m }'`
 | ||||
|  	then | ||||
|  	    if [ "X$primary" = Xy ] | ||||
|  	    then | ||||
| -		# pcp-zeroconf environment variables (if present) take precedence
 | ||||
| -		envs=`grep -h ^PMLOGGER "$PMLOGGERENVS" "$PMLOGGERZEROCONFENVS" 2>/dev/null`
 | ||||
| +		# User configuration takes precedence over pcp-zeroconf
 | ||||
| +		envs=`grep -h ^PMLOGGER "$PMLOGGERZEROCONFENVS" "$PMLOGGERENVS" 2>/dev/null`
 | ||||
|  		args="-P $args" | ||||
|  		iam=" primary" | ||||
|  		# clean up port-map, just in case | ||||
							
								
								
									
										32
									
								
								SOURCES/redhat-bugzilla-2006430.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								SOURCES/redhat-bugzilla-2006430.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,32 @@ | ||||
| commit 22ee6c04115e8a26f319be3549cd50ad81b5024a | ||||
| Author: Nathan Scott <nathans@redhat.com> | ||||
| Date:   Fri Jan 21 13:08:05 2022 +1100 | ||||
| 
 | ||||
|     selinux: additional debugfs policy requirement for pmdakvm | ||||
|      | ||||
|     Related to Red Hat BZ #2006430 | ||||
| 
 | ||||
| diff --git a/qa/917.out.in b/qa/917.out.in
 | ||||
| index 9339f7436..0723565d6 100644
 | ||||
| --- a/qa/917.out.in
 | ||||
| +++ b/qa/917.out.in
 | ||||
| @@ -25,6 +25,7 @@ Checking policies.
 | ||||
|  ! allow [pcp_pmcd_t] [container_var_run_t] : [sock_file] { getattr write }; | ||||
|    allow [pcp_pmcd_t] [var_run_t] : [sock_file] { getattr write }; | ||||
|    allow [pcp_pmcd_t] [debugfs_t] : [file] { append getattr ioctl open read write }; | ||||
| +  allow [pcp_pmcd_t] [debugfs_t] : [dir] { read };
 | ||||
|  ! allow [pcp_pmcd_t] [pcp_pmie_exec_t] : [file] { execute execute_no_trans open read map }; | ||||
|    allow [pcp_pmcd_t] [pcp_var_lib_t] : [fifo_file] { getattr read open unlink }; | ||||
|    allow [pcp_pmcd_t] [proc_kcore_t] : [file] { getattr }; | ||||
| diff --git a/src/selinux/pcpupstream.te.in b/src/selinux/pcpupstream.te.in
 | ||||
| index 4a51b804e..20a6705d5 100644
 | ||||
| --- a/src/selinux/pcpupstream.te.in
 | ||||
| +++ b/src/selinux/pcpupstream.te.in
 | ||||
| @@ -144,6 +144,7 @@ allow pcp_pmcd_t var_run_t:sock_file { getattr write };
 | ||||
|   | ||||
|  #type=AVC msg=audit(XXX.6): avc:  denied  { append getattr ioctl open read write } for  pid=YYYY comm="pmdaX" name="/" dev="tracefs" ino=1 scontext=system_u:system_r:pcp_pmcd_t:s0 tcontext=system_u:object_r:debugfs_t:s0 tclass=file permissive=0 | ||||
|  allow pcp_pmcd_t debugfs_t:file { append getattr ioctl open read write }; | ||||
| +allow pcp_pmcd_t debugfs_t:dir read;
 | ||||
|   | ||||
|  #type=AVC msg=audit(XXX.7): avc:  denied  { execute execute_no_trans open read } for  pid=YYYY comm="pmdaX" name="/" dev="tracefs" ino=1 scontext=system_u:system_r:pcp_pmcd_t:s0 tcontext=system_u:object_r:pcp_pmie_exec_t:s0 tclass=file permissive=0 | ||||
|  #type=AVC msg=audit(XXX.68): avc:  denied  { map } for  pid=28290 comm="pmie" path="/usr/bin/pmie" dev="dm-0" ino=5443 scontext=system_u:system_r:pcp_pmcd_t:s0 tcontext=system_u:object_r:pcp_pmie_exec_t:s0 tclass=file permissive=0 | ||||
							
								
								
									
										126
									
								
								SOURCES/redhat-bugzilla-2017632.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										126
									
								
								SOURCES/redhat-bugzilla-2017632.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,126 @@ | ||||
| commit 343aef25472baa74c3a4669cf86b670d93d41dcb | ||||
| Author: Nathan Scott <nathans@redhat.com> | ||||
| Date:   Tue Nov 23 16:11:24 2021 +1100 | ||||
| 
 | ||||
|     pmlogconf: fix reprobing with interactive changes | ||||
|      | ||||
|     In testing an earlier persistance fix it was discovered | ||||
|     that reprobe was inadvertently overwriting user requests | ||||
|     for changes interactively. | ||||
|      | ||||
|     Related to Red Hat BZ #2017632 | ||||
| 
 | ||||
| diff --git a/qa/368.out b/qa/368.out
 | ||||
| index 829162f859..179a1142cf 100644
 | ||||
| --- a/qa/368.out
 | ||||
| +++ b/qa/368.out
 | ||||
| @@ -80,44 +80,10 @@ Differences ...
 | ||||
|  Keep changes? [y]  | ||||
|  Group: qa group one | ||||
|  Log this group? [y] ... | ||||
| -Differences ...
 | ||||
| -*** TMP.orig ...
 | ||||
| ---- TMP.conf.new ...
 | ||||
| -***************
 | ||||
| -*** 22,35 ****
 | ||||
| -  	sample.long.million
 | ||||
| -  }
 | ||||
| -  #----
 | ||||
| -! #+ 02:x::
 | ||||
| -! #----
 | ||||
| -! #+ 03:y:default:
 | ||||
| -! ## qa group three
 | ||||
| -  log advisory on default {
 | ||||
| -! 	sample.longlong.ten
 | ||||
| -  }
 | ||||
| -  #----
 | ||||
| -  #+ 04:n:default:
 | ||||
| -  ## qa group four
 | ||||
| -  #----
 | ||||
| ---- 22,36 ----
 | ||||
| -  	sample.long.million
 | ||||
| -  }
 | ||||
| -  #----
 | ||||
| -! #+ 02:y:default:
 | ||||
| -! ## qa group two
 | ||||
| -  log advisory on default {
 | ||||
| -! 	sample.ulong.ten
 | ||||
| -  }
 | ||||
| -  #----
 | ||||
| -+ #+ 03:n:default:
 | ||||
| -+ ## qa group three
 | ||||
| -+ #----
 | ||||
| -  #+ 04:n:default:
 | ||||
| -  ## qa group four
 | ||||
| -  #----
 | ||||
| -Keep changes? [y] 
 | ||||
| +No changes
 | ||||
| +
 | ||||
|  Group: qa group one | ||||
| -Log this group? [y] ......
 | ||||
| +Log this group? [y] .....
 | ||||
|  Differences ... | ||||
|  *** TMP.orig ... | ||||
|  --- TMP.conf.new ... | ||||
| @@ -132,18 +98,8 @@ Differences ...
 | ||||
|    #---- | ||||
|  --- 18,23 ---- | ||||
|  *************** | ||||
| -*** 26,31 ****
 | ||||
| ---- 25,31 ----
 | ||||
| -  ## qa group two
 | ||||
| -  log advisory on default {
 | ||||
| -  	sample.ulong.ten
 | ||||
| -+ 	sample.ulong.million
 | ||||
| -  }
 | ||||
| -  #----
 | ||||
| -  #+ 03:n:default:
 | ||||
| -***************
 | ||||
| -*** 37,42 ****
 | ||||
| ---- 37,53 ----
 | ||||
| +*** 36,41 ****
 | ||||
| +--- 35,51 ----
 | ||||
|    #+ 05:n:default: | ||||
|    ## qa group five | ||||
|    #---- | ||||
| @@ -185,15 +141,13 @@ log advisory on default {
 | ||||
|  	sample.long.million | ||||
|  } | ||||
|  #---- | ||||
| -#+ 02:y:default:
 | ||||
| -## qa group two
 | ||||
| -log advisory on default {
 | ||||
| -	sample.ulong.ten
 | ||||
| -	sample.ulong.million
 | ||||
| -}
 | ||||
| +#+ 02:x::
 | ||||
|  #---- | ||||
| -#+ 03:n:default:
 | ||||
| +#+ 03:y:default:
 | ||||
|  ## qa group three | ||||
| +log advisory on default {
 | ||||
| +	sample.longlong.ten
 | ||||
| +}
 | ||||
|  #---- | ||||
|  #+ 04:n:default: | ||||
|  ## qa group four | ||||
| diff --git a/src/pmlogconf/pmlogconf.c b/src/pmlogconf/pmlogconf.c
 | ||||
| index c03c61e797..fa1156859d 100644
 | ||||
| --- a/src/pmlogconf/pmlogconf.c
 | ||||
| +++ b/src/pmlogconf/pmlogconf.c
 | ||||
| @@ -913,13 +913,13 @@ evaluate_state(group_t *group)
 | ||||
|      if ((group->pmlogger || group->pmrep) && !group->pmlogconf) { | ||||
|  	state = group->saved_state; | ||||
|      } else if (evaluate_group(group)) {	/* probe */ | ||||
| -	if (reprobe == 0 && group->saved_state != 0)
 | ||||
| +	if (group->saved_state != 0)
 | ||||
|  	    state = group->saved_state; | ||||
|  	else | ||||
|  	    state = group->true_state; | ||||
|  	group->success = 1; | ||||
|      } else { | ||||
| -	if (reprobe == 0 && group->saved_state != 0)
 | ||||
| +	if (group->saved_state != 0)
 | ||||
|  	    state = group->saved_state; | ||||
|  	else | ||||
|  	    state = group->false_state; | ||||
							
								
								
									
										331856
									
								
								SOURCES/redhat-bugzilla-2024980.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										331856
									
								
								SOURCES/redhat-bugzilla-2024980.patch
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1433
									
								
								SOURCES/redhat-bugzilla-2024982.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1433
									
								
								SOURCES/redhat-bugzilla-2024982.patch
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										841
									
								
								SOURCES/redhat-bugzilla-2027753.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										841
									
								
								SOURCES/redhat-bugzilla-2027753.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,841 @@ | ||||
| diff -Naurp pcp-5.3.5.orig/qa/032 pcp-5.3.5/qa/032
 | ||||
| --- pcp-5.3.5.orig/qa/032	2021-11-01 13:02:26.000000000 +1100
 | ||||
| +++ pcp-5.3.5/qa/032	2022-01-21 10:55:30.286602172 +1100
 | ||||
| @@ -34,13 +34,6 @@ trap "_cleanup" 0 1 2 3 15
 | ||||
|   | ||||
|  _stop_auto_restart pmcd | ||||
|   | ||||
| -if [ -d $PCP_LOG_DIR/pmlogger ]
 | ||||
| -then
 | ||||
| -    LOGGING_DIR=$PCP_LOG_DIR/pmlogger
 | ||||
| -else
 | ||||
| -    LOGGING_DIR=$PCP_LOG_DIR
 | ||||
| -fi
 | ||||
| -
 | ||||
|  _service pcp stop | _filter_pcp_stop | ||||
|  _wait_pmcd_end | ||||
|  _writable_primary_logger | ||||
| @@ -48,7 +41,7 @@ _writable_primary_logger
 | ||||
|  _service pmcd start 2>&1 | _filter_pcp_start | ||||
|  _wait_for_pmcd | ||||
|  _service pmlogger start 2>&1 | _filter_pcp_start | ||||
| -_wait_for_pmlogger -P $LOGGING_DIR/$LOCALHOST/pmlogger.log
 | ||||
| +_wait_for_pmlogger
 | ||||
|   | ||||
|  # real QA test starts here | ||||
|  _echo "expect this to be off" | ||||
| diff -Naurp pcp-5.3.5.orig/qa/041 pcp-5.3.5/qa/041
 | ||||
| --- pcp-5.3.5.orig/qa/041	2021-09-01 08:58:41.000000000 +1000
 | ||||
| +++ pcp-5.3.5/qa/041	2022-01-21 10:55:30.286602172 +1100
 | ||||
| @@ -40,12 +40,11 @@ _expect()
 | ||||
|      echo "" | tee -a $seq.full | ||||
|  } | ||||
|   | ||||
| +status=1
 | ||||
|  _needclean=true | ||||
|  TAG=000666000magic | ||||
| -status=1
 | ||||
| -[ -z "$PCP_PMLOGGERCONTROL_PATH" ] && \
 | ||||
| -	PCP_PMLOGGERCONTROL_PATH="$PCP_SYSCONF_DIR/pmlogger/control"
 | ||||
| -
 | ||||
| +LOGGING_DIR="$PCP_ARCHIVE_DIR"
 | ||||
| +rm -f $seq.full
 | ||||
|  trap "_cleanup" 0 1 2 3 15 | ||||
|   | ||||
|  _stop_auto_restart pmcd | ||||
| @@ -68,15 +67,6 @@ _cleanup()
 | ||||
|      exit $status | ||||
|  } | ||||
|   | ||||
| -if [ -d $PCP_LOG_DIR/pmlogger ]
 | ||||
| -then
 | ||||
| -    LOGGING_DIR=$PCP_LOG_DIR/pmlogger
 | ||||
| -else
 | ||||
| -    LOGGING_DIR=$PCP_LOG_DIR
 | ||||
| -fi
 | ||||
| -
 | ||||
| -rm -f $seq.full
 | ||||
| -
 | ||||
|  # real QA test starts here | ||||
|   | ||||
|  # disable all pmloggers ... | ||||
| diff -Naurp pcp-5.3.5.orig/qa/066 pcp-5.3.5/qa/066
 | ||||
| --- pcp-5.3.5.orig/qa/066	2021-02-17 15:27:41.000000000 +1100
 | ||||
| +++ pcp-5.3.5/qa/066	2022-01-21 10:55:30.286602172 +1100
 | ||||
| @@ -42,6 +42,7 @@ signal=$PCP_BINADM_DIR/pmsignal
 | ||||
|  log=$PCP_PMCDLOG_PATH | ||||
|  _needclean=true | ||||
|  LOCALHOST=`hostname` | ||||
| +LOGGING_DIR="$PCP_ARCHIVE_DIR"
 | ||||
|   | ||||
|  _filter_log() | ||||
|  { | ||||
| @@ -80,13 +81,6 @@ interrupt()
 | ||||
|      exit | ||||
|  } | ||||
|   | ||||
| -if [ -d $PCP_LOG_DIR/pmlogger ]
 | ||||
| -then
 | ||||
| -    LOGGING_DIR=$PCP_LOG_DIR/pmlogger
 | ||||
| -else
 | ||||
| -    LOGGING_DIR=$PCP_LOG_DIR
 | ||||
| -fi
 | ||||
| -
 | ||||
|  cleanup() | ||||
|  { | ||||
|      if [ $_needclean ] | ||||
| diff -Naurp pcp-5.3.5.orig/qa/067 pcp-5.3.5/qa/067
 | ||||
| --- pcp-5.3.5.orig/qa/067	2021-02-17 15:27:41.000000000 +1100
 | ||||
| +++ pcp-5.3.5/qa/067	2022-01-21 10:55:30.287602155 +1100
 | ||||
| @@ -31,6 +31,7 @@ trap "rm -f $tmp.*; exit" 0 1 2 3 15
 | ||||
|  signal=$PCP_BINADM_DIR/pmsignal | ||||
|  log=$PCP_PMCDLOG_PATH | ||||
|  LOCALHOST=`hostname` | ||||
| +LOGGING_DIR="$PCP_ARCHIVE_DIR"
 | ||||
|   | ||||
|  _filter_log() | ||||
|  { | ||||
| @@ -69,13 +70,6 @@ interrupt()
 | ||||
|      exit | ||||
|  } | ||||
|   | ||||
| -if [ -d $PCP_LOG_DIR/pmlogger ]
 | ||||
| -then
 | ||||
| -    LOGGING_DIR=$PCP_LOG_DIR/pmlogger
 | ||||
| -else
 | ||||
| -    LOGGING_DIR=$PCP_LOG_DIR
 | ||||
| -fi
 | ||||
| -
 | ||||
|  cleanup() | ||||
|  { | ||||
|      _restore_config $PCP_PMCDCONF_PATH | ||||
| diff -Naurp pcp-5.3.5.orig/qa/068 pcp-5.3.5/qa/068
 | ||||
| --- pcp-5.3.5.orig/qa/068	2019-01-13 14:14:12.000000000 +1100
 | ||||
| +++ pcp-5.3.5/qa/068	2022-01-21 10:55:30.287602155 +1100
 | ||||
| @@ -19,22 +19,11 @@ echo "QA output created by $seq"
 | ||||
|   | ||||
|  _needclean=true | ||||
|  LOCALHOST=`hostname` | ||||
| -
 | ||||
| +LOGGING_DIR="$PCP_ARCHIVE_DIR"
 | ||||
|  trap "_cleanup" 0 1 2 3 15 | ||||
|   | ||||
| -# don't need to regenerate config.default with pmlogconf
 | ||||
| -#
 | ||||
| -export PMLOGGER_CHECK_SKIP_LOGCONF=yes
 | ||||
| -
 | ||||
|  _stop_auto_restart pmcd | ||||
|   | ||||
| -if [ -d $PCP_LOG_DIR/pmlogger ]
 | ||||
| -then
 | ||||
| -    LOGGING_DIR=$PCP_LOG_DIR/pmlogger
 | ||||
| -else
 | ||||
| -    LOGGING_DIR=$PCP_LOG_DIR
 | ||||
| -fi
 | ||||
| -
 | ||||
|  _cleanup() | ||||
|  { | ||||
|      echo >>$seq.full | ||||
| diff -Naurp pcp-5.3.5.orig/qa/069 pcp-5.3.5/qa/069
 | ||||
| --- pcp-5.3.5.orig/qa/069	2021-11-08 09:45:56.000000000 +1100
 | ||||
| +++ pcp-5.3.5/qa/069	2022-01-21 10:55:30.287602155 +1100
 | ||||
| @@ -45,6 +45,7 @@ nconfig=$tmp.pmcd.conf.new
 | ||||
|  log=$PCP_PMCDLOG_PATH | ||||
|  LOCALHOST=`hostname` | ||||
|  LOCALHOST_FULL=`pmhostname` | ||||
| +LOGGING_DIR="$PCP_ARCHIVE_DIR"
 | ||||
|  _needclean=true | ||||
|   | ||||
|  rm -f $seq.full | ||||
| @@ -104,13 +105,6 @@ skip > 0				{ skip--; next }
 | ||||
|   | ||||
|  } | ||||
|   | ||||
| -if [ -d $PCP_LOG_DIR/pmlogger ]
 | ||||
| -then
 | ||||
| -    LOGGING_DIR=$PCP_LOG_DIR/pmlogger
 | ||||
| -else
 | ||||
| -    LOGGING_DIR=$PCP_LOG_DIR
 | ||||
| -fi
 | ||||
| -
 | ||||
|  cleanup() | ||||
|  { | ||||
|      if $_needclean | ||||
| diff -Naurp pcp-5.3.5.orig/qa/1055 pcp-5.3.5/qa/1055
 | ||||
| --- pcp-5.3.5.orig/qa/1055	2021-02-17 15:27:41.000000000 +1100
 | ||||
| +++ pcp-5.3.5/qa/1055	2022-01-21 10:55:30.287602155 +1100
 | ||||
| @@ -17,6 +17,7 @@ signal=$PCP_BINADM_DIR/pmsignal
 | ||||
|  status=1 | ||||
|  done_clean=false | ||||
|  LOCALHOST=`hostname` | ||||
| +LOGGING_DIR="$PCP_ARCHIVE_DIR"
 | ||||
|   | ||||
|  _cleanup() | ||||
|  { | ||||
| @@ -66,13 +67,7 @@ $sudo cp $tmp.tmp $PCP_PMCDCONF_PATH
 | ||||
|  _writable_primary_logger | ||||
|  _service pcp restart 2>&1 | _filter_pcp_start | ||||
|  _wait_for_pmcd | ||||
| -if [ -d $PCP_LOG_DIR/pmlogger ]
 | ||||
| -then
 | ||||
| -    LOGGING_DIR=$PCP_LOG_DIR/pmlogger
 | ||||
| -else
 | ||||
| -    LOGGING_DIR=$PCP_LOG_DIR
 | ||||
| -fi
 | ||||
| -_wait_for_pmlogger -P $LOGGING_DIR/$LOCALHOST/pmlogger.log
 | ||||
| +_wait_for_pmlogger
 | ||||
|   | ||||
|  # Reset pmlogger | ||||
|  echo "log sample.dynamic.meta.metric" | ||||
| diff -Naurp pcp-5.3.5.orig/qa/172 pcp-5.3.5/qa/172
 | ||||
| --- pcp-5.3.5.orig/qa/172	2021-02-17 15:27:41.000000000 +1100
 | ||||
| +++ pcp-5.3.5/qa/172	2022-01-21 10:55:30.287602155 +1100
 | ||||
| @@ -39,6 +39,7 @@ else
 | ||||
|      esac | ||||
|  fi | ||||
|   | ||||
| +LOGGING_DIR="$PCP_ARCHIVE_DIR"
 | ||||
|  LOCALHOST=`hostname` | ||||
|  _needclean=true | ||||
|  status=0 | ||||
| @@ -48,13 +49,6 @@ _interrupt()
 | ||||
|      status=1 | ||||
|  } | ||||
|   | ||||
| -if [ -d $PCP_LOG_DIR/pmlogger ]
 | ||||
| -then
 | ||||
| -    LOGGING_DIR=$PCP_LOG_DIR/pmlogger
 | ||||
| -else
 | ||||
| -    LOGGING_DIR=$PCP_LOG_DIR
 | ||||
| -fi
 | ||||
| -
 | ||||
|  _cleanup() | ||||
|  { | ||||
|      if $_needclean | ||||
| diff -Naurp pcp-5.3.5.orig/qa/192 pcp-5.3.5/qa/192
 | ||||
| --- pcp-5.3.5.orig/qa/192	2019-01-13 14:14:12.000000000 +1100
 | ||||
| +++ pcp-5.3.5/qa/192	2022-01-21 10:55:30.287602155 +1100
 | ||||
| @@ -13,6 +13,7 @@ echo "QA output created by $seq"
 | ||||
|  . ./common.filter | ||||
|  . ./common.check | ||||
|   | ||||
| +LOGGING_DIR="$PCP_ARCHIVE_DIR"
 | ||||
|  LOCALHOST=`hostname` | ||||
|  _needclean=true | ||||
|  status=0 | ||||
| @@ -22,13 +23,6 @@ _interrupt()
 | ||||
|      status=1 | ||||
|  } | ||||
|   | ||||
| -if [ -d $PCP_LOG_DIR/pmlogger ]
 | ||||
| -then
 | ||||
| -    LOGGING_DIR=$PCP_LOG_DIR/pmlogger
 | ||||
| -else
 | ||||
| -    LOGGING_DIR=$PCP_LOG_DIR
 | ||||
| -fi
 | ||||
| -
 | ||||
|  _cleanup() | ||||
|  { | ||||
|      if $_needclean | ||||
| diff -Naurp pcp-5.3.5.orig/qa/220 pcp-5.3.5/qa/220
 | ||||
| --- pcp-5.3.5.orig/qa/220	2021-07-13 09:34:38.000000000 +1000
 | ||||
| +++ pcp-5.3.5/qa/220	2022-01-21 10:55:30.287602155 +1100
 | ||||
| @@ -18,13 +18,7 @@ which netstat >/dev/null 2>&1 || _notrun
 | ||||
|  status=0 | ||||
|  clean=false | ||||
|  LOCALHOST=`hostname` | ||||
| -
 | ||||
| -if [ -d $PCP_LOG_DIR/pmlogger ]
 | ||||
| -then
 | ||||
| -    LOGGING_DIR=$PCP_LOG_DIR/pmlogger
 | ||||
| -else
 | ||||
| -    LOGGING_DIR=$PCP_LOG_DIR
 | ||||
| -fi
 | ||||
| +LOGGING_DIR="$PCP_ARCHIVE_DIR"
 | ||||
|   | ||||
|  _cleanup() | ||||
|  { | ||||
| diff -Naurp pcp-5.3.5.orig/qa/258 pcp-5.3.5/qa/258
 | ||||
| --- pcp-5.3.5.orig/qa/258	2019-01-30 14:22:38.000000000 +1100
 | ||||
| +++ pcp-5.3.5/qa/258	2022-01-21 10:55:30.287602155 +1100
 | ||||
| @@ -19,6 +19,7 @@ echo "QA output created by $seq"
 | ||||
|  signal=$PCP_BINADM_DIR/pmsignal | ||||
|  status=1 | ||||
|  LOCALHOST=`hostname` | ||||
| +LOGGING_DIR="$PCP_ARCHIVE_DIR"
 | ||||
|  _needclean=true | ||||
|   | ||||
|  _interrupt() | ||||
| @@ -26,13 +27,6 @@ _interrupt()
 | ||||
|      status=1 | ||||
|  } | ||||
|   | ||||
| -if [ -d $PCP_LOG_DIR/pmlogger ]
 | ||||
| -then
 | ||||
| -    LOGGING_DIR=$PCP_LOG_DIR/pmlogger
 | ||||
| -else
 | ||||
| -    LOGGING_DIR=$PCP_LOG_DIR
 | ||||
| -fi
 | ||||
| -
 | ||||
|  _cleanup() | ||||
|  { | ||||
|      cd $here | ||||
| diff -Naurp pcp-5.3.5.orig/qa/279 pcp-5.3.5/qa/279
 | ||||
| --- pcp-5.3.5.orig/qa/279	2021-02-17 15:27:41.000000000 +1100
 | ||||
| +++ pcp-5.3.5/qa/279	2022-01-21 10:55:30.287602155 +1100
 | ||||
| @@ -17,6 +17,7 @@ echo "QA output created by $seq"
 | ||||
|  status=1	# failure is the default! | ||||
|  killer=`pwd`/src/killparent | ||||
|  LOCALHOST=`hostname` | ||||
| +LOGGING_DIR="$PCP_ARCHIVE_DIR"
 | ||||
|  _needclean=true | ||||
|   | ||||
|  rm -f $seq.full | ||||
| @@ -76,13 +77,6 @@ _filter_pmcd()
 | ||||
|      # end | ||||
|  } | ||||
|   | ||||
| -if [ -d $PCP_LOG_DIR/pmlogger ]
 | ||||
| -then
 | ||||
| -    LOGGING_DIR=$PCP_LOG_DIR/pmlogger
 | ||||
| -else
 | ||||
| -    LOGGING_DIR=$PCP_LOG_DIR
 | ||||
| -fi
 | ||||
| -
 | ||||
|  _save_config $PCP_PMCDCONF_PATH | ||||
|  _disable_loggers | ||||
|  pmafm $LOGGING_DIR/$LOCALHOST/Latest remove >$tmp.cmd 2>&1 \ | ||||
| diff -Naurp pcp-5.3.5.orig/qa/280 pcp-5.3.5/qa/280
 | ||||
| --- pcp-5.3.5.orig/qa/280	2021-08-16 14:12:25.000000000 +1000
 | ||||
| +++ pcp-5.3.5/qa/280	2022-01-21 10:55:30.287602155 +1100
 | ||||
| @@ -13,16 +13,6 @@ echo "QA output created by $seq"
 | ||||
|  . ./common.filter | ||||
|  . ./common.check | ||||
|   | ||||
| -if [ -d "$PCP_ARCHIVE_DIR" ]
 | ||||
| -then
 | ||||
| -    LOGGING_DIR=$PCP_ARCHIVE_DIR
 | ||||
| -elif [ -d $PCP_LOG_DIR/pmlogger ]
 | ||||
| -then
 | ||||
| -    LOGGING_DIR=$PCP_LOG_DIR/pmlogger
 | ||||
| -else
 | ||||
| -    LOGGING_DIR=$PCP_LOG_DIR
 | ||||
| -fi
 | ||||
| -
 | ||||
|  _filter() | ||||
|  { | ||||
|      [ -z "$PCP_PMLOGGERCONTROL_PATH" ] && \ | ||||
| @@ -52,6 +42,7 @@ _filter()
 | ||||
|  status=1	# failure is the default! | ||||
|  signal=$PCP_BINADM_DIR/pmsignal | ||||
|  LOCALHOST=`hostname` | ||||
| +LOGGING_DIR="$PCP_ARCHIVE_DIR"
 | ||||
|  trap "_cleanup; $sudo rm -f $tmp.* $LOGGING_DIR/$LOCALHOST/lock; exit \$status" 0 1 2 3 15 | ||||
|   | ||||
|  _stop_auto_restart pmcd | ||||
| diff -Naurp pcp-5.3.5.orig/qa/282 pcp-5.3.5/qa/282
 | ||||
| --- pcp-5.3.5.orig/qa/282	2021-02-17 15:27:41.000000000 +1100
 | ||||
| +++ pcp-5.3.5/qa/282	2022-01-21 10:55:30.287602155 +1100
 | ||||
| @@ -32,7 +32,7 @@ _needclean=true
 | ||||
|  sleepy=false | ||||
|   | ||||
|  LOCALHOST=`hostname` | ||||
| -LOGGING_DIR=$PCP_LOG_DIR/pmlogger
 | ||||
| +LOGGING_DIR="$PCP_ARCHIVE_DIR"
 | ||||
|  CHECK=`which pmlogger_check` | ||||
|  [ -z "$CHECK" -o ! -x "$CHECK" ] && \ | ||||
|      _notrun "Cannot find an executable pmlogger_check: \"$CHECK\"" | ||||
| diff -Naurp pcp-5.3.5.orig/qa/336 pcp-5.3.5/qa/336
 | ||||
| --- pcp-5.3.5.orig/qa/336	2018-10-23 07:37:45.000000000 +1100
 | ||||
| +++ pcp-5.3.5/qa/336	2022-01-21 10:55:30.288602138 +1100
 | ||||
| @@ -19,6 +19,7 @@ echo "QA output created by $seq"
 | ||||
|  signal=$PCP_BINADM_DIR/pmsignal | ||||
|  status=1	# failure is the default! | ||||
|  LOCALHOST=`hostname` | ||||
| +LOGGING_DIR="$PCP_ARCHIVE_DIR"
 | ||||
|  _needclean=true | ||||
|   | ||||
|  if [ -n "$PCP_TRACE_HOST" ] | ||||
| @@ -31,13 +32,6 @@ _interrupt()
 | ||||
|      status=1 | ||||
|  } | ||||
|   | ||||
| -if [ -d $PCP_LOG_DIR/pmlogger ]
 | ||||
| -then
 | ||||
| -    LOGGING_DIR=$PCP_LOG_DIR/pmlogger
 | ||||
| -else
 | ||||
| -    LOGGING_DIR=$PCP_LOG_DIR
 | ||||
| -fi
 | ||||
| -
 | ||||
|  _cleanup() | ||||
|  { | ||||
|      cd $here | ||||
| diff -Naurp pcp-5.3.5.orig/qa/854 pcp-5.3.5/qa/854
 | ||||
| --- pcp-5.3.5.orig/qa/854	2021-02-17 15:27:41.000000000 +1100
 | ||||
| +++ pcp-5.3.5/qa/854	2022-01-21 10:55:30.288602138 +1100
 | ||||
| @@ -17,6 +17,7 @@ signal=$PCP_BINADM_DIR/pmsignal
 | ||||
|  status=1 | ||||
|  done_clean=false | ||||
|  LOCALHOST=`hostname` | ||||
| +LOGGING_DIR="$PCP_ARCHIVE_DIR"
 | ||||
|   | ||||
|  _cleanup() | ||||
|  { | ||||
| @@ -59,20 +60,14 @@ cat <<End-of-File >$tmp.tmp
 | ||||
|  # Installed by PCP QA test $seq on `date` | ||||
|  pmcd	2	dso	pmcd_init	$PMDA_PMCD_PATH | ||||
|  sample	29	pipe	binary 		$PCP_PMDAS_DIR/sample/pmdasample -d 29  | ||||
| -simple	253	pipe	binary 		/var/lib/pcp/pmdas/simple/pmdasimple -d 253 
 | ||||
| +simple	253	pipe	binary 		$PCP_PMDAS_DIR/simple/pmdasimple -d 253 
 | ||||
|  End-of-File | ||||
|  $sudo cp $tmp.tmp $PCP_PMCDCONF_PATH | ||||
|   | ||||
|  _writable_primary_logger | ||||
|  _service pcp restart 2>&1 | _filter_pcp_start | ||||
|  _wait_for_pmcd | ||||
| -if [ -d $PCP_LOG_DIR/pmlogger ]
 | ||||
| -then
 | ||||
| -    LOGGING_DIR=$PCP_LOG_DIR/pmlogger
 | ||||
| -else
 | ||||
| -    LOGGING_DIR=$PCP_LOG_DIR
 | ||||
| -fi
 | ||||
| -_wait_for_pmlogger -P $LOGGING_DIR/$LOCALHOST/pmlogger.log
 | ||||
| +_wait_for_pmlogger
 | ||||
|   | ||||
|  # Reset pmlogger | ||||
|  echo "log sample.dynamic.meta.metric" | ||||
| diff -Naurp pcp-5.3.5.orig/qa/856 pcp-5.3.5/qa/856
 | ||||
| --- pcp-5.3.5.orig/qa/856	2019-01-13 14:14:12.000000000 +1100
 | ||||
| +++ pcp-5.3.5/qa/856	2022-01-21 10:55:30.288602138 +1100
 | ||||
| @@ -17,6 +17,7 @@ signal=$PCP_BINADM_DIR/pmsignal
 | ||||
|  status=1 | ||||
|  done_clean=false | ||||
|  LOCALHOST=`hostname` | ||||
| +LOGGING_DIR="$PCP_ARCHIVE_DIR"
 | ||||
|   | ||||
|  _cleanup() | ||||
|  { | ||||
| @@ -69,13 +70,7 @@ $sudo cp $tmp.tmp $PCP_PMCDCONF_PATH
 | ||||
|  _writable_primary_logger | ||||
|  _service pcp restart 2>&1 | _filter_pcp_start | ||||
|  _wait_for_pmcd | ||||
| -if [ -d $PCP_LOG_DIR/pmlogger ]
 | ||||
| -then
 | ||||
| -    LOGGING_DIR=$PCP_LOG_DIR/pmlogger
 | ||||
| -else
 | ||||
| -    LOGGING_DIR=$PCP_LOG_DIR
 | ||||
| -fi
 | ||||
| -_wait_for_pmlogger -P $LOGGING_DIR/$LOCALHOST/pmlogger.log
 | ||||
| +_wait_for_pmlogger
 | ||||
|   | ||||
|  # Reset pmlogger | ||||
|  echo "log sample.dynamic.meta.metric" | ||||
| diff -Naurp pcp-5.3.5.orig/qa/882 pcp-5.3.5/qa/882
 | ||||
| --- pcp-5.3.5.orig/qa/882	2019-01-13 14:14:12.000000000 +1100
 | ||||
| +++ pcp-5.3.5/qa/882	2022-01-21 10:55:30.288602138 +1100
 | ||||
| @@ -17,6 +17,7 @@ signal=$PCP_BINADM_DIR/pmsignal
 | ||||
|  status=1 | ||||
|  done_clean=false | ||||
|  LOCALHOST=`hostname` | ||||
| +LOGGING_DIR="$PCP_ARCHIVE_DIR"
 | ||||
|   | ||||
|  _cleanup() | ||||
|  { | ||||
| @@ -69,13 +70,7 @@ $sudo cp $tmp.tmp $PCP_PMCDCONF_PATH
 | ||||
|  _writable_primary_logger | ||||
|  _service pcp restart 2>&1 | _filter_pcp_start | ||||
|  _wait_for_pmcd | ||||
| -if [ -d $PCP_LOG_DIR/pmlogger ]
 | ||||
| -then
 | ||||
| -    LOGGING_DIR=$PCP_LOG_DIR/pmlogger
 | ||||
| -else
 | ||||
| -    LOGGING_DIR=$PCP_LOG_DIR
 | ||||
| -fi
 | ||||
| -_wait_for_pmlogger -P $LOGGING_DIR/$LOCALHOST/pmlogger.log
 | ||||
| +_wait_for_pmlogger
 | ||||
|   | ||||
|  # Reset pmlogger | ||||
|  echo "log sample.dynamic.meta.metric" | ||||
| diff -Naurp pcp-5.3.5.orig/qa/932 pcp-5.3.5/qa/932
 | ||||
| --- pcp-5.3.5.orig/qa/932	2021-02-17 15:27:41.000000000 +1100
 | ||||
| +++ pcp-5.3.5/qa/932	2022-01-21 10:55:30.288602138 +1100
 | ||||
| @@ -17,6 +17,7 @@ signal=$PCP_BINADM_DIR/pmsignal
 | ||||
|  status=1 | ||||
|  done_clean=false | ||||
|  LOCALHOST=`hostname` | ||||
| +LOGGING_DIR="$PCP_ARCHIVE_DIR"
 | ||||
|   | ||||
|  _cleanup() | ||||
|  { | ||||
| @@ -67,13 +68,7 @@ $sudo cp $tmp.tmp $PCP_PMCDCONF_PATH
 | ||||
|  _writable_primary_logger | ||||
|  _service pcp restart 2>&1 | _filter_pcp_start | ||||
|  _wait_for_pmcd | ||||
| -if [ -d $PCP_LOG_DIR/pmlogger ]
 | ||||
| -then
 | ||||
| -    LOGGING_DIR=$PCP_LOG_DIR/pmlogger
 | ||||
| -else
 | ||||
| -    LOGGING_DIR=$PCP_LOG_DIR
 | ||||
| -fi
 | ||||
| -_wait_for_pmlogger -P $LOGGING_DIR/$LOCALHOST/pmlogger.log
 | ||||
| +_wait_for_pmlogger
 | ||||
|   | ||||
|  # Reset pmlogger | ||||
|  echo "log sample.dynamic.meta.metric" | ||||
| diff -Naurp pcp-5.3.5.orig/qa/common.check pcp-5.3.5/qa/common.check
 | ||||
| --- pcp-5.3.5.orig/qa/common.check	2021-11-05 09:54:05.000000000 +1100
 | ||||
| +++ pcp-5.3.5/qa/common.check	2022-01-21 10:55:30.288602138 +1100
 | ||||
| @@ -262,7 +262,7 @@ _service()
 | ||||
|  			# good reason for this) | ||||
|  			# ditto for pmlogger_daily and pmlogger_daily-poll | ||||
|  			# | ||||
| -			for svc in pmlogger_check pmlogger_daily pmlogger_daily-poll
 | ||||
| +			for svc in pmlogger_check pmlogger_daily pmlogger_farm_check pmlogger_daily-poll
 | ||||
|  			do | ||||
|  			    if systemctl show --property=ActiveState $svc.timer 2>&1 \ | ||||
|  			      | grep '=active$' >/dev/null | ||||
| @@ -1940,9 +1940,11 @@ _remove_job_scheduler()
 | ||||
|      $rc_sudo rm -f $rc_cron_backup $rc_systemd_state | ||||
|   | ||||
|      if systemctl cat pmie_daily.timer >/dev/null 2>&1; then | ||||
| -	for i in pmie.service pmie_daily.timer pmie_check.timer pmlogger_daily.timer \
 | ||||
| +	for i in pmie.service pmie_daily.timer \
 | ||||
| +		pmie_check.timer pmie_farm_check.timer \
 | ||||
|  		pmlogger_daily_report.timer pmlogger_daily_report-poll.timer \ | ||||
| -		pmlogger_daily-poll.timer pmlogger_check.timer ; do
 | ||||
| +		pmlogger_daily-poll.timer pmlogger_daily.timer \
 | ||||
| +		pmlogger_check.timer pmlogger_farm_check.timer ; do
 | ||||
|  	    $rc_sudo systemctl is-active "$i" > /dev/null || continue | ||||
|  	    $rc_sudo systemctl stop $i >/dev/null | ||||
|  	    echo "$i" >> $rc_systemd_state | ||||
| diff -Naurp pcp-5.3.5.orig/src/pmie/GNUmakefile pcp-5.3.5/src/pmie/GNUmakefile
 | ||||
| --- pcp-5.3.5.orig/src/pmie/GNUmakefile	2021-11-09 10:50:58.000000000 +1100
 | ||||
| +++ pcp-5.3.5/src/pmie/GNUmakefile	2022-01-21 10:55:54.918186303 +1100
 | ||||
| @@ -1,5 +1,5 @@
 | ||||
|  # | ||||
| -# Copyright (c) 2013-2015,2020-2021 Red Hat.
 | ||||
| +# Copyright (c) 2013-2015,2020-2022 Red Hat.
 | ||||
|  # Copyright (c) 2000,2004 Silicon Graphics, Inc.  All Rights Reserved. | ||||
|  #  | ||||
|  # This program is free software; you can redistribute it and/or modify it | ||||
| @@ -84,7 +84,6 @@ pmie.service : pmie.service.in
 | ||||
|   | ||||
|  pmie_farm.service : pmie_farm.service.in | ||||
|  	$(SED) <$< >$@ \ | ||||
| -	    -e 's;@CRONTAB_PATH@;'$(CRONTAB_PATH)';' \
 | ||||
|  	    -e 's;@PCP_SYSCONFIG_DIR@;'$(PCP_SYSCONFIG_DIR)';' \ | ||||
|  	    -e 's;@PCP_BINADM_DIR@;'$(PCP_BINADM_DIR)';' \ | ||||
|  	    -e 's;@PCP_VAR_DIR@;'$(PCP_VAR_DIR)';' \ | ||||
| @@ -95,7 +94,10 @@ pmie_farm.service : pmie_farm.service.in
 | ||||
|   | ||||
|  pmie_farm_check.service : pmie_farm_check.service.in | ||||
|  	$(SED) <$< >$@ \ | ||||
| +	    -e 's;@CRONTAB_PATH@;'$(CRONTAB_PATH)';' \
 | ||||
|  	    -e 's;@PCP_BIN_DIR@;'$(PCP_BIN_DIR)';' \ | ||||
| +	    -e 's;@PCP_VAR_DIR@;'$(PCP_VAR_DIR)';' \
 | ||||
| +	    -e 's;@SD_SERVICE_TYPE@;'$(SD_SERVICE_TYPE)';' \
 | ||||
|  	# END | ||||
|   | ||||
|  pmie_check.service : pmie_check.service.in | ||||
| diff -Naurp pcp-5.3.5.orig/src/pmie/pmie_check.service.in pcp-5.3.5/src/pmie/pmie_check.service.in
 | ||||
| --- pcp-5.3.5.orig/src/pmie/pmie_check.service.in	2021-11-04 08:26:15.000000000 +1100
 | ||||
| +++ pcp-5.3.5/src/pmie/pmie_check.service.in	2022-01-21 10:55:30.288602138 +1100
 | ||||
| @@ -2,7 +2,6 @@
 | ||||
|  Description=Check PMIE instances are running | ||||
|  Documentation=man:pmie_check(1) | ||||
|  ConditionPathExists=!@CRONTAB_PATH@ | ||||
| -PartOf=pmie.service
 | ||||
|   | ||||
|  [Service] | ||||
|  Type=@SD_SERVICE_TYPE@ | ||||
| @@ -15,6 +14,3 @@ ExecStart=@PCP_BINADM_DIR@/pmie_check $P
 | ||||
|  WorkingDirectory=@PCP_VAR_DIR@ | ||||
|  Group=@PCP_GROUP@ | ||||
|  User=@PCP_USER@ | ||||
| -
 | ||||
| -[Install]
 | ||||
| -RequiredBy=pmie.service
 | ||||
| diff -Naurp pcp-5.3.5.orig/src/pmie/pmie_check.timer pcp-5.3.5/src/pmie/pmie_check.timer
 | ||||
| --- pcp-5.3.5.orig/src/pmie/pmie_check.timer	2021-02-17 15:27:41.000000000 +1100
 | ||||
| +++ pcp-5.3.5/src/pmie/pmie_check.timer	2022-01-21 10:55:30.288602138 +1100
 | ||||
| @@ -1,6 +1,5 @@
 | ||||
|  [Unit] | ||||
|  Description=Half-hourly check of PMIE instances | ||||
| -PartOf=pmie.service
 | ||||
|   | ||||
|  [Timer] | ||||
|  # if enabled, runs 1m after boot and every half hour | ||||
| diff -Naurp pcp-5.3.5.orig/src/pmie/pmie_daily.service.in pcp-5.3.5/src/pmie/pmie_daily.service.in
 | ||||
| --- pcp-5.3.5.orig/src/pmie/pmie_daily.service.in	2021-10-07 14:28:56.000000000 +1100
 | ||||
| +++ pcp-5.3.5/src/pmie/pmie_daily.service.in	2022-01-21 10:55:30.288602138 +1100
 | ||||
| @@ -6,6 +6,7 @@ ConditionPathExists=!@CRONTAB_PATH@
 | ||||
|  [Service] | ||||
|  Type=@SD_SERVICE_TYPE@ | ||||
|  Restart=no | ||||
| +TimeoutStartSec=1h
 | ||||
|  Environment="PMIE_DAILY_PARAMS=-X xz -x 3" | ||||
|  EnvironmentFile=-@PCP_SYSCONFIG_DIR@/pmie_timers | ||||
|  ExecStart=@PCP_BINADM_DIR@/pmie_daily $PMIE_DAILY_PARAMS | ||||
| diff -Naurp pcp-5.3.5.orig/src/pmie/pmie_daily.timer pcp-5.3.5/src/pmie/pmie_daily.timer
 | ||||
| --- pcp-5.3.5.orig/src/pmie/pmie_daily.timer	2019-02-20 18:03:00.000000000 +1100
 | ||||
| +++ pcp-5.3.5/src/pmie/pmie_daily.timer	2022-01-21 10:55:30.288602138 +1100
 | ||||
| @@ -2,6 +2,7 @@
 | ||||
|  Description=Daily processing of PMIE logs | ||||
|   | ||||
|  [Timer] | ||||
| +Persistent=true
 | ||||
|  OnCalendar=*-*-* 00:08:00 | ||||
|   | ||||
|  [Install] | ||||
| diff -Naurp pcp-5.3.5.orig/src/pmie/pmie_farm_check.service.in pcp-5.3.5/src/pmie/pmie_farm_check.service.in
 | ||||
| --- pcp-5.3.5.orig/src/pmie/pmie_farm_check.service.in	2021-11-09 10:50:58.000000000 +1100
 | ||||
| +++ pcp-5.3.5/src/pmie/pmie_farm_check.service.in	2022-01-21 10:55:54.918186303 +1100
 | ||||
| @@ -1,19 +1,15 @@
 | ||||
|  [Unit] | ||||
| -Description=Check and migrate non-primary pmie instances to pmie_farm
 | ||||
| -Documentation=man:pmie_check(1)
 | ||||
| -# TODO non-systemd ConditionPathExists=!/etc/cron.d/pcp-pmie
 | ||||
| +Description=Check and migrate non-primary pmie farm instances
 | ||||
| +Documentation=man:pmiectl(1)
 | ||||
| +ConditionPathExists=!@CRONTAB_PATH@
 | ||||
|   | ||||
|  [Service] | ||||
| -Type=exec
 | ||||
| +Type=@SD_SERVICE_TYPE@
 | ||||
|  Restart=no | ||||
|  TimeoutStartSec=4h | ||||
|  TimeoutStopSec=120 | ||||
|  ExecStart=@PCP_BIN_DIR@/pmiectl -m check | ||||
| -WorkingDirectory=/var/lib/pcp
 | ||||
| -
 | ||||
| +WorkingDirectory=@PCP_VAR_DIR@
 | ||||
|  # root so pmiectl can migrate pmie processes to the pmie_farm service | ||||
|  Group=root | ||||
|  User=root | ||||
| -
 | ||||
| -[Install]
 | ||||
| -RequiredBy=pmie_farm.service
 | ||||
| diff -Naurp pcp-5.3.5.orig/src/pmie/pmie_farm_check.timer pcp-5.3.5/src/pmie/pmie_farm_check.timer
 | ||||
| --- pcp-5.3.5.orig/src/pmie/pmie_farm_check.timer	2021-11-04 08:26:15.000000000 +1100
 | ||||
| +++ pcp-5.3.5/src/pmie/pmie_farm_check.timer	2022-01-21 10:49:07.985980678 +1100
 | ||||
| @@ -1,10 +1,11 @@
 | ||||
|  [Unit] | ||||
| -Description=5 minute check of pmie farm instances
 | ||||
| +Description=Half-hourly check of pmie farm instances
 | ||||
|   | ||||
|  [Timer] | ||||
| -# if enabled, runs 1m after boot and every 5 mins
 | ||||
| +# if enabled, runs 1m after boot and every half hour
 | ||||
|  OnBootSec=1min | ||||
| -OnCalendar=*:00/5
 | ||||
| +OnCalendar=*-*-* *:28:10
 | ||||
| +OnCalendar=*-*-* *:58:10
 | ||||
|   | ||||
|  [Install] | ||||
|  WantedBy=timers.target | ||||
| diff -Naurp pcp-5.3.5.orig/src/pmie/pmie_farm.service.in pcp-5.3.5/src/pmie/pmie_farm.service.in
 | ||||
| --- pcp-5.3.5.orig/src/pmie/pmie_farm.service.in	2021-11-04 08:26:15.000000000 +1100
 | ||||
| +++ pcp-5.3.5/src/pmie/pmie_farm.service.in	2022-01-21 10:49:07.986980661 +1100
 | ||||
| @@ -1,9 +1,9 @@
 | ||||
|  [Unit] | ||||
|  Description=pmie farm service | ||||
| -Documentation=man:pmie(1)
 | ||||
| -After=network-online.target pmcd.service
 | ||||
| -Before=pmie_check.timer pmie_daily.timer
 | ||||
| -BindsTo=pmie_farm_check.timer pmie_check.timer pmie_daily.timer
 | ||||
| +Documentation=man:pmie_check(1)
 | ||||
| +Before=pmie_farm_check.timer
 | ||||
| +BindsTo=pmie_farm_check.timer
 | ||||
| +PartOf=pmie.service
 | ||||
|   | ||||
|  [Service] | ||||
|  Type=@SD_SERVICE_TYPE@ | ||||
| @@ -15,13 +15,9 @@ TimeoutStopSec=120
 | ||||
|  Environment="PMIE_CHECK_PARAMS=--skip-primary" | ||||
|  EnvironmentFile=-@PCP_SYSCONFIG_DIR@/pmie_timers | ||||
|  ExecStart=@PCP_BINADM_DIR@/pmie_farm $PMIE_CHECK_PARAMS | ||||
| -
 | ||||
|  WorkingDirectory=@PCP_VAR_DIR@ | ||||
|  Group=@PCP_GROUP@ | ||||
|  User=@PCP_USER@ | ||||
|   | ||||
|  [Install] | ||||
| -WantedBy=multi-user.target
 | ||||
| -
 | ||||
| -# This dependency will be removed in PCPv6.
 | ||||
| -WantedBy=pmie.service
 | ||||
| +RequiredBy=pmie.service
 | ||||
| diff -Naurp pcp-5.3.5.orig/src/pmie/pmie_farm.sh pcp-5.3.5/src/pmie/pmie_farm.sh
 | ||||
| --- pcp-5.3.5.orig/src/pmie/pmie_farm.sh	2021-11-05 17:02:47.000000000 +1100
 | ||||
| +++ pcp-5.3.5/src/pmie/pmie_farm.sh	2022-01-21 10:49:07.986980661 +1100
 | ||||
| @@ -12,8 +12,8 @@
 | ||||
|  # or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License | ||||
|  # for more details. | ||||
|  # | ||||
| -# Administrative script to start the pmlogger_farm service.
 | ||||
| -# All arguments to pmlogger_check are passed from pmlogger_farm.service.
 | ||||
| +# Administrative script to start the pmie_farm service.
 | ||||
| +# All arguments to pmie_check are passed from pmie_farm.service.
 | ||||
|  # | ||||
|  . $PCP_DIR/etc/pcp.env | ||||
|   | ||||
| diff -Naurp pcp-5.3.5.orig/src/pmie/pmie.service.in pcp-5.3.5/src/pmie/pmie.service.in
 | ||||
| --- pcp-5.3.5.orig/src/pmie/pmie.service.in	2021-02-22 11:32:05.000000000 +1100
 | ||||
| +++ pcp-5.3.5/src/pmie/pmie.service.in	2022-01-21 10:49:07.986980661 +1100
 | ||||
| @@ -2,8 +2,8 @@
 | ||||
|  Description=Performance Metrics Inference Engine | ||||
|  Documentation=man:pmie(1) | ||||
|  After=network-online.target pmcd.service | ||||
| -Before=pmie_check.timer pmie_daily.timer
 | ||||
| -BindsTo=pmie_check.timer pmie_daily.timer
 | ||||
| +Before=pmie_farm.service pmie_check.timer pmie_daily.timer
 | ||||
| +BindsTo=pmie_farm.service pmie_check.timer pmie_daily.timer
 | ||||
|  Wants=pmcd.service | ||||
|   | ||||
|  [Service] | ||||
| diff -Naurp pcp-5.3.5.orig/src/pmlogger/GNUmakefile pcp-5.3.5/src/pmlogger/GNUmakefile
 | ||||
| --- pcp-5.3.5.orig/src/pmlogger/GNUmakefile	2021-11-09 09:08:40.000000000 +1100
 | ||||
| +++ pcp-5.3.5/src/pmlogger/GNUmakefile	2022-01-21 10:55:54.918186303 +1100
 | ||||
| @@ -1,5 +1,5 @@
 | ||||
|  # | ||||
| -# Copyright (c) 2013-2021 Red Hat.
 | ||||
| +# Copyright (c) 2013-2022 Red Hat.
 | ||||
|  # Copyright (c) 2000,2004 Silicon Graphics, Inc.  All Rights Reserved. | ||||
|  #  | ||||
|  # This program is free software; you can redistribute it and/or modify it | ||||
| @@ -99,7 +99,6 @@ pmlogger.service : pmlogger.service.in
 | ||||
|   | ||||
|  pmlogger_farm.service : pmlogger_farm.service.in | ||||
|  	$(SED) <$< >$@ \ | ||||
| -	    -e 's;@CRONTAB_PATH@;'$(CRONTAB_PATH)';' \
 | ||||
|  	    -e 's;@PCP_SYSCONFIG_DIR@;'$(PCP_SYSCONFIG_DIR)';' \ | ||||
|  	    -e 's;@PCP_BINADM_DIR@;'$(PCP_BINADM_DIR)';' \ | ||||
|  	    -e 's;@PCP_VAR_DIR@;'$(PCP_VAR_DIR)';' \ | ||||
| @@ -110,7 +109,10 @@ pmlogger_farm.service : pmlogger_farm.se
 | ||||
|   | ||||
|  pmlogger_farm_check.service : pmlogger_farm_check.service.in | ||||
|  	$(SED) <$< >$@ \ | ||||
| +	    -e 's;@CRONTAB_PATH@;'$(CRONTAB_PATH)';' \
 | ||||
|  	    -e 's;@PCP_BIN_DIR@;'$(PCP_BIN_DIR)';' \ | ||||
| +	    -e 's;@PCP_VAR_DIR@;'$(PCP_VAR_DIR)';' \
 | ||||
| +	    -e 's;@SD_SERVICE_TYPE@;'$(SD_SERVICE_TYPE)';' \
 | ||||
|  	# END | ||||
|   | ||||
|  pmlogger_daily.service : pmlogger_daily.service.in | ||||
| diff -Naurp pcp-5.3.5.orig/src/pmlogger/pmlogger_check.service.in pcp-5.3.5/src/pmlogger/pmlogger_check.service.in
 | ||||
| --- pcp-5.3.5.orig/src/pmlogger/pmlogger_check.service.in	2021-11-04 08:26:15.000000000 +1100
 | ||||
| +++ pcp-5.3.5/src/pmlogger/pmlogger_check.service.in	2022-01-21 10:55:30.289602121 +1100
 | ||||
| @@ -15,6 +15,3 @@ ExecStart=@PCP_BINADM_DIR@/pmlogger_chec
 | ||||
|  WorkingDirectory=@PCP_VAR_DIR@ | ||||
|  Group=@PCP_GROUP@ | ||||
|  User=@PCP_USER@ | ||||
| -
 | ||||
| -[Install]
 | ||||
| -RequiredBy=pmlogger.service
 | ||||
| diff -Naurp pcp-5.3.5.orig/src/pmlogger/pmlogger_daily_report.service.in pcp-5.3.5/src/pmlogger/pmlogger_daily_report.service.in
 | ||||
| --- pcp-5.3.5.orig/src/pmlogger/pmlogger_daily_report.service.in	2021-10-07 14:28:56.000000000 +1100
 | ||||
| +++ pcp-5.3.5/src/pmlogger/pmlogger_daily_report.service.in	2022-01-21 10:55:30.289602121 +1100
 | ||||
| @@ -13,6 +13,3 @@ ExecStart=@PCP_BINADM_DIR@/pmlogger_dail
 | ||||
|  WorkingDirectory=@PCP_VAR_DIR@ | ||||
|  Group=@PCP_GROUP@ | ||||
|  User=@PCP_USER@ | ||||
| -
 | ||||
| -[Install]
 | ||||
| -WantedBy=pmlogger.service
 | ||||
| diff -Naurp pcp-5.3.5.orig/src/pmlogger/pmlogger_farm_check.service.in pcp-5.3.5/src/pmlogger/pmlogger_farm_check.service.in
 | ||||
| --- pcp-5.3.5.orig/src/pmlogger/pmlogger_farm_check.service.in	2021-11-09 09:08:40.000000000 +1100
 | ||||
| +++ pcp-5.3.5/src/pmlogger/pmlogger_farm_check.service.in	2022-01-21 10:55:54.918186303 +1100
 | ||||
| @@ -1,19 +1,15 @@
 | ||||
|  [Unit] | ||||
| -Description=Check and migrate non-primary pmlogger instances to pmlogger_farm
 | ||||
| -Documentation=man:pmlogger_check(1)
 | ||||
| -# TODO non-systemd ConditionPathExists=!/etc/cron.d/pcp-pmlogger
 | ||||
| +Description=Check and migrate non-primary pmlogger farm instances
 | ||||
| +Documentation=man:pmlogctl(1)
 | ||||
| +ConditionPathExists=!@CRONTAB_PATH@
 | ||||
|   | ||||
|  [Service] | ||||
| -Type=exec
 | ||||
| +Type=@SD_SERVICE_TYPE@
 | ||||
|  Restart=no | ||||
|  TimeoutStartSec=4h | ||||
|  TimeoutStopSec=120 | ||||
|  ExecStart=@PCP_BIN_DIR@/pmlogctl -m check | ||||
| -WorkingDirectory=/var/lib/pcp
 | ||||
| -
 | ||||
| -# root so pmlogctl can migrate pmloggers to the pmlogger_farm service
 | ||||
| +WorkingDirectory=@PCP_VAR_DIR@
 | ||||
| +# root so pmlogctl can migrate pmlogger processes to the pmlogger_farm service
 | ||||
|  Group=root | ||||
|  User=root | ||||
| -
 | ||||
| -[Install]
 | ||||
| -RequiredBy=pmlogger_farm.service
 | ||||
| diff -Naurp pcp-5.3.5.orig/src/pmlogger/pmlogger_farm_check.timer pcp-5.3.5/src/pmlogger/pmlogger_farm_check.timer
 | ||||
| --- pcp-5.3.5.orig/src/pmlogger/pmlogger_farm_check.timer	2021-11-04 08:26:15.000000000 +1100
 | ||||
| +++ pcp-5.3.5/src/pmlogger/pmlogger_farm_check.timer	2022-01-21 10:49:07.986980661 +1100
 | ||||
| @@ -1,10 +1,11 @@
 | ||||
|  [Unit] | ||||
| -Description=5 minute check of pmlogger farm instances
 | ||||
| +Description=Half-hourly check of pmlogger farm instances
 | ||||
|   | ||||
|  [Timer] | ||||
| -# if enabled, runs 1m after boot and every 5 mins
 | ||||
| +# if enabled, runs 1m after boot and every half hour
 | ||||
|  OnBootSec=1min | ||||
| -OnCalendar=*:00/5
 | ||||
| +OnCalendar=*-*-* *:25:10
 | ||||
| +OnCalendar=*-*-* *:55:10
 | ||||
|   | ||||
|  [Install] | ||||
|  WantedBy=timers.target | ||||
| diff -Naurp pcp-5.3.5.orig/src/pmlogger/pmlogger_farm.service.in pcp-5.3.5/src/pmlogger/pmlogger_farm.service.in
 | ||||
| --- pcp-5.3.5.orig/src/pmlogger/pmlogger_farm.service.in	2021-11-04 08:26:15.000000000 +1100
 | ||||
| +++ pcp-5.3.5/src/pmlogger/pmlogger_farm.service.in	2022-01-21 10:55:30.289602121 +1100
 | ||||
| @@ -1,9 +1,9 @@
 | ||||
|  [Unit] | ||||
|  Description=pmlogger farm service | ||||
| -Documentation=man:pmlogger(1)
 | ||||
| -After=network-online.target pmcd.service
 | ||||
| -Before=pmlogger_check.timer pmlogger_daily.timer
 | ||||
| -BindsTo=pmlogger_farm_check.timer pmlogger_check.timer pmlogger_daily.timer
 | ||||
| +Documentation=man:pmlogger_check(1)
 | ||||
| +Before=pmlogger_farm_check.timer
 | ||||
| +BindsTo=pmlogger_farm_check.timer
 | ||||
| +PartOf=pmlogger.service
 | ||||
|   | ||||
|  [Service] | ||||
|  Type=@SD_SERVICE_TYPE@ | ||||
| @@ -12,16 +12,12 @@ Restart=always
 | ||||
|  TimeoutStartSec=4h | ||||
|  TimeoutStopSec=120 | ||||
|  # the pmlogger_farm service manages all pmloggers except the primary | ||||
| -Environment="PMLOGGER_CHECK_PARAMS=--skip-primary"
 | ||||
| +Environment="PMLOGGER_CHECK_PARAMS=--skip-primary --quick"
 | ||||
|  EnvironmentFile=-@PCP_SYSCONFIG_DIR@/pmlogger_timers | ||||
|  ExecStart=@PCP_BINADM_DIR@/pmlogger_farm $PMLOGGER_CHECK_PARAMS | ||||
| -
 | ||||
|  WorkingDirectory=@PCP_VAR_DIR@ | ||||
|  Group=@PCP_GROUP@ | ||||
|  User=@PCP_USER@ | ||||
|   | ||||
|  [Install] | ||||
| -WantedBy=multi-user.target
 | ||||
| -
 | ||||
| -# This dependency will be removed in PCPv6.
 | ||||
| -WantedBy=pmlogger.service
 | ||||
| +RequiredBy=pmlogger.service
 | ||||
| diff -Naurp pcp-5.3.5.orig/src/pmlogger/pmlogger.service.in pcp-5.3.5/src/pmlogger/pmlogger.service.in
 | ||||
| --- pcp-5.3.5.orig/src/pmlogger/pmlogger.service.in	2021-11-04 08:26:15.000000000 +1100
 | ||||
| +++ pcp-5.3.5/src/pmlogger/pmlogger.service.in	2022-01-21 10:49:07.986980661 +1100
 | ||||
| @@ -2,8 +2,8 @@
 | ||||
|  Description=Performance Metrics Archive Logger | ||||
|  Documentation=man:pmlogger(1) | ||||
|  After=network-online.target pmcd.service | ||||
| -Before=pmlogger_check.timer pmlogger_daily.timer
 | ||||
| -BindsTo=pmlogger_check.timer pmlogger_daily.timer
 | ||||
| +Before=pmlogger_farm.service pmlogger_check.timer pmlogger_daily.timer
 | ||||
| +BindsTo=pmlogger_farm.service pmlogger_check.timer pmlogger_daily.timer
 | ||||
|  Wants=pmcd.service | ||||
|   | ||||
|  [Service] | ||||
							
								
								
									
										38
									
								
								SOURCES/redhat-bugzilla-2029301.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								SOURCES/redhat-bugzilla-2029301.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,38 @@ | ||||
| commit 9d9adc9d6c8eb24a6884da81c18b927ea706a68e | ||||
| Author: Nathan Scott <nathans@redhat.com> | ||||
| Date:   Tue Dec 7 11:18:11 2021 +1100 | ||||
| 
 | ||||
|     pmdanvidia: fix mishandling of zero-byte size passed to realloc | ||||
|      | ||||
|     Picked up during QA of recent nvidia changes - some hardware lacks | ||||
|     support for per-process metrics, or the hardware (GPU) has not yet | ||||
|     been accessed by a process using its resources, which had the side | ||||
|     effect that a zero-byte size argument was passed into realloc.  In | ||||
|     turn, this passes back something that can be freed and an issue in | ||||
|     the logic meant this would happen on subsequent calls also. | ||||
|      | ||||
|     Resolves the QA failure and Red Hat BZ #2029301 | ||||
| 
 | ||||
| diff --git a/src/pmdas/nvidia/nvidia.c b/src/pmdas/nvidia/nvidia.c
 | ||||
| index f1c12f2275..dc5bb93a0d 100644
 | ||||
| --- a/src/pmdas/nvidia/nvidia.c
 | ||||
| +++ b/src/pmdas/nvidia/nvidia.c
 | ||||
| @@ -617,11 +617,16 @@ refresh(pcp_nvinfo_t *nvinfo, int need_processes)
 | ||||
|      /* update indoms, cull old entries that remain inactive */ | ||||
|      if (need_processes) { | ||||
|  	pmdaIndom	*proc_indomp = &indomtab[PROC_INDOM]; | ||||
| -	pmdaInstid	*it_set = proc_indomp->it_set;
 | ||||
| +	pmdaInstid	*it_set = NULL;
 | ||||
|  	size_t		bytes = nproc * sizeof(pmdaInstid); | ||||
|   | ||||
| -	if ((it_set = (pmdaInstid *)realloc(it_set, bytes)) == NULL)
 | ||||
| +	if (bytes > 0) {
 | ||||
| +	    it_set = (pmdaInstid *)realloc(proc_indomp->it_set, bytes);
 | ||||
| +	    if (it_set == NULL)
 | ||||
| +		free(proc_indomp->it_set);
 | ||||
| +	} else if (proc_indomp->it_set != NULL) {
 | ||||
|  	    free(proc_indomp->it_set); | ||||
| +	}
 | ||||
|   | ||||
|  	if ((proc_indomp->it_set = it_set) != NULL) { | ||||
|  	    for (i = j = 0; i < processes.hsize && j < nproc; i++) { | ||||
							
								
								
									
										50
									
								
								SOURCES/redhat-bugzilla-2030121.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								SOURCES/redhat-bugzilla-2030121.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,50 @@ | ||||
| commit df7b7bf64eb354114e6c519e3e03ffc446afa8ba | ||||
| Author: Nathan Scott <nathans@redhat.com> | ||||
| Date:   Fri Nov 26 09:17:23 2021 +1100 | ||||
| 
 | ||||
|     libpcp_pmda: add indom cache fast-paths for inst lookup beyond max | ||||
|      | ||||
|     We encountered a situation where indom cache loading consumed vast | ||||
|     CPU resources for an indom of size ~150k instances.  Profiling was | ||||
|     used to identify the insert loop that ensures the inst linked list | ||||
|     within the cache hash tables is sorted - this loop is O(N*2) as we | ||||
|     potentially walk this list from the start on every insert during a | ||||
|     cache load.  Because cache loading happens from a sorted file, the | ||||
|     worst-case scenario happened every time - each new instance insert | ||||
|     occurs beyond the current maximum.  Fortunately we maintain a last | ||||
|     entry pointer, so the new fast path uses that first and falls back | ||||
|     to the original behaviour for an out-of-order insertion. | ||||
|      | ||||
|     A second opportunity for the same optimization was identified when | ||||
|     auditing the rest of cache.c - in the find_inst() routine for inst | ||||
|     identifier lookups beyond the current maximum observed instance. | ||||
|      | ||||
|     Resolves Red Hat BZ #2024648 | ||||
| 
 | ||||
| diff --git a/src/libpcp_pmda/src/cache.c b/src/libpcp_pmda/src/cache.c
 | ||||
| index 0e66506d74..196ffc1da9 100644
 | ||||
| --- a/src/libpcp_pmda/src/cache.c
 | ||||
| +++ b/src/libpcp_pmda/src/cache.c
 | ||||
| @@ -328,6 +328,9 @@ find_inst(hdr_t *h, int inst)
 | ||||
|  { | ||||
|      entry_t	*e; | ||||
|   | ||||
| +    if ((e = h->last) != NULL && e->inst < inst)
 | ||||
| +	return NULL;
 | ||||
| +
 | ||||
|      for (e = h->first; e != NULL; e = e->next) { | ||||
|  	if (e->inst == inst && e->state != PMDA_CACHE_EMPTY) | ||||
|  	    break; | ||||
| @@ -621,7 +624,11 @@ insert_cache(hdr_t *h, const char *name, int inst, int *sts)
 | ||||
|  	    *sts = PM_ERR_INST; | ||||
|  	    return e; | ||||
|  	} | ||||
| -	for (e = h->first; e != NULL; e = e->next) {
 | ||||
| +	/* if this entry is beyond the (sorted) list end, avoid linear scan */
 | ||||
| +	if ((e = h->last) == NULL || e->inst > inst)
 | ||||
| +	    e = h->first;
 | ||||
| +	/* linear search over linked list, starting at either first or last */
 | ||||
| +	for (; e != NULL; e = e->next) {
 | ||||
|  	    if (e->inst < inst) | ||||
|  		last_e = e; | ||||
|  	    else if (e->inst > inst) | ||||
							
								
								
									
										742
									
								
								SOURCES/redhat-bugzilla-2030140.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										742
									
								
								SOURCES/redhat-bugzilla-2030140.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,742 @@ | ||||
| diff -Naurp pcp-5.3.5.orig/qa/1458 pcp-5.3.5/qa/1458
 | ||||
| --- pcp-5.3.5.orig/qa/1458	1970-01-01 10:00:00.000000000 +1000
 | ||||
| +++ pcp-5.3.5/qa/1458	2021-12-09 11:25:01.973327231 +1100
 | ||||
| @@ -0,0 +1,219 @@
 | ||||
| +#!/bin/sh
 | ||||
| +# PCP QA Test No. 1458
 | ||||
| +# Exercise access pmproxy with secure.enabled = false
 | ||||
| +#
 | ||||
| +# The main purpose of this is to test that the component works correctly
 | ||||
| +# when secure.enabled = false; we can expect the https URLs to fail.
 | ||||
| +#
 | ||||
| +# See https://github.com/performancecopilot/pcp/issues/1490
 | ||||
| +
 | ||||
| +# Copyright (c) 2019,2021 Red Hat
 | ||||
| +# Modified by Netflix, Inc.
 | ||||
| +#
 | ||||
| +
 | ||||
| +seq=`basename $0`
 | ||||
| +echo "QA output created by $seq"
 | ||||
| +
 | ||||
| +# get standard environment, filters and checks
 | ||||
| +. ./common.product
 | ||||
| +. ./common.filter
 | ||||
| +. ./common.check
 | ||||
| +
 | ||||
| +_check_series	# pmseries availability means libuv is in use
 | ||||
| +_check_valgrind
 | ||||
| +openssl help 2>/dev/null || _notrun "No openssl binary found"
 | ||||
| +
 | ||||
| +if [ -f /etc/lsb-release ]
 | ||||
| +then
 | ||||
| +    . /etc/lsb-release
 | ||||
| +    if [ "$DISTRIB_ID" = Ubuntu ]
 | ||||
| +    then
 | ||||
| +	# This test fails for Ubuntu 19.10 with a myriad of errors involving
 | ||||
| +	# the use of uninitialized values.  The code paths very but typically
 | ||||
| +	# involve libuv -> libssl ->  libcrypto
 | ||||
| +	#
 | ||||
| +	case "$DISTRIB_RELEASE"
 | ||||
| +	in
 | ||||
| +	    19.10)
 | ||||
| +		_notrun "problems with libuv, libssl, libcrypto and valgrind on Ubuntu $DISTRIB_RELEASE"
 | ||||
| +		;;
 | ||||
| +	esac
 | ||||
| +    fi
 | ||||
| +fi
 | ||||
| +
 | ||||
| +_cleanup()
 | ||||
| +{
 | ||||
| +    cd $here
 | ||||
| +    if $need_restore
 | ||||
| +    then
 | ||||
| +	need_restore=false
 | ||||
| +	_restore_config $PCP_SYSCONF_DIR/labels
 | ||||
| +	_sighup_pmcd
 | ||||
| +    fi
 | ||||
| +    $sudo rm -rf $tmp $tmp.*
 | ||||
| +}
 | ||||
| +
 | ||||
| +status=1	# failure is the default!
 | ||||
| +need_restore=false
 | ||||
| +username=`id -u -n`
 | ||||
| +$sudo rm -rf $tmp $tmp.* $seq.full
 | ||||
| +trap "_cleanup; exit \$status" 0 1 2 3 15
 | ||||
| +
 | ||||
| +_check_empty()
 | ||||
| +{
 | ||||
| +    tee -a $seq.full > $tmp.unfiltered
 | ||||
| +    if [ -s $tmp.unfiltered ]
 | ||||
| +    then
 | ||||
| +	echo "Botch: got output from curl"
 | ||||
| +    else
 | ||||
| +	echo "Good!, empty output from curl"
 | ||||
| +    fi
 | ||||
| +}
 | ||||
| +
 | ||||
| +_filter_json()
 | ||||
| +{
 | ||||
| +    tee -a $seq.full > $tmp.unfiltered
 | ||||
| +    if [ -s $tmp.unfiltered ]
 | ||||
| +    then
 | ||||
| +	pmjson < $tmp.unfiltered > $tmp.filtered
 | ||||
| +	status=$?
 | ||||
| +	    if [ $status -eq 0 ]; then
 | ||||
| +	    cat $tmp.filtered | \
 | ||||
| +	    sed \
 | ||||
| +		-e '/"machineid": .*/d' \
 | ||||
| +		-e 's,"series": .*,"series": "SERIES",g' \
 | ||||
| +		-e 's,"context": .*,"context": "CONTEXT",g' \
 | ||||
| +		-e 's,"hostname": .*,"hostname": "HOSTNAME",g' \
 | ||||
| +		-e 's,"domainname": .*,"domainname": "DOMAINNAME",g' \
 | ||||
| +	    #end
 | ||||
| +	else
 | ||||
| +	    echo "Invalid JSON: $status"
 | ||||
| +	    cat $tmp.unfiltered
 | ||||
| +	    rm -f $tmp.context
 | ||||
| +	fi
 | ||||
| +    else
 | ||||
| +	echo "Botch: no output from curl"
 | ||||
| +    fi
 | ||||
| +}
 | ||||
| +
 | ||||
| +_filter_port()
 | ||||
| +{
 | ||||
| +    sed \
 | ||||
| +        -e '/ ipv6 /d' \
 | ||||
| +	-e "s/ $port / PORT /g" \
 | ||||
| +    #end
 | ||||
| +}
 | ||||
| +
 | ||||
| +# real QA test starts here
 | ||||
| +_save_config $PCP_SYSCONF_DIR/labels
 | ||||
| +need_restore=true
 | ||||
| +
 | ||||
| +$sudo rm -rf $PCP_SYSCONF_DIR/labels/*
 | ||||
| +_sighup_pmcd
 | ||||
| +
 | ||||
| +openssl req \
 | ||||
| +	-new -newkey rsa:4096 -days 365 -nodes -x509 \
 | ||||
| +	-subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.pcpqa.com" \
 | ||||
| +	-keyout $tmp.key -out $tmp.cert >$seq.full 2>&1
 | ||||
| +# creates a self-signed (insecure) certificate, so for testing only
 | ||||
| +
 | ||||
| +echo "[pmproxy]" >> $tmp.conf
 | ||||
| +echo "pcp.enabled = true" >> $tmp.conf
 | ||||
| +echo "http.enabled = true" >> $tmp.conf
 | ||||
| +echo "redis.enabled = false" >> $tmp.conf
 | ||||
| +echo "secure.enabled = false" >> $tmp.conf
 | ||||
| +
 | ||||
| +port=`_find_free_port`
 | ||||
| +mkdir -p $tmp.pmproxy/pmproxy
 | ||||
| +export PCP_RUN_DIR=$tmp.pmproxy
 | ||||
| +export PCP_TMP_DIR=$tmp.pmproxy
 | ||||
| +
 | ||||
| +$_valgrind_clean_assert pmproxy -f -l- --timeseries \
 | ||||
| +	-c $tmp.conf -p $port -U $username \
 | ||||
| +	>$tmp.valout 2>$tmp.valerr &
 | ||||
| +pid=$!
 | ||||
| +
 | ||||
| +echo "valgrind pid: $pid" >>$seq.full
 | ||||
| +echo "pmproxy port: $port" >>$seq.full
 | ||||
| +
 | ||||
| +# valgrind takes awhile to fire up
 | ||||
| +i=0
 | ||||
| +while [ $i -lt 40 ]
 | ||||
| +do
 | ||||
| +    $PCP_BINADM_DIR/telnet-probe -c localhost $port && break
 | ||||
| +    sleep 1
 | ||||
| +    i=`expr $i + 1`
 | ||||
| +done
 | ||||
| +if $PCP_BINADM_DIR/telnet-probe -c localhost $port
 | ||||
| +then
 | ||||
| +    echo "Startup took $i secs" >>$seq.full
 | ||||
| +else
 | ||||
| +    echo "Arrgh: valgrind failed start pmproxy and get port $port ready after 30 secs"
 | ||||
| +    exit
 | ||||
| +fi
 | ||||
| +
 | ||||
| +date >>$seq.full
 | ||||
| +echo "=== checking serial http operation ===" | tee -a $seq.full
 | ||||
| +for i in 1 2 3 4; do
 | ||||
| +    curl -Gs "http://localhost:$port/pmapi/metric?name=sample.long.ten" 2>$tmp.err$i >$tmp.out$i
 | ||||
| +done
 | ||||
| +for i in 1 2 3 4; do
 | ||||
| +echo === out$i === | tee -a $seq.full
 | ||||
| +_filter_json < $tmp.out$i
 | ||||
| +done
 | ||||
| +
 | ||||
| +date >>$seq.full
 | ||||
| +echo "=== checking parallel http operation ===" | tee -a $seq.full
 | ||||
| +for i in 1 2 3 4; do
 | ||||
| +    curl -Gs "http://localhost:$port/pmapi/metric?name=sample.long.ten" 2>$tmp.err$i >$tmp.out$i & 2>/dev/null eval pid$i=$!
 | ||||
| +done
 | ||||
| +wait $pid1 $pid2 $pid3 $pid4
 | ||||
| +for i in 1 2 3 4; do
 | ||||
| +echo === out$i === | tee -a $seq.full
 | ||||
| +_filter_json < $tmp.out$i
 | ||||
| +done
 | ||||
| +
 | ||||
| +date >>$seq.full
 | ||||
| +echo "=== checking serial https/TLS operation ===" | tee -a $seq.full
 | ||||
| +for i in 1 2 3 4; do
 | ||||
| +    curl -k -Gs "https://localhost:$port/pmapi/metric?name=sample.long.ten" 2>$tmp.err$i >$tmp.out$i
 | ||||
| +done
 | ||||
| +for i in 1 2 3 4; do
 | ||||
| +echo === out$i === | tee -a $seq.full
 | ||||
| +_check_empty < $tmp.out$i
 | ||||
| +done
 | ||||
| +
 | ||||
| +date >>$seq.full
 | ||||
| +echo "=== checking parallel https/TLS operation ===" | tee -a $seq.full
 | ||||
| +for i in 1 2 3 4; do
 | ||||
| +    curl -k -Gs "https://localhost:$port/pmapi/metric?name=sample.long.ten" 2>$tmp.err$i >$tmp.out$i & 2>/dev/null eval pid$i=$!
 | ||||
| +done
 | ||||
| +wait $pid1 $pid2 $pid3 $pid4
 | ||||
| +for i in 1 2 3 4; do
 | ||||
| +echo === out$i === | tee -a $seq.full
 | ||||
| +_check_empty < $tmp.out$i
 | ||||
| +done
 | ||||
| +
 | ||||
| +echo "=== check pmproxy is running ==="
 | ||||
| +pminfo -v -h localhost@localhost:$port hinv.ncpu
 | ||||
| +if [ $? -eq 0 ]; then
 | ||||
| +    echo "pmproxy check passed"
 | ||||
| +else
 | ||||
| +    echo "pmproxy check failed"
 | ||||
| +fi
 | ||||
| +
 | ||||
| +# valgrind takes awhile to shutdown too
 | ||||
| +pmsignal $pid >/dev/null 2>&1
 | ||||
| +pmsleep 3.5
 | ||||
| +echo "=== valgrind stdout ===" | tee -a $seq.full
 | ||||
| +cat $tmp.valout | _filter_valgrind
 | ||||
| +
 | ||||
| +echo "=== valgrind stderr ===" | tee -a $seq.full
 | ||||
| +cat $tmp.valerr | _filter_pmproxy_log | _filter_port
 | ||||
| +
 | ||||
| +# final kill if it's spinning
 | ||||
| +$sudo kill -9 $pid >/dev/null 2>&1
 | ||||
| +
 | ||||
| +# success, all done
 | ||||
| +status=0
 | ||||
| +exit
 | ||||
| diff -Naurp pcp-5.3.5.orig/qa/1458.out pcp-5.3.5/qa/1458.out
 | ||||
| --- pcp-5.3.5.orig/qa/1458.out	1970-01-01 10:00:00.000000000 +1000
 | ||||
| +++ pcp-5.3.5/qa/1458.out	2021-12-09 11:25:01.973327231 +1100
 | ||||
| @@ -0,0 +1,221 @@
 | ||||
| +QA output created by 1458
 | ||||
| +=== checking serial http operation ===
 | ||||
| +=== out1 ===
 | ||||
| +{
 | ||||
| +    "context": "CONTEXT"
 | ||||
| +    "metrics": [
 | ||||
| +        {
 | ||||
| +            "name": "sample.long.ten",
 | ||||
| +            "series": "SERIES"
 | ||||
| +            "pmid": "29.0.11",
 | ||||
| +            "type": "32",
 | ||||
| +            "sem": "instant",
 | ||||
| +            "units": "none",
 | ||||
| +            "labels": {
 | ||||
| +                "agent": "sample",
 | ||||
| +                "cluster": "zero",
 | ||||
| +                "domainname": "DOMAINNAME"
 | ||||
| +                "hostname": "HOSTNAME"
 | ||||
| +                "role": "testing"
 | ||||
| +            },
 | ||||
| +            "text-oneline": "10 as a 32-bit integer",
 | ||||
| +            "text-help": "10 as a 32-bit integer"
 | ||||
| +        }
 | ||||
| +    ]
 | ||||
| +}
 | ||||
| +=== out2 ===
 | ||||
| +{
 | ||||
| +    "context": "CONTEXT"
 | ||||
| +    "metrics": [
 | ||||
| +        {
 | ||||
| +            "name": "sample.long.ten",
 | ||||
| +            "series": "SERIES"
 | ||||
| +            "pmid": "29.0.11",
 | ||||
| +            "type": "32",
 | ||||
| +            "sem": "instant",
 | ||||
| +            "units": "none",
 | ||||
| +            "labels": {
 | ||||
| +                "agent": "sample",
 | ||||
| +                "cluster": "zero",
 | ||||
| +                "domainname": "DOMAINNAME"
 | ||||
| +                "hostname": "HOSTNAME"
 | ||||
| +                "role": "testing"
 | ||||
| +            },
 | ||||
| +            "text-oneline": "10 as a 32-bit integer",
 | ||||
| +            "text-help": "10 as a 32-bit integer"
 | ||||
| +        }
 | ||||
| +    ]
 | ||||
| +}
 | ||||
| +=== out3 ===
 | ||||
| +{
 | ||||
| +    "context": "CONTEXT"
 | ||||
| +    "metrics": [
 | ||||
| +        {
 | ||||
| +            "name": "sample.long.ten",
 | ||||
| +            "series": "SERIES"
 | ||||
| +            "pmid": "29.0.11",
 | ||||
| +            "type": "32",
 | ||||
| +            "sem": "instant",
 | ||||
| +            "units": "none",
 | ||||
| +            "labels": {
 | ||||
| +                "agent": "sample",
 | ||||
| +                "cluster": "zero",
 | ||||
| +                "domainname": "DOMAINNAME"
 | ||||
| +                "hostname": "HOSTNAME"
 | ||||
| +                "role": "testing"
 | ||||
| +            },
 | ||||
| +            "text-oneline": "10 as a 32-bit integer",
 | ||||
| +            "text-help": "10 as a 32-bit integer"
 | ||||
| +        }
 | ||||
| +    ]
 | ||||
| +}
 | ||||
| +=== out4 ===
 | ||||
| +{
 | ||||
| +    "context": "CONTEXT"
 | ||||
| +    "metrics": [
 | ||||
| +        {
 | ||||
| +            "name": "sample.long.ten",
 | ||||
| +            "series": "SERIES"
 | ||||
| +            "pmid": "29.0.11",
 | ||||
| +            "type": "32",
 | ||||
| +            "sem": "instant",
 | ||||
| +            "units": "none",
 | ||||
| +            "labels": {
 | ||||
| +                "agent": "sample",
 | ||||
| +                "cluster": "zero",
 | ||||
| +                "domainname": "DOMAINNAME"
 | ||||
| +                "hostname": "HOSTNAME"
 | ||||
| +                "role": "testing"
 | ||||
| +            },
 | ||||
| +            "text-oneline": "10 as a 32-bit integer",
 | ||||
| +            "text-help": "10 as a 32-bit integer"
 | ||||
| +        }
 | ||||
| +    ]
 | ||||
| +}
 | ||||
| +=== checking parallel http operation ===
 | ||||
| +=== out1 ===
 | ||||
| +{
 | ||||
| +    "context": "CONTEXT"
 | ||||
| +    "metrics": [
 | ||||
| +        {
 | ||||
| +            "name": "sample.long.ten",
 | ||||
| +            "series": "SERIES"
 | ||||
| +            "pmid": "29.0.11",
 | ||||
| +            "type": "32",
 | ||||
| +            "sem": "instant",
 | ||||
| +            "units": "none",
 | ||||
| +            "labels": {
 | ||||
| +                "agent": "sample",
 | ||||
| +                "cluster": "zero",
 | ||||
| +                "domainname": "DOMAINNAME"
 | ||||
| +                "hostname": "HOSTNAME"
 | ||||
| +                "role": "testing"
 | ||||
| +            },
 | ||||
| +            "text-oneline": "10 as a 32-bit integer",
 | ||||
| +            "text-help": "10 as a 32-bit integer"
 | ||||
| +        }
 | ||||
| +    ]
 | ||||
| +}
 | ||||
| +=== out2 ===
 | ||||
| +{
 | ||||
| +    "context": "CONTEXT"
 | ||||
| +    "metrics": [
 | ||||
| +        {
 | ||||
| +            "name": "sample.long.ten",
 | ||||
| +            "series": "SERIES"
 | ||||
| +            "pmid": "29.0.11",
 | ||||
| +            "type": "32",
 | ||||
| +            "sem": "instant",
 | ||||
| +            "units": "none",
 | ||||
| +            "labels": {
 | ||||
| +                "agent": "sample",
 | ||||
| +                "cluster": "zero",
 | ||||
| +                "domainname": "DOMAINNAME"
 | ||||
| +                "hostname": "HOSTNAME"
 | ||||
| +                "role": "testing"
 | ||||
| +            },
 | ||||
| +            "text-oneline": "10 as a 32-bit integer",
 | ||||
| +            "text-help": "10 as a 32-bit integer"
 | ||||
| +        }
 | ||||
| +    ]
 | ||||
| +}
 | ||||
| +=== out3 ===
 | ||||
| +{
 | ||||
| +    "context": "CONTEXT"
 | ||||
| +    "metrics": [
 | ||||
| +        {
 | ||||
| +            "name": "sample.long.ten",
 | ||||
| +            "series": "SERIES"
 | ||||
| +            "pmid": "29.0.11",
 | ||||
| +            "type": "32",
 | ||||
| +            "sem": "instant",
 | ||||
| +            "units": "none",
 | ||||
| +            "labels": {
 | ||||
| +                "agent": "sample",
 | ||||
| +                "cluster": "zero",
 | ||||
| +                "domainname": "DOMAINNAME"
 | ||||
| +                "hostname": "HOSTNAME"
 | ||||
| +                "role": "testing"
 | ||||
| +            },
 | ||||
| +            "text-oneline": "10 as a 32-bit integer",
 | ||||
| +            "text-help": "10 as a 32-bit integer"
 | ||||
| +        }
 | ||||
| +    ]
 | ||||
| +}
 | ||||
| +=== out4 ===
 | ||||
| +{
 | ||||
| +    "context": "CONTEXT"
 | ||||
| +    "metrics": [
 | ||||
| +        {
 | ||||
| +            "name": "sample.long.ten",
 | ||||
| +            "series": "SERIES"
 | ||||
| +            "pmid": "29.0.11",
 | ||||
| +            "type": "32",
 | ||||
| +            "sem": "instant",
 | ||||
| +            "units": "none",
 | ||||
| +            "labels": {
 | ||||
| +                "agent": "sample",
 | ||||
| +                "cluster": "zero",
 | ||||
| +                "domainname": "DOMAINNAME"
 | ||||
| +                "hostname": "HOSTNAME"
 | ||||
| +                "role": "testing"
 | ||||
| +            },
 | ||||
| +            "text-oneline": "10 as a 32-bit integer",
 | ||||
| +            "text-help": "10 as a 32-bit integer"
 | ||||
| +        }
 | ||||
| +    ]
 | ||||
| +}
 | ||||
| +=== checking serial https/TLS operation ===
 | ||||
| +=== out1 ===
 | ||||
| +Good!, empty output from curl
 | ||||
| +=== out2 ===
 | ||||
| +Good!, empty output from curl
 | ||||
| +=== out3 ===
 | ||||
| +Good!, empty output from curl
 | ||||
| +=== out4 ===
 | ||||
| +Good!, empty output from curl
 | ||||
| +=== checking parallel https/TLS operation ===
 | ||||
| +=== out1 ===
 | ||||
| +Good!, empty output from curl
 | ||||
| +=== out2 ===
 | ||||
| +Good!, empty output from curl
 | ||||
| +=== out3 ===
 | ||||
| +Good!, empty output from curl
 | ||||
| +=== out4 ===
 | ||||
| +Good!, empty output from curl
 | ||||
| +=== check pmproxy is running ===
 | ||||
| +pmproxy check passed
 | ||||
| +=== valgrind stdout ===
 | ||||
| +=== valgrind stderr ===
 | ||||
| +Log for pmproxy on HOST started DATE
 | ||||
| +
 | ||||
| +pmproxy: PID = PID
 | ||||
| +pmproxy request port(s):
 | ||||
| +  sts fd   port  family address
 | ||||
| +  === ==== ===== ====== =======
 | ||||
| +ok FD unix UNIX_DOMAIN_SOCKET
 | ||||
| +ok FD PORT inet INADDR_ANY
 | ||||
| +[DATE] pmproxy(PID) Info: pmproxy caught SIGTERM
 | ||||
| +[DATE] pmproxy(PID) Info: pmproxy Shutdown
 | ||||
| +
 | ||||
| +Log finished DATE
 | ||||
| diff -Naurp pcp-5.3.5.orig/src/pmproxy/src/pcp.c pcp-5.3.5/src/pmproxy/src/pcp.c
 | ||||
| --- pcp-5.3.5.orig/src/pmproxy/src/pcp.c	2021-09-24 09:33:06.000000000 +1000
 | ||||
| +++ pcp-5.3.5/src/pmproxy/src/pcp.c	2021-12-09 11:22:09.829321418 +1100
 | ||||
| @@ -1,6 +1,6 @@
 | ||||
|  /* | ||||
| - * Copyright (c) 2018-2019 Red Hat.
 | ||||
| - * 
 | ||||
| + * Copyright (c) 2018-2019,2021 Red Hat.
 | ||||
| + *
 | ||||
|   * This program is free software; you can redistribute it and/or modify it | ||||
|   * under the terms of the GNU Lesser General Public License as published | ||||
|   * by the Free Software Foundation; either version 2.1 of the License, or | ||||
| @@ -19,22 +19,13 @@
 | ||||
|  #define PDU_MAXLENGTH	(MAXHOSTNAMELEN + HEADER_LENGTH + sizeof("65536")-1) | ||||
|   | ||||
|  static void | ||||
| -client_free(struct client *client)
 | ||||
| -{
 | ||||
| -    if (client->u.pcp.hostname)
 | ||||
| -	sdsfree(client->u.pcp.hostname);
 | ||||
| -    if (client->buffer)
 | ||||
| -	sdsfree(client->buffer);
 | ||||
| -}
 | ||||
| -
 | ||||
| -static void
 | ||||
|  on_server_close(uv_handle_t *handle) | ||||
|  { | ||||
|      struct client	*client = (struct client *)handle; | ||||
|   | ||||
|      if (pmDebugOptions.pdu) | ||||
|  	fprintf(stderr, "client %p pmcd connection closed\n", client); | ||||
| -    client_free(client);
 | ||||
| +    client_put(client);
 | ||||
|  } | ||||
|   | ||||
|  static void | ||||
| @@ -92,12 +83,11 @@ on_server_read(uv_stream_t *stream, ssiz
 | ||||
|  void | ||||
|  on_pcp_client_close(struct client *client) | ||||
|  { | ||||
| -    if (client->u.pcp.connected) {
 | ||||
| +    if (client->u.pcp.connected)
 | ||||
|  	uv_close((uv_handle_t *)&client->u.pcp.socket, on_server_close); | ||||
| -	memset(&client->u.pcp, 0, sizeof(client->u.pcp));
 | ||||
| -    } else {
 | ||||
| -	client_free(client);
 | ||||
| -    }
 | ||||
| +    if (client->u.pcp.hostname)
 | ||||
| +	sdsfree(client->u.pcp.hostname);
 | ||||
| +    memset(&client->u.pcp, 0, sizeof(client->u.pcp));
 | ||||
|  } | ||||
|   | ||||
|  static void | ||||
| @@ -118,6 +108,8 @@ on_pcp_client_connect(uv_connect_t *conn
 | ||||
|   | ||||
|      /* socket connection to pmcd successfully established */ | ||||
|      client->u.pcp.state = PCP_PROXY_SETUP; | ||||
| +    client->u.pcp.connected = 1;
 | ||||
| +    client_get(client);
 | ||||
|   | ||||
|      /* if we have already received PDUs, send them on now */ | ||||
|      if ((buffer = client->buffer) != NULL) { | ||||
| diff -Naurp pcp-5.3.5.orig/src/pmproxy/src/secure.c pcp-5.3.5/src/pmproxy/src/secure.c
 | ||||
| --- pcp-5.3.5.orig/src/pmproxy/src/secure.c	2021-11-01 13:02:26.000000000 +1100
 | ||||
| +++ pcp-5.3.5/src/pmproxy/src/secure.c	2021-12-09 11:22:09.831321384 +1100
 | ||||
| @@ -1,5 +1,5 @@
 | ||||
|  /* | ||||
| - * Copyright (c) 2019 Red Hat.
 | ||||
| + * Copyright (c) 2019,2021 Red Hat.
 | ||||
|   * | ||||
|   * This program is free software; you can redistribute it and/or modify it | ||||
|   * under the terms of the GNU Lesser General Public License as published | ||||
| @@ -16,7 +16,7 @@
 | ||||
|  #include <openssl/opensslv.h> | ||||
|  #include <openssl/ssl.h> | ||||
|   | ||||
| -/* called with proxy->mutex locked */
 | ||||
| +/* called with proxy->write_mutex locked */
 | ||||
|  static void | ||||
|  remove_connection_from_queue(struct client *client) | ||||
|  { | ||||
| @@ -44,9 +44,9 @@ on_secure_client_close(struct client *cl
 | ||||
|      if (pmDebugOptions.auth || pmDebugOptions.http) | ||||
|  	fprintf(stderr, "%s: client %p\n", "on_secure_client_close", client); | ||||
|   | ||||
| -    uv_mutex_lock(&client->proxy->mutex);
 | ||||
| +    uv_mutex_lock(&client->proxy->write_mutex);
 | ||||
|      remove_connection_from_queue(client); | ||||
| -    uv_mutex_unlock(&client->proxy->mutex);
 | ||||
| +    uv_mutex_unlock(&client->proxy->write_mutex);
 | ||||
|      /* client->read and client->write freed by SSL_free */ | ||||
|      SSL_free(client->secure.ssl); | ||||
|  } | ||||
| @@ -63,7 +63,7 @@ maybe_flush_ssl(struct proxy *proxy, str
 | ||||
|  	client->secure.pending.writes_count > 0) | ||||
|  	return; | ||||
|   | ||||
| -    uv_mutex_lock(&proxy->mutex);
 | ||||
| +    uv_mutex_lock(&proxy->write_mutex);
 | ||||
|      if (proxy->pending_writes == NULL) { | ||||
|      	proxy->pending_writes = client; | ||||
|  	client->secure.pending.prev = client->secure.pending.next = NULL; | ||||
| @@ -75,7 +75,7 @@ maybe_flush_ssl(struct proxy *proxy, str
 | ||||
|  	client->secure.pending.prev = c; | ||||
|      } | ||||
|      client->secure.pending.queued = 1; | ||||
| -    uv_mutex_unlock(&proxy->mutex);
 | ||||
| +    uv_mutex_unlock(&proxy->write_mutex);
 | ||||
|  } | ||||
|   | ||||
|  static void | ||||
| @@ -161,7 +161,7 @@ flush_secure_module(struct proxy *proxy)
 | ||||
|      size_t		i, used; | ||||
|      int			sts; | ||||
|   | ||||
| -    uv_mutex_lock(&proxy->mutex);
 | ||||
| +    uv_mutex_lock(&proxy->write_mutex);
 | ||||
|      head = &proxy->pending_writes; | ||||
|      while ((client = *head) != NULL) { | ||||
|  	flush_ssl_buffer(client); | ||||
| @@ -212,7 +212,7 @@ flush_secure_module(struct proxy *proxy)
 | ||||
|  		    sizeof(uv_buf_t) * client->secure.pending.writes_count); | ||||
|  	} | ||||
|      } | ||||
| -    uv_mutex_unlock(&proxy->mutex);
 | ||||
| +    uv_mutex_unlock(&proxy->write_mutex);
 | ||||
|  } | ||||
|   | ||||
|  void | ||||
| @@ -221,7 +221,8 @@ secure_client_write(struct client *clien
 | ||||
|      struct proxy	*proxy = client->proxy; | ||||
|      uv_buf_t		*dup; | ||||
|      size_t		count, bytes; | ||||
| -    int			i, sts, defer = 0, maybe = 0;
 | ||||
| +    unsigned int	i;
 | ||||
| +    int			sts, defer = 0, maybe = 0;
 | ||||
|   | ||||
|      for (i = 0; i < request->nbuffers; i++) { | ||||
|  	if (defer == 0) { | ||||
| diff -Naurp pcp-5.3.5.orig/src/pmproxy/src/server.c pcp-5.3.5/src/pmproxy/src/server.c
 | ||||
| --- pcp-5.3.5.orig/src/pmproxy/src/server.c	2021-11-01 13:02:26.000000000 +1100
 | ||||
| +++ pcp-5.3.5/src/pmproxy/src/server.c	2021-12-09 11:22:09.831321384 +1100
 | ||||
| @@ -1,5 +1,5 @@
 | ||||
|  /* | ||||
| - * Copyright (c) 2018-2019 Red Hat.
 | ||||
| + * Copyright (c) 2018-2019,2021 Red Hat.
 | ||||
|   * | ||||
|   * This program is free software; you can redistribute it and/or modify it | ||||
|   * under the terms of the GNU Lesser General Public License as published | ||||
| @@ -125,7 +125,7 @@ server_init(int portcount, const char *l
 | ||||
|  			pmGetProgname()); | ||||
|  	return NULL; | ||||
|      } | ||||
| -    uv_mutex_init(&proxy->mutex);
 | ||||
| +    uv_mutex_init(&proxy->write_mutex);
 | ||||
|   | ||||
|      count = portcount + (*localpath ? 1 : 0); | ||||
|      if (count) { | ||||
| @@ -229,7 +229,6 @@ void
 | ||||
|  client_put(struct client *client) | ||||
|  { | ||||
|      unsigned int	refcount; | ||||
| -    struct proxy	*proxy = client->proxy;
 | ||||
|   | ||||
|      uv_mutex_lock(&client->mutex); | ||||
|      assert(client->refcount); | ||||
| @@ -237,22 +236,16 @@ client_put(struct client *client)
 | ||||
|      uv_mutex_unlock(&client->mutex); | ||||
|   | ||||
|      if (refcount == 0) { | ||||
| -	/* remove client from the doubly-linked list */
 | ||||
| -	uv_mutex_lock(&proxy->mutex);
 | ||||
| -	if (client->next != NULL)
 | ||||
| -	    client->next->prev = client->prev;
 | ||||
| -	*client->prev = client->next;
 | ||||
| -	uv_mutex_unlock(&proxy->mutex);
 | ||||
| -
 | ||||
|  	if (client->protocol & STREAM_PCP) | ||||
|  	    on_pcp_client_close(client); | ||||
|  	if (client->protocol & STREAM_HTTP) | ||||
|  	    on_http_client_close(client); | ||||
|  	if (client->protocol & STREAM_REDIS) | ||||
|  	    on_redis_client_close(client); | ||||
| -	if (client->protocol & STREAM_SECURE)
 | ||||
| +	if ((client->protocol & STREAM_SECURE) && client->stream.secure)
 | ||||
|  	    on_secure_client_close(client); | ||||
| -
 | ||||
| +	if (client->buffer)
 | ||||
| +	    sdsfree(client->buffer);
 | ||||
|  	memset(client, 0, sizeof(*client)); | ||||
|  	free(client); | ||||
|      } | ||||
| @@ -284,7 +277,7 @@ on_client_write(uv_write_t *writer, int
 | ||||
|  			"on_client_write", status, client); | ||||
|   | ||||
|      if (status == 0) { | ||||
| -	if (client->protocol & STREAM_SECURE)
 | ||||
| +	if ((client->protocol & STREAM_SECURE) && client->stream.secure)
 | ||||
|  	    on_secure_client_write(client); | ||||
|  	if (client->protocol & STREAM_PCP) | ||||
|  	    on_pcp_client_write(client); | ||||
| @@ -434,10 +427,16 @@ on_client_read(uv_stream_t *stream, ssiz
 | ||||
|      if (nread > 0) { | ||||
|  	if (client->protocol == STREAM_UNKNOWN) | ||||
|  	    client->protocol |= client_protocol(*buf->base); | ||||
| -	if (client->protocol & STREAM_SECURE)
 | ||||
| +
 | ||||
| +#ifdef HAVE_OPENSSL
 | ||||
| +	if ((client->protocol & STREAM_SECURE) && (proxy->ssl != NULL))
 | ||||
|  	    on_secure_client_read(proxy, client, nread, buf); | ||||
|  	else | ||||
|  	    on_protocol_read(stream, nread, buf); | ||||
| +#else
 | ||||
| +	on_protocol_read(stream, nread, buf);
 | ||||
| +#endif
 | ||||
| +
 | ||||
|      } else if (nread < 0) { | ||||
|  	if (pmDebugOptions.af) | ||||
|  	    fprintf(stderr, "%s: read error %ld " | ||||
| @@ -494,14 +493,6 @@ on_client_connection(uv_stream_t *stream
 | ||||
|      handle->data = (void *)proxy; | ||||
|      client->proxy = proxy; | ||||
|   | ||||
| -    /* insert client into doubly-linked list at the head */
 | ||||
| -    uv_mutex_lock(&proxy->mutex);
 | ||||
| -    if ((client->next = proxy->first) != NULL)
 | ||||
| -	proxy->first->prev = &client->next;
 | ||||
| -    proxy->first = client;
 | ||||
| -    client->prev = &proxy->first;
 | ||||
| -    uv_mutex_unlock(&proxy->mutex);
 | ||||
| -
 | ||||
|      status = uv_read_start((uv_stream_t *)&client->stream.u.tcp, | ||||
|  			    on_buffer_alloc, on_client_read); | ||||
|      if (status != 0) { | ||||
| @@ -719,7 +710,7 @@ shutdown_ports(void *arg)
 | ||||
|      struct proxy	*proxy = (struct proxy *)arg; | ||||
|      struct server	*server; | ||||
|      struct stream	*stream; | ||||
| -    int			i;
 | ||||
| +    unsigned int	i;
 | ||||
|   | ||||
|      for (i = 0; i < proxy->nservers; i++) { | ||||
|  	server = &proxy->servers[i]; | ||||
| @@ -756,7 +747,8 @@ dump_request_ports(FILE *output, void *a
 | ||||
|      struct proxy	*proxy = (struct proxy *)arg; | ||||
|      struct stream	*stream; | ||||
|      uv_os_fd_t		uv_fd; | ||||
| -    int			i, fd;
 | ||||
| +    unsigned int	i;
 | ||||
| +    int			fd;
 | ||||
|   | ||||
|      fprintf(output, "%s request port(s):\n" | ||||
|  		"  sts fd   port  family address\n" | ||||
| diff -Naurp pcp-5.3.5.orig/src/pmproxy/src/server.h pcp-5.3.5/src/pmproxy/src/server.h
 | ||||
| --- pcp-5.3.5.orig/src/pmproxy/src/server.h	2021-09-24 09:33:06.000000000 +1000
 | ||||
| +++ pcp-5.3.5/src/pmproxy/src/server.h	2021-12-09 11:22:09.830321401 +1100
 | ||||
| @@ -1,5 +1,5 @@
 | ||||
|  /* | ||||
| - * Copyright (c) 2018-2019 Red Hat.
 | ||||
| + * Copyright (c) 2018-2019,2021 Red Hat.
 | ||||
|   * | ||||
|   * This program is free software; you can redistribute it and/or modify it | ||||
|   * under the terms of the GNU Lesser General Public License as published | ||||
| @@ -97,11 +97,11 @@ typedef struct http_client {
 | ||||
|   | ||||
|  typedef struct pcp_client { | ||||
|      pcp_proxy_state_t	state; | ||||
| -    sds			hostname;
 | ||||
|      unsigned int	port : 16; | ||||
|      unsigned int	certreq : 1; | ||||
|      unsigned int	connected : 1; | ||||
|      unsigned int	pad : 14; | ||||
| +    sds			hostname;
 | ||||
|      uv_connect_t	pmcd; | ||||
|      uv_tcp_t		socket; | ||||
|  } pcp_client_t; | ||||
| @@ -136,8 +136,6 @@ typedef struct client {
 | ||||
|  	pcp_client_t	pcp; | ||||
|      } u; | ||||
|      struct proxy	*proxy; | ||||
| -    struct client	*next;
 | ||||
| -    struct client	**prev;
 | ||||
|      sds			buffer; | ||||
|  } client_t; | ||||
|   | ||||
| @@ -161,7 +159,7 @@ typedef struct proxy {
 | ||||
|      struct dict		*config;	/* configuration dictionary */ | ||||
|      uv_loop_t		*events;	/* global, async event loop */ | ||||
|      uv_callback_t	write_callbacks; | ||||
| -    uv_mutex_t		mutex;		/* protects client lists and pending writes */
 | ||||
| +    uv_mutex_t		write_mutex;	/* protects pending writes */
 | ||||
|  } proxy_t; | ||||
|   | ||||
|  extern void proxylog(pmLogLevel, sds, void *); | ||||
							
								
								
									
										4095
									
								
								SPECS/pcp.spec
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4095
									
								
								SPECS/pcp.spec
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Loading…
	
		Reference in New Issue
	
	Block a user