diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index dfc67973237882a5358bbc7d183d2236befc63dd..1461f383d41d2b688241a74762f0aae8758c7a43 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -8,6 +8,10 @@ on:
 
   workflow_dispatch:
 
+concurrency: 
+  group: ${{ github.event.pull_request.head.repo.full_name}}/${{ github.event.pull_request.head.ref }}/${{ github.workflow }}
+  cancel-in-progress: true
+
 jobs:
 
   ut-linux-x86:
@@ -28,7 +32,7 @@ jobs:
           make ut
 
       - uses: actions/upload-artifact@v2
-        if: ${{ always() }}
+        if: ${{ always() && !cancelled() }}
         continue-on-error: true
         with:
           name: ut_linux_x86_reports
@@ -54,7 +58,7 @@ jobs:
           make ut
 
       - uses: actions/upload-artifact@v2
-        if: ${{ always() }}
+        if: ${{ always() && !cancelled() }}
         continue-on-error: true
         with:
           name: ut_darwin_x86_reports
@@ -80,7 +84,7 @@ jobs:
           make ut
 
       - uses: actions/upload-artifact@v2
-        if: ${{ always() }}
+        if: ${{ always() && !cancelled() }}
         continue-on-error: true
         with:
           name: ut_linux_arm_reports
@@ -152,7 +156,7 @@ jobs:
           rm -rf ./mo-tester/lib
 
       - uses: actions/upload-artifact@v2
-        if: ${{ always() }}
+        if: ${{ always() && !cancelled() }}
         continue-on-error: true
         with:
           name: linux_x86_ci_reports
@@ -224,7 +228,7 @@ jobs:
           rm -rf ./mo-tester/lib
 
       - uses: actions/upload-artifact@v2
-        if: ${{ always() }}
+        if: ${{ always() && !cancelled() }}
         continue-on-error: true
         with:
           name: ci_linux_arm_reports
@@ -294,7 +298,7 @@ jobs:
           rm -rf ./mo-tester/lib
 
       - uses: actions/upload-artifact@v2
-        if: ${{ always() }}
+        if: ${{ always() && !cancelled() }}
         continue-on-error: true
         with:
           name: ci_darwin_x86_reports
@@ -329,6 +333,4 @@ jobs:
         run: |
           cd $GITHUB_WORKSPACE
           make static-check
-          
-      
-          
+          
\ No newline at end of file
diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml
index 8219df5a4df5131814a45e8797379ca9f815bc91..ba976cb4d09b407d374c59a058c91ffee5e3f677 100644
--- a/.github/workflows/labeler.yml
+++ b/.github/workflows/labeler.yml
@@ -4,6 +4,10 @@ on:
     types: [ opened, synchronize, reopened ]
     branches: main
 
+concurrency: 
+  group: ${{ github.event.pull_request.head.repo.full_name}}/${{ github.event.pull_request.head.ref }}/${{ github.workflow }}
+  cancel-in-progress: true
+
 jobs:
   pr-size-label:
     runs-on: ubuntu-latest
diff --git a/.github/workflows/ut_pr.yml b/.github/workflows/ut_pr.yml
index 3c72cc1d33dac909fe8a4fee34b474d094aa0508..47b71532c0d96c339165767590baf82ef02b152c 100644
--- a/.github/workflows/ut_pr.yml
+++ b/.github/workflows/ut_pr.yml
@@ -1,44 +1,47 @@
 name: PR Unit Test Coverage
 on:
   pull_request_target:
-    types: [ opened, synchronize,reopened ]
+    types: [ opened, synchronize ]
+
+concurrency: 
+  group: ${{ github.event.pull_request.head.repo.full_name}}/${{ github.event.pull_request.head.ref }}/${{ github.workflow }}
+  cancel-in-progress: true
 
 jobs:
-  test-name:
+  ut_coverage:
     runs-on: ubuntu-latest
     name: PR Unit Test Coverage
 
     steps:
-      - name: Get PR Changed Paths
-        uses: guguducken/change-paths-action@v0.0.5
-        id: ut-pr
-        with:
-          github-token: ${{ secrets.TOKEN_ACTION }}
-          ignore: "/,etc/,optools/,LICENSES/,cgo/,cmd/,docs/,proto/,test/,.github/"
-
       - uses: actions/checkout@v2
-        if: ${{ steps.ut-pr.outputs.paths != '' }}
         with:
           fetch-depth: '3'
           path: ./matrixone
-          repository: ${{ steps.ut-pr.outputs.resource }}
-          ref: ${{ steps.ut-pr.outputs.branch }}
+          repository: ${{ github.event.pull_request.head.repo.full_name }}
+          ref: ${{ github.event.pull_request.head.ref }}
 
       - name: Set Variables
-        if: ${{ steps.ut-pr.outputs.paths != '' }}
         run: |
           echo "raw_ut_coverage='ut_coverage.raw'" >> $GITHUB_ENV
           echo "ut_report='UT-Report.out'" >> $GITHUB_ENV
 
       - name: Set up Go
-        if: ${{ steps.ut-pr.outputs.paths != '' }}
         uses: ./matrixone/.github/actions/setup_env
 
       - name: Build MatrixOne
-        if: ${{ steps.ut-pr.outputs.paths != '' }}
         run: |
           cd $GITHUB_WORKSPACE/matrixone && make clean && make config && make build
-
+          echo "test_scope=$(go list ./... | grep -v 'driver\|engine/aoe\|engine/memEngine\|pkg/catalog' | xargs)" >> $GITHUB_ENV
+          echo ${{ env.test_scope }}
+          
+      - name: Get Changed Paths
+        uses: guguducken/change-paths-action@v0.0.6
+        id: ut-pr 
+        with:
+          github-token: ${{ secrets.TOKEN_ACTION }}
+          ignore: "/,etc/,optools/,LICENSES/,cgo/,cmd/,docs/,proto/,test/,.github/"
+          source-path: ${{ env.test_scope }}
+      
       - name: PR Unit Test
         if: ${{ steps.ut-pr.outputs.paths != '' }}
         timeout-minutes: 60