aboutsummaryrefslogtreecommitdiff
path: root/.github/workflows
diff options
context:
space:
mode:
authorPatrick Schmidt <patrick.schmidt@innogames.com>2022-08-31 18:27:53 +0200
committerGitHub <noreply@github.com>2022-08-31 09:27:53 -0700
commita73e177ecff78aee1c59b3b57a296b10a778bc9e (patch)
tree6d733b44cb9a059c6470ebb318595fc90dd5a9d8 /.github/workflows
parent4a4ef3cc3c24d0c86defe82445448a567316cc36 (diff)
downloadseaweedfs-a73e177ecff78aee1c59b3b57a296b10a778bc9e.tar.xz
seaweedfs-a73e177ecff78aee1c59b3b57a296b10a778bc9e.zip
Add an End-to-End workflow for FUSE mount (#3562)
* Add an e2e workflow to test FUSE mount * Fix deadlocks during concurrent r/w
Diffstat (limited to '.github/workflows')
-rw-r--r--.github/workflows/codeql.yml4
-rw-r--r--.github/workflows/e2e.yml89
2 files changed, 93 insertions, 0 deletions
diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml
index 65e7c3ec6..a23a682d1 100644
--- a/.github/workflows/codeql.yml
+++ b/.github/workflows/codeql.yml
@@ -3,6 +3,10 @@ name: "Code Scanning - Action"
on:
pull_request:
+concurrency:
+ group: ${{ github.head_ref }}/codeql
+ cancel-in-progress: true
+
jobs:
CodeQL-Build:
# CodeQL runs on ubuntu-latest, windows-latest, and macos-latest
diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml
new file mode 100644
index 000000000..6bca28820
--- /dev/null
+++ b/.github/workflows/e2e.yml
@@ -0,0 +1,89 @@
+name: "End to End"
+
+on:
+ push:
+ branches: [ master ]
+ pull_request:
+ branches: [ master ]
+
+concurrency:
+ group: ${{ github.head_ref }}/e2e
+ cancel-in-progress: true
+
+permissions:
+ contents: read
+
+defaults:
+ run:
+ working-directory: docker
+
+jobs:
+ e2e:
+ name: FUSE Mount
+ runs-on: ubuntu-22.04
+ timeout-minutes: 15
+ steps:
+ - name: Set up Go 1.x
+ uses: actions/setup-go@268d8c0ca0432bb2cf416faae41297df9d262d7f # v2
+ with:
+ go-version: ^1.13
+ id: go
+
+ - name: Check out code into the Go module directory
+ uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # v2
+
+ - name: Install dependencies
+ run: |
+ sudo apt-get update
+ sudo apt-get install -y fuse
+
+ - name: Start SeaweedFS
+ timeout-minutes: 5
+ run: make build_e2e && docker compose -f ./compose/e2e-mount.yml up --wait
+
+ - name: Run FIO
+ timeout-minutes: 5
+ run: |
+ echo "Starting FIO at: $(date)"
+ # Concurrent r/w
+ echo 'Run randrw with size=16M bs=4k'
+ docker compose -f ./compose/e2e-mount.yml exec mount timeout -k5 40 fio --name=fiotest --filename=/mnt/seaweedfs/fiotest --size=16M --rw=randrw --bs=4k --direct=1 --numjobs=8 --ioengine=libaio --iodepth=32 --group_reporting --runtime=30 --time_based=1
+
+ echo 'Run randrw with size=16M bs=128k'
+ docker compose -f ./compose/e2e-mount.yml exec mount timeout -k5 40 fio --name=fiotest --filename=/mnt/seaweedfs/fiotest --size=16M --rw=randrw --bs=128k --direct=1 --numjobs=8 --ioengine=libaio --iodepth=32 --group_reporting --runtime=30 --time_based=1
+
+ echo 'Run randrw with size=16M bs=1m'
+ docker compose -f ./compose/e2e-mount.yml exec mount timeout -k5 40 fio --name=fiotest --filename=/mnt/seaweedfs/fiotest --size=16M --rw=randrw --bs=1m --direct=1 --numjobs=8 --ioengine=libaio --iodepth=32 --group_reporting --runtime=30 --time_based=1
+
+ # Verified write
+ echo 'Run randwrite with size=16M bs=4k'
+ docker compose -f ./compose/e2e-mount.yml exec mount timeout -k5 40 fio --name=fiotest --filename=/mnt/seaweedfs/fiotest --size=16M --rw=randwrite --bs=4k --direct=1 --numjobs=8 --ioengine=libaio --iodepth=32 --group_reporting --runtime=30 --time_based=1 --do_verify=0 --verify=crc32c --verify_backlog=1
+
+ echo 'Run randwrite with size=16M bs=128k'
+ docker compose -f ./compose/e2e-mount.yml exec mount timeout -k5 40 fio --name=fiotest --filename=/mnt/seaweedfs/fiotest --size=16M --rw=randwrite --bs=128k --direct=1 --numjobs=8 --ioengine=libaio --iodepth=32 --group_reporting --runtime=30 --time_based=1 --do_verify=0 --verify=crc32c --verify_backlog=1
+
+ echo 'Run randwrite with size=16M bs=1m'
+ docker compose -f ./compose/e2e-mount.yml exec mount timeout -k5 40 fio --name=fiotest --filename=/mnt/seaweedfs/fiotest --size=16M --rw=randwrite --bs=1m --direct=1 --numjobs=8 --ioengine=libaio --iodepth=32 --group_reporting --runtime=30 --time_based=1 --do_verify=0 --verify=crc32c --verify_backlog=1
+
+ - name: Save logs
+ if: always()
+ run: |
+ docker compose -f ./compose/e2e-mount.yml logs > output.log
+ echo 'Showing last 500 log lines of mount service:'
+ docker compose -f ./compose/e2e-mount.yml logs --tail 500 mount
+
+ - name: Check for data races
+ if: always()
+ continue-on-error: true # TODO: remove this comment to enable build failure on data races (after all are fixed)
+ run: grep -A50 'DATA RACE' output.log && exit 1 || exit 0
+
+ - name: Archive logs
+ if: always()
+ uses: actions/upload-artifact@v3
+ with:
+ name: output-logs
+ path: docker/output.log
+
+ - name: Cleanup
+ if: always()
+ run: docker compose -f ./compose/e2e-mount.yml down --volumes --remove-orphans --rmi all