Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make sure only one package syncing operation happens at a time #120

Closed
wants to merge 1 commit into from

Conversation

kpratyus
Copy link
Member

@kpratyus kpratyus commented Jul 31, 2022

This is the revised PR for issue #84 . As proposed I am in the process to write a test case for testing the changes (It will take some time as I am new to the codebase).

@kpratyus kpratyus requested a review from a team July 31, 2022 17:08
@codecov
Copy link

codecov bot commented Jul 31, 2022

Codecov Report

Merging #120 (3e0abca) into main (3d4cbdc) will increase coverage by 0.36%.
The diff coverage is 100.00%.

@@            Coverage Diff             @@
##             main     #120      +/-   ##
==========================================
+ Coverage   74.89%   75.25%   +0.36%     
==========================================
  Files          22       22              
  Lines        1629     1637       +8     
==========================================
+ Hits         1220     1232      +12     
+ Misses        307      304       -3     
+ Partials      102      101       -1     
Impacted Files Coverage Δ
client/internal/clientcommon.go 79.50% <ø> (ø)
client/httpclient.go 94.64% <100.00%> (+0.09%) ⬆️
client/internal/httpsender.go 72.26% <100.00%> (ø)
client/internal/packagessyncer.go 60.00% <100.00%> (+0.74%) ⬆️
client/internal/receivedprocessor.go 69.71% <100.00%> (+0.43%) ⬆️
client/internal/wsreceiver.go 91.42% <100.00%> (ø)
client/wsclient.go 87.11% <100.00%> (+2.54%) ⬆️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 3d4cbdc...3e0abca. Read the comment docs.

@kpratyus
Copy link
Member Author

kpratyus commented Aug 1, 2022

Hi @tigrannajaryan , one case which could lead to race is when a package having same name, version and hash as previous package is tried to be Installed. Ideally the packagesyncer should ignore the request but due to race condition it could try to install it again. Do you have any other cases on top of your mind?

@tigrannajaryan
Copy link
Member

Hi @tigrannajaryan , one case which could lead to race is when a package having same name, version and hash as previous package is tried to be Installed. Ideally the packagesyncer should ignore the request but due to race condition it could try to install it again. Do you have any other cases on top of your mind?

I think the most common case we want to test for is this:

  1. Agent receives a ServerToAgent message with PackagesAvailable field set.
  2. Agent creates a corresponding PackagesSyncer and begins downloading and syncing the packages. This happen in packagesSyncer.doSync on a different goroutine.
  3. Agent receives another ServerToAgent message with PackagesAvailable field set. The value of PackagesAvailable may be different than the first time (i.e. something has changed on the Server side, while step 2 was executing.
  4. Agent creates another PackagesSyncer and calls Sync(). This syncing should wait until the previous one in Step 2 is complete.

Copy link
Member

@tigrannajaryan tigrannajaryan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good so far. Let's add a test and should be good to merge

@@ -54,6 +54,9 @@ type ClientCommon struct {

// Indicates that the Client is fully stopped.
stoppedSignal chan struct{}

// Mutex for Package Syncing
PackageSyncComplete sync.Mutex
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: we use "Mutex" prefix elsewhere in this codebase.

Suggested change
PackageSyncComplete sync.Mutex
PackageSyncMutex sync.Mutex

@tigrannajaryan tigrannajaryan changed the title Adding Mutex Make sure only one package syncing operation happens at a time Aug 3, 2022
@kpratyus
Copy link
Member Author

kpratyus commented Aug 5, 2022

Facing the following race condition. Trying to debug it. Any help would be appreciated.

Read at 0x00c000380da8 by goroutine 24:
  runtime.slicecopy()
      /usr/lib/golang/src/runtime/slice.go:284 +0x0
  google.golang.org/protobuf/internal/impl.mergeBytesNoZero()
      /root/go/pkg/mod/google.golang.org/protobuf@v1.27.1/internal/impl/merge.go:167 +0xc6
  google.golang.org/protobuf/internal/impl.(*MessageInfo).mergePointer()
      /root/go/pkg/mod/google.golang.org/protobuf@v1.27.1/internal/impl/merge.go:52 +0x2b5
  google.golang.org/protobuf/internal/impl.(*MessageInfo).merge()
      /root/go/pkg/mod/google.golang.org/protobuf@v1.27.1/internal/impl/merge.go:32 +0x9a
  google.golang.org/protobuf/internal/impl.(*MessageInfo).merge-fm()
      /root/go/pkg/mod/google.golang.org/protobuf@v1.27.1/internal/impl/merge.go:23 +0x84
  google.golang.org/protobuf/proto.mergeOptions.mergeMessage()
      /root/go/pkg/mod/google.golang.org/protobuf@v1.27.1/proto/merge.go:73 +0xc8
  google.golang.org/protobuf/proto.Clone()
      /root/go/pkg/mod/google.golang.org/protobuf@v1.27.1/proto/merge.go:58 +0x84
  github.com/open-telemetry/opamp-go/client/internal.(*ClientSyncedState).SetPackageStatuses()
      /opamp-go/client/internal/clientstate.go:121 +0x67
  github.com/open-telemetry/opamp-go/client/internal.(*packagesSyncer).reportStatuses()
      /opamp-go/client/internal/packagessyncer.go:336 +0x1c6
  github.com/open-telemetry/opamp-go/client/internal.(*packagesSyncer).syncPackage()
      /opamp-go/client/internal/packagessyncer.go:223 +0xa5e
  github.com/open-telemetry/opamp-go/client/internal.(*packagesSyncer).doSync()
      /opamp-go/client/internal/packagessyncer.go:127 +0x4e5
  github.com/open-telemetry/opamp-go/client/internal.(*packagesSyncer).Sync·dwrap·11()
      /opamp-go/client/internal/packagessyncer.go:65 +0x64

Previous write at 0x00c000380da8 by goroutine 72:
  runtime.slicecopy()
      /usr/lib/golang/src/runtime/slice.go:284 +0x0
  google.golang.org/protobuf/internal/impl.consumeBytesNoZero()
      /root/go/pkg/mod/google.golang.org/protobuf@v1.27.1/internal/impl/codec_gen.go:5410 +0xe5
  google.golang.org/protobuf/internal/impl.(*MessageInfo).unmarshalPointer()
      /root/go/pkg/mod/google.golang.org/protobuf@v1.27.1/internal/impl/decode.go:139 +0x79d
  google.golang.org/protobuf/internal/impl.consumeMessageInfo()
      /root/go/pkg/mod/google.golang.org/protobuf@v1.27.1/internal/impl/codec_field.go:252 +0x25c
  google.golang.org/protobuf/internal/impl.(*MessageInfo).unmarshalPointer()
      /root/go/pkg/mod/google.golang.org/protobuf@v1.27.1/internal/impl/decode.go:139 +0x79d
  google.golang.org/protobuf/internal/impl.(*MessageInfo).unmarshal()
      /root/go/pkg/mod/google.golang.org/protobuf@v1.27.1/internal/impl/decode.go:62 +0x104
  google.golang.org/protobuf/internal/impl.(*MessageInfo).unmarshal-fm()
      /root/go/pkg/mod/google.golang.org/protobuf@v1.27.1/internal/impl/decode.go:55 +0x104
  google.golang.org/protobuf/proto.UnmarshalOptions.unmarshal()
      /root/go/pkg/mod/google.golang.org/protobuf@v1.27.1/proto/decode.go:93 +0x2bd
  google.golang.org/protobuf/proto.Unmarshal()
      /root/go/pkg/mod/google.golang.org/protobuf@v1.27.1/proto/decode.go:50 +0xa4
  github.com/open-telemetry/opamp-go/client/internal.(*wsReceiver).receiveMessage()
      /opamp-go/client/internal/wsreceiver.go:73 +0x67
  github.com/open-telemetry/opamp-go/client/internal.(*wsReceiver).ReceiverLoop()
      /opamp-go/client/internal/wsreceiver.go:55 +0xf7
  github.com/open-telemetry/opamp-go/client.(*wsClient).runOneCycle()
      /opamp-go/client/wsclient.go:242 +0x5cf
  github.com/open-telemetry/opamp-go/client.(*wsClient).runUntilStopped()
      /opamp-go/client/wsclient.go:264 +0x44
  github.com/open-telemetry/opamp-go/client.(*wsClient).runUntilStopped-fm()
      /opamp-go/client/wsclient.go:257 +0x4d
  github.com/open-telemetry/opamp-go/client/internal.(*ClientCommon).StartConnectAndRun.func1()
      /opamp-go/client/internal/clientcommon.go:199 +0xb2

@srikanthccv
Copy link
Member

@kpratyus are you still interested in continuing this work?

@tigrannajaryan
Copy link
Member

Closing since there hasn't been updates to the PR for a while. Please reopen if still active.

tpaschalis added a commit to tpaschalis/opamp-go that referenced this pull request Jun 25, 2024
Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>
tpaschalis added a commit to tpaschalis/opamp-go that referenced this pull request Jun 30, 2024
Signed-off-by: Paschalis Tsilias <paschalis.tsilias@grafana.com>
tigrannajaryan pushed a commit that referenced this pull request Aug 29, 2024
This PR revives work done in previous PRs (#118, #120) to make sure that only a single package syncing operation is ever in flight and also adds a test.

The previous PRs did not account for needing to also protect `initStatuses` and `SetPackageStatuses`, so that's why the Lock and Unlock statements are not just paired in doSync. If you think the intent would be clearer using a sync.WaitGroup, let me know.

The new test makes sure that the mutex correctly protects the local storage; if we comment out the calls to Lock/Unlock and run the test with the `-race` flag we can see the race condition taking place

<details>

```
# Without using the mutex we can see the race condition of messages sent in parallel
$ go test -run=TestPackageUpdatesInParallel -v -race -count=1
=== RUN   TestPackageUpdatesInParallel
==================
WARNING: DATA RACE
Write at 0x00c00003cdb0 by goroutine 10:
  github.com/open-telemetry/opamp-go/client/internal.(*InMemPackagesStore).SetLastReportedStatuses()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/inmempackagestore.go:95 +0x34
  github.com/open-telemetry/opamp-go/client/internal.(*packagesSyncer).reportStatuses()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/packagessyncer.go:335 +0x78
  github.com/open-telemetry/opamp-go/client/internal.(*packagesSyncer).syncPackage()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/packagessyncer.go:199 +0x4dc
  github.com/open-telemetry/opamp-go/client/internal.(*packagesSyncer).doSync()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/packagessyncer.go:132 +0x3b0
  github.com/open-telemetry/opamp-go/client/internal.(*packagesSyncer).Sync.gowrap1()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/packagessyncer.go:69 +0x4c

Previous read at 0x00c00003cdb0 by goroutine 8:
  github.com/open-telemetry/opamp-go/client/internal.(*InMemPackagesStore).LastReportedStatuses()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/inmempackagestore.go:91 +0x30
  github.com/open-telemetry/opamp-go/client/internal.(*packagesSyncer).initStatuses()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/packagessyncer.go:88 +0x64
  github.com/open-telemetry/opamp-go/client/internal.(*packagesSyncer).Sync()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/packagessyncer.go:59 +0x78
  github.com/open-telemetry/opamp-go/client/internal.TestPackageUpdatesInParallel.func1()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/httpsender_test.go:185 +0x68
  github.com/open-telemetry/opamp-go/client/types.CallbacksStruct.OnMessage()
      /Users/tpaschalis/GitRepos/opamp-go/client/types/callbacks.go:161 +0x84
  github.com/open-telemetry/opamp-go/client/types.(*CallbacksStruct).OnMessage()
      <autogenerated>:1 +0x20
  github.com/open-telemetry/opamp-go/client/internal.(*receivedProcessor).ProcessReceivedMessage()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/receivedprocessor.go:160 +0xe94
  github.com/open-telemetry/opamp-go/client/internal.TestPackageUpdatesInParallel.func2()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/httpsender_test.go:197 +0x4d0

Goroutine 10 (running) created at:
  github.com/open-telemetry/opamp-go/client/internal.(*packagesSyncer).Sync()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/packagessyncer.go:69 +0x15c
  github.com/open-telemetry/opamp-go/client/internal.TestPackageUpdatesInParallel.func1()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/httpsender_test.go:185 +0x68
  github.com/open-telemetry/opamp-go/client/types.CallbacksStruct.OnMessage()
      /Users/tpaschalis/GitRepos/opamp-go/client/types/callbacks.go:161 +0x84
  github.com/open-telemetry/opamp-go/client/types.(*CallbacksStruct).OnMessage()
      <autogenerated>:1 +0x20
  github.com/open-telemetry/opamp-go/client/internal.(*receivedProcessor).ProcessReceivedMessage()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/receivedprocessor.go:160 +0xe94
  github.com/open-telemetry/opamp-go/client/internal.TestPackageUpdatesInParallel.func3()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/httpsender_test.go:216 +0x4d0

Goroutine 8 (finished) created at:
  github.com/open-telemetry/opamp-go/client/internal.TestPackageUpdatesInParallel()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/httpsender_test.go:196 +0x4b0
  testing.tRunner()
      /opt/homebrew/Cellar/go/1.22.2/libexec/src/testing/testing.go:1689 +0x180
  testing.(*T).Run.gowrap1()
      /opt/homebrew/Cellar/go/1.22.2/libexec/src/testing/testing.go:1742 +0x40
==================
==================
WARNING: DATA RACE
Write at 0x00c0000999e0 by goroutine 11:
  runtime.mapaccess2_faststr()
      /opt/homebrew/Cellar/go/1.22.2/libexec/src/runtime/map_faststr.go:108 +0x42c
  github.com/open-telemetry/opamp-go/client/internal.(*InMemPackagesStore).CreatePackage()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/inmempackagestore.go:50 +0x74
  github.com/open-telemetry/opamp-go/client/internal.(*packagesSyncer).syncPackage()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/packagessyncer.go:203 +0x528
  github.com/open-telemetry/opamp-go/client/internal.(*packagesSyncer).doSync()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/packagessyncer.go:132 +0x3b0
  github.com/open-telemetry/opamp-go/client/internal.(*packagesSyncer).Sync.gowrap1()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/packagessyncer.go:69 +0x4c

Previous read at 0x00c0000999e0 by goroutine 10:
  runtime.mapdelete()
      /opt/homebrew/Cellar/go/1.22.2/libexec/src/runtime/map.go:696 +0x43c
  github.com/open-telemetry/opamp-go/client/internal.(*InMemPackagesStore).Packages()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/inmempackagestore.go:36 +0x64
  github.com/open-telemetry/opamp-go/client/internal.(*packagesSyncer).deleteUnneededLocalPackages()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/packagessyncer.go:303 +0x58
  github.com/open-telemetry/opamp-go/client/internal.(*packagesSyncer).doSync()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/packagessyncer.go:125 +0x1b4
  github.com/open-telemetry/opamp-go/client/internal.(*packagesSyncer).Sync.gowrap1()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/packagessyncer.go:69 +0x4c

Goroutine 11 (running) created at:
  github.com/open-telemetry/opamp-go/client/internal.(*packagesSyncer).Sync()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/packagessyncer.go:69 +0x15c
  github.com/open-telemetry/opamp-go/client/internal.TestPackageUpdatesInParallel.func1()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/httpsender_test.go:185 +0x68
  github.com/open-telemetry/opamp-go/client/types.CallbacksStruct.OnMessage()
      /Users/tpaschalis/GitRepos/opamp-go/client/types/callbacks.go:161 +0x84
  github.com/open-telemetry/opamp-go/client/types.(*CallbacksStruct).OnMessage()
      <autogenerated>:1 +0x20
  github.com/open-telemetry/opamp-go/client/internal.(*receivedProcessor).ProcessReceivedMessage()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/receivedprocessor.go:160 +0xe94
  github.com/open-telemetry/opamp-go/client/internal.TestPackageUpdatesInParallel.func2()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/httpsender_test.go:197 +0x4d0

Goroutine 10 (running) created at:
  github.com/open-telemetry/opamp-go/client/internal.(*packagesSyncer).Sync()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/packagessyncer.go:69 +0x15c
  github.com/open-telemetry/opamp-go/client/internal.TestPackageUpdatesInParallel.func1()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/httpsender_test.go:185 +0x68
  github.com/open-telemetry/opamp-go/client/types.CallbacksStruct.OnMessage()
      /Users/tpaschalis/GitRepos/opamp-go/client/types/callbacks.go:161 +0x84
  github.com/open-telemetry/opamp-go/client/types.(*CallbacksStruct).OnMessage()
      <autogenerated>:1 +0x20
  github.com/open-telemetry/opamp-go/client/internal.(*receivedProcessor).ProcessReceivedMessage()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/receivedprocessor.go:160 +0xe94
  github.com/open-telemetry/opamp-go/client/internal.TestPackageUpdatesInParallel.func3()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/httpsender_test.go:216 +0x4d0
==================
==================
WARNING: DATA RACE
Write at 0x00c00003cdb0 by goroutine 11:
  github.com/open-telemetry/opamp-go/client/internal.(*InMemPackagesStore).SetLastReportedStatuses()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/inmempackagestore.go:95 +0x34
  github.com/open-telemetry/opamp-go/client/internal.(*packagesSyncer).reportStatuses()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/packagessyncer.go:335 +0x78
  github.com/open-telemetry/opamp-go/client/internal.(*packagesSyncer).syncPackage()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/packagessyncer.go:229 +0x780
  github.com/open-telemetry/opamp-go/client/internal.(*packagesSyncer).doSync()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/packagessyncer.go:132 +0x3b0
  github.com/open-telemetry/opamp-go/client/internal.(*packagesSyncer).Sync.gowrap1()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/packagessyncer.go:69 +0x4c

Previous write at 0x00c00003cdb0 by goroutine 10:
  github.com/open-telemetry/opamp-go/client/internal.(*InMemPackagesStore).SetLastReportedStatuses()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/inmempackagestore.go:95 +0x34
  github.com/open-telemetry/opamp-go/client/internal.(*packagesSyncer).reportStatuses()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/packagessyncer.go:335 +0x78
  github.com/open-telemetry/opamp-go/client/internal.(*packagesSyncer).syncPackage()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/packagessyncer.go:229 +0x780
  github.com/open-telemetry/opamp-go/client/internal.(*packagesSyncer).doSync()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/packagessyncer.go:132 +0x3b0
  github.com/open-telemetry/opamp-go/client/internal.(*packagesSyncer).Sync.gowrap1()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/packagessyncer.go:69 +0x4c

Goroutine 11 (running) created at:
  github.com/open-telemetry/opamp-go/client/internal.(*packagesSyncer).Sync()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/packagessyncer.go:69 +0x15c
  github.com/open-telemetry/opamp-go/client/internal.TestPackageUpdatesInParallel.func1()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/httpsender_test.go:185 +0x68
  github.com/open-telemetry/opamp-go/client/types.CallbacksStruct.OnMessage()
      /Users/tpaschalis/GitRepos/opamp-go/client/types/callbacks.go:161 +0x84
  github.com/open-telemetry/opamp-go/client/types.(*CallbacksStruct).OnMessage()
      <autogenerated>:1 +0x20
  github.com/open-telemetry/opamp-go/client/internal.(*receivedProcessor).ProcessReceivedMessage()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/receivedprocessor.go:160 +0xe94
  github.com/open-telemetry/opamp-go/client/internal.TestPackageUpdatesInParallel.func2()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/httpsender_test.go:197 +0x4d0

Goroutine 10 (running) created at:
  github.com/open-telemetry/opamp-go/client/internal.(*packagesSyncer).Sync()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/packagessyncer.go:69 +0x15c
  github.com/open-telemetry/opamp-go/client/internal.TestPackageUpdatesInParallel.func1()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/httpsender_test.go:185 +0x68
  github.com/open-telemetry/opamp-go/client/types.CallbacksStruct.OnMessage()
      /Users/tpaschalis/GitRepos/opamp-go/client/types/callbacks.go:161 +0x84
  github.com/open-telemetry/opamp-go/client/types.(*CallbacksStruct).OnMessage()
      <autogenerated>:1 +0x20
  github.com/open-telemetry/opamp-go/client/internal.(*receivedProcessor).ProcessReceivedMessage()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/receivedprocessor.go:160 +0xe94
  github.com/open-telemetry/opamp-go/client/internal.TestPackageUpdatesInParallel.func3()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/httpsender_test.go:216 +0x4d0
==================
==================
WARNING: DATA RACE
Write at 0x00c00003cdb0 by goroutine 10:
  github.com/open-telemetry/opamp-go/client/internal.(*InMemPackagesStore).SetLastReportedStatuses()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/inmempackagestore.go:95 +0x34
  github.com/open-telemetry/opamp-go/client/internal.(*packagesSyncer).reportStatuses()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/packagessyncer.go:335 +0x78
  github.com/open-telemetry/opamp-go/client/internal.(*packagesSyncer).doSync()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/packagessyncer.go:151 +0x69c
  github.com/open-telemetry/opamp-go/client/internal.(*packagesSyncer).Sync.gowrap1()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/packagessyncer.go:69 +0x4c

Previous write at 0x00c00003cdb0 by goroutine 11:
  github.com/open-telemetry/opamp-go/client/internal.(*InMemPackagesStore).SetLastReportedStatuses()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/inmempackagestore.go:95 +0x34
  github.com/open-telemetry/opamp-go/client/internal.(*packagesSyncer).reportStatuses()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/packagessyncer.go:335 +0x78
  github.com/open-telemetry/opamp-go/client/internal.(*packagesSyncer).doSync()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/packagessyncer.go:151 +0x69c
  github.com/open-telemetry/opamp-go/client/internal.(*packagesSyncer).Sync.gowrap1()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/packagessyncer.go:69 +0x4c

Goroutine 10 (running) created at:
  github.com/open-telemetry/opamp-go/client/internal.(*packagesSyncer).Sync()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/packagessyncer.go:69 +0x15c
  github.com/open-telemetry/opamp-go/client/internal.TestPackageUpdatesInParallel.func1()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/httpsender_test.go:185 +0x68
  github.com/open-telemetry/opamp-go/client/types.CallbacksStruct.OnMessage()
      /Users/tpaschalis/GitRepos/opamp-go/client/types/callbacks.go:161 +0x84
  github.com/open-telemetry/opamp-go/client/types.(*CallbacksStruct).OnMessage()
      <autogenerated>:1 +0x20
  github.com/open-telemetry/opamp-go/client/internal.(*receivedProcessor).ProcessReceivedMessage()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/receivedprocessor.go:160 +0xe94
  github.com/open-telemetry/opamp-go/client/internal.TestPackageUpdatesInParallel.func3()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/httpsender_test.go:216 +0x4d0

Goroutine 11 (running) created at:
  github.com/open-telemetry/opamp-go/client/internal.(*packagesSyncer).Sync()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/packagessyncer.go:69 +0x15c
  github.com/open-telemetry/opamp-go/client/internal.TestPackageUpdatesInParallel.func1()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/httpsender_test.go:185 +0x68
  github.com/open-telemetry/opamp-go/client/types.CallbacksStruct.OnMessage()
      /Users/tpaschalis/GitRepos/opamp-go/client/types/callbacks.go:161 +0x84
  github.com/open-telemetry/opamp-go/client/types.(*CallbacksStruct).OnMessage()
      <autogenerated>:1 +0x20
  github.com/open-telemetry/opamp-go/client/internal.(*receivedProcessor).ProcessReceivedMessage()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/receivedprocessor.go:160 +0xe94
  github.com/open-telemetry/opamp-go/client/internal.TestPackageUpdatesInParallel.func2()
      /Users/tpaschalis/GitRepos/opamp-go/client/internal/httpsender_test.go:197 +0x4d0
==================
    testing.go:1398: race detected during execution of test
--- FAIL: TestPackageUpdatesInParallel (0.10s)
FAIL
exit status 1
FAIL	github.com/open-telemetry/opamp-go/client/internal	0.286s
```

</details>

Fixes #84
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants