Skip to content

Commit

Permalink
discard overflow sliding window
Browse files Browse the repository at this point in the history
discard overflow sliding window
119a0330b912b4023932f3612b25cb36c8792fed
  • Loading branch information
oke11o committed Jun 25, 2024
1 parent 1f3931d commit c89292c
Show file tree
Hide file tree
Showing 21 changed files with 40 additions and 86 deletions.
3 changes: 3 additions & 0 deletions .changes/v0.5.28.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
## v0.5.28 - 2024-06-24
### Changed
* `discard_overflow` logic. Waiter wait 2 seconds sliding window before skip payload
83 changes: 14 additions & 69 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,6 @@ on:
- master
- dev

env:
YC_LT_FOLDER_ID: b1gacohsvc2kc4d76tu5
YC_LT_AUTHORIZED_KEY_JSON: ${{ secrets.YC_LOADTESTING_CI_AUTHORIZED_KEY_JSON }}
YC_LT_TEST_AGENT_FILTER: "name = 'agent-pandora-perf-medium'"
YC_LT_TEST_EXTRA_DESCRIPTION: "GitHub Actions workflow - ${{github.run_id}}"
YC_LT_SKIP_TEST_CHECK: "1"
YC_LT_DATA_BUCKET: ${{ secrets.YC_LT_DATA_BUCKET }}
YC_LT_OUTPUT_DIR: ${{github.workspace}}/performance-test/output

jobs:
run-unit-tests:
name: Unit Tests
Expand All @@ -28,7 +19,7 @@ jobs:
strategy:
fail-fast: false
matrix:
os: [ubuntu]
os: [ubuntu, macOS]
env:
OS: ${{ matrix.os }}-latest
GO: ${{ matrix.go-version }}
Expand All @@ -37,64 +28,18 @@ jobs:
- name: Checkout code
uses: actions/checkout@v3

- name: Parse to Release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
RELEASE_ID: 161082234
run: |
cat <<EOF > imbalance.txt
## Performance tests
- pandora-perf-grpc-300inst-sleep0ms: 12344
- pandora-perf-grpc-3000inst-sleep0ms: 15555
EOF
sed G imbalance.txt > imbalance.md
- name: Update release
id: update_release
uses: tubone24/[email protected]
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TAG_NAME: v0.5.27.alpha13
- name: Install Go
uses: actions/setup-go@v3
with:
body_path: ./imbalance.md
is_append_body: true
go-version: 1.21.x
cache: true

# build-and-upload:
# runs-on: ubuntu-latest
# steps:
# - uses: actions/checkout@v4
# - uses: ./.github/actions/setup-yc
# - name: Install Go
# uses: actions/setup-go@v3
# with:
# go-version: 1.21.x
# cache: true
# - name: Test
# run: go test -race -covermode atomic ./...
# - name: Build
# run: |
# export GOOS=linux
# export CGO_ENABLED=0
# go build -o pandora_perf_2
# - name: Upload
# run: |
# source performance-test/automation/_functions.sh && source performance-test/automation/_variables.sh; yc_s3_upload ./pandora_perf_2 pandora-perf ${YC_LT_DATA_BUCKET}
#
# test-pandora-perf:
# needs: [ build-and-upload ]
# runs-on: ubuntu-latest
# concurrency: { group: loadtesting }
# steps:
# - uses: actions/checkout@v4
# - uses: ./.github/actions/setup-yc
# - name: Run Test HTTP-300inst-sleep0ms
# run: |
# stripped_tag="${{ github.event.release.tag_name }}"
# STRIPPED_TAG=${stripped_tag:1}
# YC_LT_VERBOSE=2 YC_LT_TEST_EXTRA_LABELS="version=${STRIPPED_TAG}" ./performance-test/automation/test.sh ./performance-test/test-config/pandora-perf-http-uri-300inst-sleep0ms
# - name: Upload Artifacts GRPC 300inst-sleep0ms
# uses: actions/upload-artifact@v4
# with:
# name: pandora-perf-grpc-300inst-sleep0ms
# path: ${{ env.YC_LT_OUTPUT_DIR }}
- name: Test
run: go test -race -coverprofile unit.txt -covermode atomic ./...

- name: Upload coverage report to Codecov
uses: codecov/codecov-action@v3
with:
file: ./unit.txt
flags: unit,${{ matrix.os }},go-${{ matrix.go-version }}
name: unit
2 changes: 1 addition & 1 deletion .mapping.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
".changes/v0.5.25.md":"load/projects/pandora/.changes/v0.5.25.md",
".changes/v0.5.26.md":"load/projects/pandora/.changes/v0.5.26.md",
".changes/v0.5.27.md":"load/projects/pandora/.changes/v0.5.27.md",
".changes/v0.5.28.md":"load/projects/pandora/.changes/v0.5.28.md",
".changie.yaml":"load/projects/pandora/.changie.yaml",
".github/actions/setup-yc/action.yml":"load/projects/pandora/.github/actions/setup-yc/action.yml",
".github/workflows/release.yml":"load/projects/pandora/.github/workflows/release.yml",
Expand Down Expand Up @@ -293,7 +294,6 @@
"docs/index.md":"load/projects/pandora/docs/index.md",
"docs/rus/architecture.md":"load/projects/pandora/docs/rus/architecture.md",
"docs/rus/best-practices.md":"load/projects/pandora/docs/rus/best-practices.md",
"docs/rus/best_practices.md":"load/projects/pandora/docs/rus/best_practices.md",
"docs/rus/best_practices/discard-overflow.md":"load/projects/pandora/docs/rus/best_practices/discard-overflow.md",
"docs/rus/best_practices/rps-per-instance.md":"load/projects/pandora/docs/rus/best_practices/rps-per-instance.md",
"docs/rus/best_practices/shared-client.md":"load/projects/pandora/docs/rus/best_practices/shared-client.md",
Expand Down
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html),
and is generated by [Changie](https://github.com/miniscruff/changie).


## v0.5.28 - 2024-06-24
### Changed
* `discard_overflow` logic. Waiter wait 2 seconds sliding window before skip payload

## v0.5.27 - 2024-06-18
### Added
* Performance test on release
Expand Down
2 changes: 1 addition & 1 deletion cli/cli.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ import (
"go.uber.org/zap/zapcore"
)

const Version = "0.5.27"
const Version = "0.5.28"
const defaultConfigFile = "load"
const stdinConfigSelector = "-"

Expand Down
23 changes: 13 additions & 10 deletions core/coreutil/waiter.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,12 @@ import (
"github.com/yandex/pandora/core"
)

const MaxOverdueDuration = 2 * time.Second

// Waiter goroutine unsafe wrapper for efficient waiting schedule.
type Waiter struct {
sched core.Schedule
slowDownItems int
sched core.Schedule
overdueDuration time.Duration

// Lazy initialized.
timer *time.Timer
Expand All @@ -28,28 +30,29 @@ func (w *Waiter) Wait(ctx context.Context) (ok bool) {
// Check, that context is not done. Very quick: 5 ns for op, due to benchmark.
select {
case <-ctx.Done():
w.slowDownItems = 0
w.overdueDuration = 0
return false
default:
}
next, ok := w.sched.Next()
if !ok {
w.slowDownItems = 0
w.overdueDuration = 0
return false
}
// Get current time lazily.
// For once schedule, for example, we need to get it only once.
if next.Before(w.lastNow) {
w.slowDownItems++
waitFor := next.Sub(w.lastNow)
if waitFor <= 0 {
w.overdueDuration = 0 - waitFor
return true
}
w.lastNow = time.Now()
waitFor := next.Sub(w.lastNow)
waitFor = next.Sub(w.lastNow)
if waitFor <= 0 {
w.slowDownItems++
w.overdueDuration = 0 - waitFor
return true
}
w.slowDownItems = 0
w.overdueDuration = 0
// Lazy init. We don't need timer for unlimited and once schedule.
if w.timer == nil {
w.timer = time.NewTimer(waitFor)
Expand All @@ -70,7 +73,7 @@ func (w *Waiter) IsSlowDown(ctx context.Context) (ok bool) {
case <-ctx.Done():
return false
default:
return w.slowDownItems >= 2
return w.overdueDuration >= MaxOverdueDuration
}
}

Expand Down
3 changes: 2 additions & 1 deletion docs/eng/best_practices/discard-overflow.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@ The instance setting `discard_overflow` determines which behavior to follow.
instances.
2. `discard_overflow: true` - Strict adherence to the request schedule by the generator. Requests that do not fit into
the schedule are discarded. The test duration is predetermined. Requests that fail to meet the schedule are marked as
failed (with a net error `777`, and also tagged as discarded).
failed (with a net error `777`, and also tagged as discarded). Pandora considers a test to have failed schedule, if
the time of the request is 2 seconds behind. That is 2 second sliding window is used.

By default, starting from version [email protected], the setting `discard_overflow: true` is enabled.

Expand Down
3 changes: 0 additions & 3 deletions docs/rus/best_practices.md

This file was deleted.

3 changes: 2 additions & 1 deletion docs/rus/best_practices/discard-overflow.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@
и количества инстансов.
2. `discard_overflow: true` - строгое следование генератором расписания запросов. Запросы, не уложившиеся
в расписание, отбрасываются. Время выполнения теста предопределено. Запросы, которые не укладываются в расписание,
помечаются неудавшимися (ошибка net `777`, а так же добавляется tag:discarded).
помечаются неудавшимися (ошибка net `777`, а так же добавляется tag:discarded). Пандора считает, что тест не уложился
в расписание, если время запроса отстало на 2 сек. То есть используется 2 секундное скользящее окно.

По-умолчанию, начиная с версии [email protected] настройка `discard_overflow: true`

Expand Down
Empty file modified performance-test/automation/_agent_create.sh
100644 → 100755
Empty file.
Empty file modified performance-test/automation/_agent_delete.sh
100644 → 100755
Empty file.
Empty file modified performance-test/automation/_compose_test_create_args.sh
100644 → 100755
Empty file.
Empty file modified performance-test/automation/_functions.sh
100644 → 100755
Empty file.
Empty file modified performance-test/automation/_test_check.sh
100644 → 100755
Empty file.
Empty file modified performance-test/automation/_test_run.sh
100644 → 100755
Empty file.
Empty file modified performance-test/automation/_variables.sh
100644 → 100755
Empty file.
Empty file modified performance-test/automation/agent.sh
100644 → 100755
Empty file.
Empty file modified performance-test/automation/default_check_report.sh
100644 → 100755
Empty file.
Empty file modified performance-test/automation/default_check_summary.sh
100644 → 100755
Empty file.
Empty file modified performance-test/automation/s3_upload.sh
100644 → 100755
Empty file.
Empty file modified performance-test/automation/test.sh
100644 → 100755
Empty file.

0 comments on commit c89292c

Please sign in to comment.