diff --git a/CHANGELOG.md b/CHANGELOG.md index 89ce6fa..706b36a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Changed +- Remove parallel requests improvement, because it's buggy in some situations... + ## [1.3.0-alpha] - 2021-09-14 ### Changed - **Breaking Change**: [HTTPie](https://httpie.io/) is replaced by [cURL](https://curl.se), for smaller Docker images, faster execution and to be more portable diff --git a/psu b/psu index 51b25bc..08aed22 100755 --- a/psu +++ b/psu @@ -185,7 +185,7 @@ main() { # or desired state == 'shutdown' and state == 'complete' # Tasks should not have one of these states: # 'failed', 'orphaned', 'remove' - timeout "$TIMEOUT" bash -c "until (export PORTAINER_SERVICE_NAME=$PORTAINER_SERVICE_NAME && psu --action=tasks:healthy --quiet --debug=false --verbose=false) >/dev/null 2>&1; do echo -n \$(if [ \"\$VERBOSE_MODE\" == \"true\" ]; then echo -n .; fi) && sleep 1; done;" + timeout "$TIMEOUT" bash -c "until (export HTTPIE_VERIFY_SSL=$HTTPIE_VERIFY_SSL && export PORTAINER_SERVICE_NAME=$PORTAINER_SERVICE_NAME && export PORTAINER_AUTH_TOKEN=$PORTAINER_AUTH_TOKEN && export PORTAINER_URL=$PORTAINER_URL && export PORTAINER_STACK_NAME=$PORTAINER_STACK_NAME && export DEBUG_MODE=false && export VERBOSE_MODE=false && psu --action tasks:healthy --quiet) >/dev/null 2>&1; do echo -n \$(if [ \"$VERBOSE_MODE\" == \"true\" ]; then echo -n .; fi) && sleep 1; done;" status=$? if $(exit $status); then @@ -208,14 +208,18 @@ main() { echo_debug "Tasks action response -> $(echo $tasks | jq -C .)" else echo_verbose "List $scope tasks of stack '$PORTAINER_STACK_NAME'..." - # Boost performance with parallel requests - # See: https://stackoverflow.com/questions/8634109/parallel-download-using-curl-command-line-utility#comment51239188_24276040 - local tasks_action - tasks_action="$(if [ "$scope" == "healthy" ]; then echo "tasks:healthy"; else echo "tasks"; fi)" - local new_tasks - new_tasks=$(psu --action=services --quiet --debug=false --verbose=false | sed "s/^${PORTAINER_STACK_NAME}_\(.*\)$/\1/" | \ - xargs -I "{}" -P 10 -- psu --action="$tasks_action" --service={} --quiet=false --debug=false --verbose=false) - tasks="$(echo "$new_tasks" | jq -sjc 'add | unique_by(.ID)')" + local services + services="$(timeout "$TIMEOUT" bash -c "until (export HTTPIE_VERIFY_SSL=$HTTPIE_VERIFY_SSL && export PORTAINER_AUTH_TOKEN=$PORTAINER_AUTH_TOKEN && export PORTAINER_URL=$PORTAINER_URL && export PORTAINER_STACK_NAME=$PORTAINER_STACK_NAME && export DEBUG_MODE=false && export VERBOSE_MODE=false && echo \"\$(psu --action services --quiet)\"); do sleep 1; done;")" + for service in $services; do + export PORTAINER_SERVICE_NAME=${service#"${PORTAINER_STACK_NAME}_"} + local new_tasks + new_tasks=$(if [ "$scope" == "healthy" ]; then tasks_healthy; else tasks; fi) + if [ -z "$new_tasks" ] || [ "$new_tasks" == "[]" ]; then + echo_verbose "Error: $scope tasks aren't running correctly for the stack \"$PORTAINER_STACK_NAME\"" + exit 1; + fi + tasks="$(echo "${tasks}${new_tasks}" | jq -sjc 'add | unique_by(.ID)')" + done echo_debug "Tasks action response -> $(echo $tasks | jq -C .)" fi