[PR #2038] [MERGED] Add -race Flag to GitHub Action and Fix Data Race in CreateTailscaleNodesInUser #2462

Closed
opened 2025-12-29 03:21:23 +01:00 by adam · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/juanfont/headscale/pull/2038
Author: @nadongjun
Created: 7/30/2024
Status: Merged
Merged: 12/17/2024
Merged by: @kradalby

Base: mainHead: add-race-option


📝 Commits (5)

  • fd39688 Add -race flag to Makefile and integration tests; fix data race in CreateTailscaleNodesInUser
  • 126177c Fix data race in ExecuteCommand by using local buffers and mutex
  • 0c1309b Merge branch 'main' into add-race-option
  • 3c65332 Merge branch 'main' into add-race-option
  • e9860e3 lint

📊 Changes

3 files changed (+7 additions, -4 deletions)

View changed files

📝 Makefile (+2 -2)
📝 integration/dockertestutil/execute.go (+1 -2)
📝 integration/scenario.go (+4 -0)

📄 Description

  • have read the CONTRIBUTING.md file
  • raised a GitHub issue or discussed it on the projects chat beforehand
  • added unit tests
  • added integration tests
  • updated documentation if needed
  • updated CHANGELOG.md
  • This PR adds the -race flag to both unit and integration tests and addresses data race issues in the CreateTailscaleNodesInUser method.

The changes include:

  • Added -race flag: Included the -race flag in both test and test_integration targets in the Makefile to enable race condition detection for unit and integration tests. Github action is also configured to detect data races.
  • Fixed data race in CreateTailscaleNodesInUser: Updated the CreateTailscaleNodesInUser method to resolve data race issues related to concurrent access.

Log

WARNING: DATA RACE
Read at 0x00c000356030 by goroutine 106:
  github.com/juanfont/headscale/integration.(*Scenario).CreateTailscaleNodesInUser.func1()
      /Users/dongjunna/br/headscale/integration/scenario.go:336 +0x84
  golang.org/x/sync/errgroup.(*Group).Go.func1()
      /go/pkg/mod/golang.org/x/sync@v0.7.0/errgroup/errgroup.go:78 +0x7c

Previous write at 0x00c000356030 by goroutine 8:
  github.com/juanfont/headscale/integration.(*Scenario).CreateTailscaleNodesInUser()
      /Users/dongjunna/br/headscale/integration/scenario.go:330 +0x574
  github.com/juanfont/headscale/integration.(*Scenario).CreateHeadscaleEnv()
      /Users/dongjunna/br/headscale/integration/scenario.go:481 +0x218
  github.com/juanfont/headscale/integration.TestACLHostsInNetMapTable.func1()
      /Users/dongjunna/br/headscale/integration/acl_test.go:274 +0x120
  testing.tRunner()
      /usr/local/go/src/testing/testing.go:1689 +0x180
  testing.(*T).Run.gowrap1()
      /usr/local/go/src/testing/testing.go:1742 +0x40

Goroutine 106 (running) created at:
  golang.org/x/sync/errgroup.(*Group).Go()
      /go/pkg/mod/golang.org/x/sync@v0.7.0/errgroup/errgroup.go:75 +0x10c
  github.com/juanfont/headscale/integration.(*Scenario).CreateTailscaleNodesInUser()
      /Users/dongjunna/br/headscale/integration/scenario.go:335 +0x19c
  github.com/juanfont/headscale/integration.(*Scenario).CreateHeadscaleEnv()
      /Users/dongjunna/br/headscale/integration/scenario.go:481 +0x218
  github.com/juanfont/headscale/integration.TestACLHostsInNetMapTable.func1()
      /Users/dongjunna/br/headscale/integration/acl_test.go:274 +0x120
  testing.tRunner()
      /usr/local/go/src/testing/testing.go:1689 +0x180
  testing.(*T).Run.gowrap1()
      /usr/local/go/src/testing/testing.go:1742 +0x40

Goroutine 8 (running) created at:
  testing.(*T).Run()
      /usr/local/go/src/testing/testing.go:1742 +0x5e4
  github.com/juanfont/headscale/integration.TestACLHostsInNetMapTable()
      /Users/dongjunna/br/headscale/integration/acl_test.go:268 +0x1f6c
  testing.tRunner()
      /usr/local/go/src/testing/testing.go:1689 +0x180
  testing.(*T).Run.gowrap1()
      /usr/local/go/src/testing/testing.go:1742 +0x40
==================
==================
WARNING: DATA RACE
Read at 0x00c0001961d0 by goroutine 106:
  github.com/juanfont/headscale/integration/tsic.New()
      /Users/dongjunna/br/headscale/integration/tsic/tsic.go:195 +0x38c
  github.com/juanfont/headscale/integration.(*Scenario).CreateTailscaleNodesInUser.func1()
      /Users/dongjunna/br/headscale/integration/scenario.go:336 +0xa8
  golang.org/x/sync/errgroup.(*Group).Go.func1()
      /go/pkg/mod/golang.org/x/sync@v0.7.0/errgroup/errgroup.go:78 +0x7c

Previous write at 0x00c0001961d0 by goroutine 8:
  github.com/juanfont/headscale/integration.(*Scenario).CreateTailscaleNodesInUser()
      /Users/dongjunna/br/headscale/integration/scenario.go:330 +0x4ec
  github.com/juanfont/headscale/integration.(*Scenario).CreateHeadscaleEnv()
      /Users/dongjunna/br/headscale/integration/scenario.go:481 +0x218
  github.com/juanfont/headscale/integration.TestACLHostsInNetMapTable.func1()
      /Users/dongjunna/br/headscale/integration/acl_test.go:274 +0x120
  testing.tRunner()
      /usr/local/go/src/testing/testing.go:1689 +0x180
  testing.(*T).Run.gowrap1()
      /usr/local/go/src/testing/testing.go:1742 +0x40

Goroutine 106 (running) created at:
  golang.org/x/sync/errgroup.(*Group).Go()
      /go/pkg/mod/golang.org/x/sync@v0.7.0/errgroup/errgroup.go:75 +0x10c
  github.com/juanfont/headscale/integration.(*Scenario).CreateTailscaleNodesInUser()
      /Users/dongjunna/br/headscale/integration/scenario.go:335 +0x19c
  github.com/juanfont/headscale/integration.(*Scenario).CreateHeadscaleEnv()
      /Users/dongjunna/br/headscale/integration/scenario.go:481 +0x218
  github.com/juanfont/headscale/integration.TestACLHostsInNetMapTable.func1()
      /Users/dongjunna/br/headscale/integration/acl_test.go:274 +0x120
  testing.tRunner()
      /usr/local/go/src/testing/testing.go:1689 +0x180
  testing.(*T).Run.gowrap1()
      /usr/local/go/src/testing/testing.go:1742 +0x40

Goroutine 8 (running) created at:
  testing.(*T).Run()
      /usr/local/go/src/testing/testing.go:1742 +0x5e4
  github.com/juanfont/headscale/integration.TestACLHostsInNetMapTable()
      /Users/dongjunna/br/headscale/integration/acl_test.go:268 +0x1f6c
  testing.tRunner()
      /usr/local/go/src/testing/testing.go:1689 +0x180
  testing.(*T).Run.gowrap1()
      /usr/local/go/src/testing/testing.go:1742 +0x40
==================
==================
WARNING: DATA RACE
Read at 0x00c0001961d8 by goroutine 106:
  github.com/juanfont/headscale/integration/tsic.New()
      /Users/dongjunna/br/headscale/integration/tsic/tsic.go:195 +0x38c
  github.com/juanfont/headscale/integration.(*Scenario).CreateTailscaleNodesInUser.func1()
      /Users/dongjunna/br/headscale/integration/scenario.go:336 +0xa8
  golang.org/x/sync/errgroup.(*Group).Go.func1()
      /go/pkg/mod/golang.org/x/sync@v0.7.0/errgroup/errgroup.go:78 +0x7c

Previous write at 0x00c0001961d8 by goroutine 8:
  github.com/juanfont/headscale/integration.(*Scenario).CreateTailscaleNodesInUser()
      /Users/dongjunna/br/headscale/integration/scenario.go:330 +0x530
  github.com/juanfont/headscale/integration.(*Scenario).CreateHeadscaleEnv()
      /Users/dongjunna/br/headscale/integration/scenario.go:481 +0x218
  github.com/juanfont/headscale/integration.TestACLHostsInNetMapTable.func1()
      /Users/dongjunna/br/headscale/integration/acl_test.go:274 +0x120
  testing.tRunner()
      /usr/local/go/src/testing/testing.go:1689 +0x180
  testing.(*T).Run.gowrap1()
      /usr/local/go/src/testing/testing.go:1742 +0x40

Goroutine 106 (running) created at:
  golang.org/x/sync/errgroup.(*Group).Go()
      /go/pkg/mod/golang.org/x/sync@v0.7.0/errgroup/errgroup.go:75 +0x10c
  github.com/juanfont/headscale/integration.(*Scenario).CreateTailscaleNodesInUser()
      /Users/dongjunna/br/headscale/integration/scenario.go:335 +0x19c
  github.com/juanfont/headscale/integration.(*Scenario).CreateHeadscaleEnv()
      /Users/dongjunna/br/headscale/integration/scenario.go:481 +0x218
  github.com/juanfont/headscale/integration.TestACLHostsInNetMapTable.func1()
      /Users/dongjunna/br/headscale/integration/acl_test.go:274 +0x120
  testing.tRunner()
      /usr/local/go/src/testing/testing.go:1689 +0x180
  testing.(*T).Run.gowrap1()
      /usr/local/go/src/testing/testing.go:1742 +0x40

Goroutine 8 (running) created at:
  testing.(*T).Run()
      /usr/local/go/src/testing/testing.go:1742 +0x5e4
  github.com/juanfont/headscale/integration.TestACLHostsInNetMapTable()
      /Users/dongjunna/br/headscale/integration/acl_test.go:268 +0x1f6c
  testing.tRunner()
      /usr/local/go/src/testing/testing.go:1689 +0x180
  testing.(*T).Run.gowrap1()
      /usr/local/go/src/testing/testing.go:1742 +0x40

Summary by CodeRabbit

  • New Features

    • Enhanced testing process by adding race detection for both unit and integration tests.
  • Bug Fixes

    • Improved concurrency control in command execution and Tailscale node creation to prevent race conditions, enhancing reliability.
  • Style

    • Cleaned up whitespace for better code formatting.

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/juanfont/headscale/pull/2038 **Author:** [@nadongjun](https://github.com/nadongjun) **Created:** 7/30/2024 **Status:** ✅ Merged **Merged:** 12/17/2024 **Merged by:** [@kradalby](https://github.com/kradalby) **Base:** `main` ← **Head:** `add-race-option` --- ### 📝 Commits (5) - [`fd39688`](https://github.com/juanfont/headscale/commit/fd3968882d20559ffe1222efa6ab6ecb4feaa4fb) Add -race flag to Makefile and integration tests; fix data race in CreateTailscaleNodesInUser - [`126177c`](https://github.com/juanfont/headscale/commit/126177c7ab0fd966246c85cae6635f04163934cf) Fix data race in ExecuteCommand by using local buffers and mutex - [`0c1309b`](https://github.com/juanfont/headscale/commit/0c1309b7e28012874dde8192e1776596eeb6e31c) Merge branch 'main' into add-race-option - [`3c65332`](https://github.com/juanfont/headscale/commit/3c653325a681efa63e7b0ba057874e18938d2894) Merge branch 'main' into add-race-option - [`e9860e3`](https://github.com/juanfont/headscale/commit/e9860e33beb8109f013c5912d99fad5922715246) lint ### 📊 Changes **3 files changed** (+7 additions, -4 deletions) <details> <summary>View changed files</summary> 📝 `Makefile` (+2 -2) 📝 `integration/dockertestutil/execute.go` (+1 -2) 📝 `integration/scenario.go` (+4 -0) </details> ### 📄 Description <!-- Headscale is "Open Source, acknowledged contribution", this means that any contribution will have to be discussed with the Maintainers before being submitted. This model has been chosen to reduce the risk of burnout by limiting the maintenance overhead of reviewing and validating third-party code. Headscale is open to code contributions for bug fixes without discussion. If you find mistakes in the documentation, please submit a fix to the documentation. --> <!-- Please tick if the following things apply. You… --> - [x] have read the [CONTRIBUTING.md](./CONTRIBUTING.md) file - [ ] raised a GitHub issue or discussed it on the projects chat beforehand - [ ] added unit tests - [ ] added integration tests - [ ] updated documentation if needed - [ ] updated CHANGELOG.md <!-- If applicable, please reference the issue using `Fixes #XXX` and add tests to cover your new code. --> - This PR adds the -race flag to both unit and integration tests and addresses data race issues in the CreateTailscaleNodesInUser method. The changes include: - Added -race flag: Included the -race flag in both test and test_integration targets in the Makefile to enable race condition detection for unit and integration tests. Github action is also configured to detect data races. - Fixed data race in CreateTailscaleNodesInUser: Updated the CreateTailscaleNodesInUser method to resolve data race issues related to concurrent access. ### Log ``` WARNING: DATA RACE Read at 0x00c000356030 by goroutine 106: github.com/juanfont/headscale/integration.(*Scenario).CreateTailscaleNodesInUser.func1() /Users/dongjunna/br/headscale/integration/scenario.go:336 +0x84 golang.org/x/sync/errgroup.(*Group).Go.func1() /go/pkg/mod/golang.org/x/sync@v0.7.0/errgroup/errgroup.go:78 +0x7c Previous write at 0x00c000356030 by goroutine 8: github.com/juanfont/headscale/integration.(*Scenario).CreateTailscaleNodesInUser() /Users/dongjunna/br/headscale/integration/scenario.go:330 +0x574 github.com/juanfont/headscale/integration.(*Scenario).CreateHeadscaleEnv() /Users/dongjunna/br/headscale/integration/scenario.go:481 +0x218 github.com/juanfont/headscale/integration.TestACLHostsInNetMapTable.func1() /Users/dongjunna/br/headscale/integration/acl_test.go:274 +0x120 testing.tRunner() /usr/local/go/src/testing/testing.go:1689 +0x180 testing.(*T).Run.gowrap1() /usr/local/go/src/testing/testing.go:1742 +0x40 Goroutine 106 (running) created at: golang.org/x/sync/errgroup.(*Group).Go() /go/pkg/mod/golang.org/x/sync@v0.7.0/errgroup/errgroup.go:75 +0x10c github.com/juanfont/headscale/integration.(*Scenario).CreateTailscaleNodesInUser() /Users/dongjunna/br/headscale/integration/scenario.go:335 +0x19c github.com/juanfont/headscale/integration.(*Scenario).CreateHeadscaleEnv() /Users/dongjunna/br/headscale/integration/scenario.go:481 +0x218 github.com/juanfont/headscale/integration.TestACLHostsInNetMapTable.func1() /Users/dongjunna/br/headscale/integration/acl_test.go:274 +0x120 testing.tRunner() /usr/local/go/src/testing/testing.go:1689 +0x180 testing.(*T).Run.gowrap1() /usr/local/go/src/testing/testing.go:1742 +0x40 Goroutine 8 (running) created at: testing.(*T).Run() /usr/local/go/src/testing/testing.go:1742 +0x5e4 github.com/juanfont/headscale/integration.TestACLHostsInNetMapTable() /Users/dongjunna/br/headscale/integration/acl_test.go:268 +0x1f6c testing.tRunner() /usr/local/go/src/testing/testing.go:1689 +0x180 testing.(*T).Run.gowrap1() /usr/local/go/src/testing/testing.go:1742 +0x40 ================== ================== WARNING: DATA RACE Read at 0x00c0001961d0 by goroutine 106: github.com/juanfont/headscale/integration/tsic.New() /Users/dongjunna/br/headscale/integration/tsic/tsic.go:195 +0x38c github.com/juanfont/headscale/integration.(*Scenario).CreateTailscaleNodesInUser.func1() /Users/dongjunna/br/headscale/integration/scenario.go:336 +0xa8 golang.org/x/sync/errgroup.(*Group).Go.func1() /go/pkg/mod/golang.org/x/sync@v0.7.0/errgroup/errgroup.go:78 +0x7c Previous write at 0x00c0001961d0 by goroutine 8: github.com/juanfont/headscale/integration.(*Scenario).CreateTailscaleNodesInUser() /Users/dongjunna/br/headscale/integration/scenario.go:330 +0x4ec github.com/juanfont/headscale/integration.(*Scenario).CreateHeadscaleEnv() /Users/dongjunna/br/headscale/integration/scenario.go:481 +0x218 github.com/juanfont/headscale/integration.TestACLHostsInNetMapTable.func1() /Users/dongjunna/br/headscale/integration/acl_test.go:274 +0x120 testing.tRunner() /usr/local/go/src/testing/testing.go:1689 +0x180 testing.(*T).Run.gowrap1() /usr/local/go/src/testing/testing.go:1742 +0x40 Goroutine 106 (running) created at: golang.org/x/sync/errgroup.(*Group).Go() /go/pkg/mod/golang.org/x/sync@v0.7.0/errgroup/errgroup.go:75 +0x10c github.com/juanfont/headscale/integration.(*Scenario).CreateTailscaleNodesInUser() /Users/dongjunna/br/headscale/integration/scenario.go:335 +0x19c github.com/juanfont/headscale/integration.(*Scenario).CreateHeadscaleEnv() /Users/dongjunna/br/headscale/integration/scenario.go:481 +0x218 github.com/juanfont/headscale/integration.TestACLHostsInNetMapTable.func1() /Users/dongjunna/br/headscale/integration/acl_test.go:274 +0x120 testing.tRunner() /usr/local/go/src/testing/testing.go:1689 +0x180 testing.(*T).Run.gowrap1() /usr/local/go/src/testing/testing.go:1742 +0x40 Goroutine 8 (running) created at: testing.(*T).Run() /usr/local/go/src/testing/testing.go:1742 +0x5e4 github.com/juanfont/headscale/integration.TestACLHostsInNetMapTable() /Users/dongjunna/br/headscale/integration/acl_test.go:268 +0x1f6c testing.tRunner() /usr/local/go/src/testing/testing.go:1689 +0x180 testing.(*T).Run.gowrap1() /usr/local/go/src/testing/testing.go:1742 +0x40 ================== ================== WARNING: DATA RACE Read at 0x00c0001961d8 by goroutine 106: github.com/juanfont/headscale/integration/tsic.New() /Users/dongjunna/br/headscale/integration/tsic/tsic.go:195 +0x38c github.com/juanfont/headscale/integration.(*Scenario).CreateTailscaleNodesInUser.func1() /Users/dongjunna/br/headscale/integration/scenario.go:336 +0xa8 golang.org/x/sync/errgroup.(*Group).Go.func1() /go/pkg/mod/golang.org/x/sync@v0.7.0/errgroup/errgroup.go:78 +0x7c Previous write at 0x00c0001961d8 by goroutine 8: github.com/juanfont/headscale/integration.(*Scenario).CreateTailscaleNodesInUser() /Users/dongjunna/br/headscale/integration/scenario.go:330 +0x530 github.com/juanfont/headscale/integration.(*Scenario).CreateHeadscaleEnv() /Users/dongjunna/br/headscale/integration/scenario.go:481 +0x218 github.com/juanfont/headscale/integration.TestACLHostsInNetMapTable.func1() /Users/dongjunna/br/headscale/integration/acl_test.go:274 +0x120 testing.tRunner() /usr/local/go/src/testing/testing.go:1689 +0x180 testing.(*T).Run.gowrap1() /usr/local/go/src/testing/testing.go:1742 +0x40 Goroutine 106 (running) created at: golang.org/x/sync/errgroup.(*Group).Go() /go/pkg/mod/golang.org/x/sync@v0.7.0/errgroup/errgroup.go:75 +0x10c github.com/juanfont/headscale/integration.(*Scenario).CreateTailscaleNodesInUser() /Users/dongjunna/br/headscale/integration/scenario.go:335 +0x19c github.com/juanfont/headscale/integration.(*Scenario).CreateHeadscaleEnv() /Users/dongjunna/br/headscale/integration/scenario.go:481 +0x218 github.com/juanfont/headscale/integration.TestACLHostsInNetMapTable.func1() /Users/dongjunna/br/headscale/integration/acl_test.go:274 +0x120 testing.tRunner() /usr/local/go/src/testing/testing.go:1689 +0x180 testing.(*T).Run.gowrap1() /usr/local/go/src/testing/testing.go:1742 +0x40 Goroutine 8 (running) created at: testing.(*T).Run() /usr/local/go/src/testing/testing.go:1742 +0x5e4 github.com/juanfont/headscale/integration.TestACLHostsInNetMapTable() /Users/dongjunna/br/headscale/integration/acl_test.go:268 +0x1f6c testing.tRunner() /usr/local/go/src/testing/testing.go:1689 +0x180 testing.(*T).Run.gowrap1() /usr/local/go/src/testing/testing.go:1742 +0x40 ``` <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Enhanced testing process by adding race detection for both unit and integration tests. - **Bug Fixes** - Improved concurrency control in command execution and Tailscale node creation to prevent race conditions, enhancing reliability. - **Style** - Cleaned up whitespace for better code formatting. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
adam added the pull-request label 2025-12-29 03:21:23 +01:00
adam closed this issue 2025-12-29 03:21:23 +01:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/headscale#2462