[dpdk-ci] [PATCH 7/9] tools: filter new patchwork IDs by date

Ali Alnubani alialnu at oss.nvidia.com
Mon Sep 6 17:58:56 CEST 2021


> -----Original Message-----
> From: ci <ci-bounces at dpdk.org> On Behalf Of Ali Alnubani
> Sent: Monday, September 6, 2021 6:46 PM
> To: ci at dpdk.org
> Cc: NBU-Contact-Thomas Monjalon <thomas at monjalon.net>;
> jerinj at marvell.com; ferruh.yigit at intel.com; david.marchand at redhat.com
> Subject: [dpdk-ci] [PATCH 7/9] tools: filter new patchwork IDs by date
> 
> API resource IDs are guaranteed to be unique, but they aren't guaranteed to
> have no gaps, for example, the following series IDs are
> nonexistent: 16157, 17181, 18235.
> Filtering by the date since the last check is necessary to later add support for
> fetching new series IDs in addition to patch IDs.
> 
> Instead of requiring a file that contains the next patch ID, a file containing the
> timestamp of the last time the API was fetched is now used.
> Each time the API is fetched for new patches, the timestamp in the file gets
> updated, and the script sleeps an amount of time specified by
> PAUSE_SECONDS before attempting to fetch new resources again.
> 
> The pause amount between each poll attempt is still 100 seconds.
> 
> Setting the env variable 'TZ' might be necessary if your timezone doesn't
> match the server's timezone.
> 
> The package jq (Command-line JSON processor) is now required by the
> script.
> 
> Example usage:
> $ export TZ="Europe/Paris"
> $ export MAINTAINERS_FILE_PATH=/path/to/dpdk/MAINTAINERS
> $ ./tools/poll-pw /path/to/last.txt \
>     '/path/to/maintainers.py --command set_pw_delegate --type patch $1'
> 
> Signed-off-by: Ali Alnubani <alialnu at nvidia.com>
> ---
>  tools/poll-pw | 56 ++++++++++++++++++++++++++++++++-------------------
>  1 file changed, 35 insertions(+), 21 deletions(-)
> 
> diff --git a/tools/poll-pw b/tools/poll-pw index bdf860a..e104dab 100755
> --- a/tools/poll-pw
> +++ b/tools/poll-pw
> @@ -1,58 +1,72 @@
> -#! /bin/sh -e
> +#! /bin/sh
> 
>  # SPDX-License-Identifier: BSD-3-Clause  # Copyright 2017 6WIND S.A.
>  # Copyright 2018 Mellanox Technologies, Ltd
> 
>  URL=http://patches.dpdk.org/api
> +PAUSE_SECONDS=100
> 
>  print_usage () {
>  	cat <<- END_OF_HELP
> -	usage: $(basename $0) <counter> <command>
> +	usage: $(basename $0) [OPTIONS] </path/to/last.txt> <command>
> 
>  	Poll patchwork and call command for each patch.
> -	The first patchwork id to be checked is read from the counter file.
> -	The command should use '$1' to be evaluated as patchwork id.
> -	When a patch is found and the command is successful,
> -	then the counter is incremented.
> +	The first date to filter with is read from the specified file.
> +	The command should use '$1' to be evaluated as the patch id.
> +	The date in the specifed file is updated after each pull.
>  	END_OF_HELP
>  }
> 
> +which jq >/dev/null 2>&1
> +if [ ! $? -eq 0 ] ; then
> +	echo "The command 'jq' doesn't exist, please install it."
> +	exit 1
> +fi
> +
>  while getopts h arg ; do
>  	case $arg in
>  		h ) print_usage ; exit 0 ;;
>  		? ) print_usage >&2 ; exit 1 ;;
>  	esac
>  done
> +
>  if [ $# -lt 2 ] ; then
> -	printf 'missing argument\n\n' >&2
> +	printf 'missing argument(s)\n\n' >&2
>  	print_usage >&2
>  	exit 1
>  fi
>  shift $(($OPTIND - 1))
> -counter=$1
> +since_file=$1
>  shift
>  cmd=$*
> 
> +if [ ! -f "$since_file" ] ; then
> +	echo "The file '$since_file' doesn't exist."
> +	exit 1
> +fi
> +
> +date -d "$(cat $since_file | tr '\n' ' ')" >/dev/null 2>&1 if [ ! $?
> +-eq 0 ] ; then
> +	echo "The file '$since_file' doesn't contain a valid date format."
> +	exit 1
> +fi
> +
> +URL="${URL}/patches/?"
> +
>  callcmd () # <patchwork id>
>  {
>  	eval $cmd
>  }
> 
> -checkid () # <patchwork id>
> -{
> -	curl -sfIo /dev/null $URL/patches/$1/ ||
> -	curl -sfIo /dev/null $URL/covers/$1/
> -}
> -
> -pwid=$(cat $counter)
> +set -e
>  while true ; do
> -	# process all recent patches
> -	while checkid $pwid ; do
> -		callcmd $pwid || break
> -		pwid=$(($pwid + 1))
> -		echo $pwid >$counter
> +	date_now=$(date '+%FT%T')
> +	since=$(date -d $(cat $since_file | tr '\n' ' ') '+%FT%T')
> +	for id in $(curl -s "${URL}since=${since}" | jq '.[].id') ; do
> +		callcmd $id || break
>  	done
> +	echo -n $date_now >$since_file
>  	# pause before next check
> -	sleep 100
> +	sleep $PAUSE_SECONDS
>  done

Thomas pointed out that the script can fetch the same ID twice in some cases, and that we can miss some IDs due to time synchronization. I'll look into that.

> --
> 2.25.1



More information about the ci mailing list