aboutsummaryrefslogtreecommitdiff
path: root/.github/workflows/e2e.yml
blob: ca9a533c49522e62c356528093a14ec4f21843db (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
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@fac708d6674e30b6ba41289acaab6d4b75aa0753 # v2
      with:
        go-version: ^1.13
      id: go

    - name: Check out code into the Go module directory
      uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # 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: 15
      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 60 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 "Verify FIO at: $(date)"
        # Verified write
        echo 'Run randwrite with size=16M bs=4k'
        docker compose -f ./compose/e2e-mount.yml exec mount timeout -k5 60 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

    - name: Run FIO
      timeout-minutes: 15
      run: |
        echo "Starting FIO at: $(date)"
        # Concurrent r/w
        echo 'Run randrw with size=16M bs=128k'
        docker compose -f ./compose/e2e-mount.yml exec mount timeout -k5 60 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 "Verify FIO at: $(date)"
        # Verified write
        echo 'Run randwrite with size=16M bs=128k'
        docker compose -f ./compose/e2e-mount.yml exec mount timeout -k5 60 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

    - name: Run FIO
      timeout-minutes: 15
      run: |
        echo "Starting FIO at: $(date)"
        # Concurrent r/w
        echo 'Run randrw with size=16M bs=1m'
        docker compose -f ./compose/e2e-mount.yml exec mount timeout -k5 60 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
        
        echo "Verify FIO at: $(date)"
        # Verified write
        echo 'Run randwrite with size=16M bs=1m'
        docker compose -f ./compose/e2e-mount.yml exec mount timeout -k5 60 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