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

DATA RACE #218

Closed
alrsorokin opened this issue Sep 21, 2022 · 1 comment · Fixed by #258
Closed

DATA RACE #218

alrsorokin opened this issue Sep 21, 2022 · 1 comment · Fixed by #258
Assignees
Labels
bug Something isn't working

Comments

@alrsorokin
Copy link

go: 1.19
tarantool: 1.10 / 2.10

Все запускается из докера
Использую базовый образ для приложения (acim/go-reflex)
При запуске приложения получаем WARNING: DATA RACE
Пример приложения(warning) и лог:
warning.zip
tnt.log

@oleg-jukovec oleg-jukovec added bug Something isn't working 2sp labels Sep 21, 2022
@oleg-jukovec
Copy link
Collaborator

oleg-jukovec commented Sep 22, 2022

Thank you for the issue!

It does not look like a critical problem. The data race should not cause a problem because the ping request does not use a schema.

But in any case, we will try to fix it.

@oleg-jukovec oleg-jukovec self-assigned this Dec 28, 2022
oleg-jukovec added a commit that referenced this issue Jan 9, 2023
Initial requests should not use a schema because it has not been
loaded yet.

Part of #218
oleg-jukovec added a commit that referenced this issue Jan 9, 2023
We need to block shards to avoid schema usage by concurrent requests.
Now it can be a ping request or a watch request so it does not look
critical. We don't expect many of this requests and such requests
do not use schema at all.

Part of #218
oleg-jukovec added a commit that referenced this issue Jan 9, 2023
We need to use an atomic method to read the atomic value.

Part of #218
oleg-jukovec added a commit that referenced this issue Jan 9, 2023
A use-case from our code: a response per AppendPush(). It looks like
it's enough to change the test.

Part of #218
oleg-jukovec added a commit that referenced this issue Jan 9, 2023
We need to update an addresses slice under a lock because
we use the slice in ConnectionMulti.getCurrentConnection().

Part of #218
oleg-jukovec added a commit that referenced this issue Jan 9, 2023
We need to use an atomic method to update the atomic value.

Part of #218
oleg-jukovec added a commit that referenced this issue Jan 9, 2023
You need to protect the poolWatcher.unregistered variable to avoid
the data race. It does not look too critical because we don't
expect that performance of poolWatcher.Unregister() is matter
in cuncurrent calls case.

It could also lead to crashes.

Part of #218
oleg-jukovec added a commit that referenced this issue Jan 9, 2023
It is better to use atomic counters.

Part of #218
oleg-jukovec added a commit that referenced this issue Jan 9, 2023
It is better to use atomic counters.

Part of #218
oleg-jukovec added a commit that referenced this issue Jan 9, 2023
Tests execution result may differ due to different timings, so it is
better to test together, rather than instead.

Closes #218
oleg-jukovec added a commit that referenced this issue Jan 9, 2023
You need to protect the poolWatcher.unregistered variable to avoid
the data race. It does not look too critical because we don't
expect that performance of poolWatcher.Unregister() is matter
in cuncurrent calls case.

It could also lead to crashes.

Part of #218
oleg-jukovec added a commit that referenced this issue Jan 9, 2023
It is better to use atomic counters.

Part of #218
oleg-jukovec added a commit that referenced this issue Jan 9, 2023
It is better to use atomic counters.

Part of #218
oleg-jukovec added a commit that referenced this issue Jan 9, 2023
Tests execution result may differ due to different timings, so it is
better to test together, rather than instead.

Closes #218
oleg-jukovec added a commit that referenced this issue Jan 13, 2023
Initial requests should not use a schema because it has not been
loaded yet.

Part of #218
oleg-jukovec added a commit that referenced this issue Jan 13, 2023
We need to block shards to avoid schema usage by concurrent requests.
Now it can be a ping request or a watch request so it does not look
critical. We don't expect many of this requests and such requests
do not use schema at all.

Part of #218
oleg-jukovec added a commit that referenced this issue Jan 13, 2023
We need to use an atomic method to read the atomic value.

Part of #218
oleg-jukovec added a commit that referenced this issue Jan 13, 2023
A use-case from our code: a response per AppendPush(). It looks like
it's enough to change the test.

Part of #218
oleg-jukovec added a commit that referenced this issue Jan 13, 2023
We need to update an addresses slice under a lock because
we use the slice in ConnectionMulti.getCurrentConnection().

Part of #218
oleg-jukovec added a commit that referenced this issue Jan 13, 2023
We need to use an atomic method to update the atomic value.

Part of #218
oleg-jukovec added a commit that referenced this issue Jan 13, 2023
You need to protect the poolWatcher.unregistered variable to avoid
the data race. It does not look too critical because we don't
expect that performance of poolWatcher.Unregister() is matter
in cuncurrent calls case.

It could also lead to crashes.

Part of #218
oleg-jukovec added a commit that referenced this issue Jan 13, 2023
It is better to use atomic counters.

Part of #218
oleg-jukovec added a commit that referenced this issue Jan 13, 2023
It is better to use atomic counters.

Part of #218
oleg-jukovec added a commit that referenced this issue Jan 13, 2023
Tests execution result may differ due to different timings, so it is
better to test together, rather than instead.

Closes #218
oleg-jukovec added a commit that referenced this issue Jan 16, 2023
A use-case from our code: a response per AppendPush(). It looks like
it's enough to change the test.

Part of #218
oleg-jukovec added a commit that referenced this issue Jan 16, 2023
We need to update an addresses slice under a lock because
we use the slice in ConnectionMulti.getCurrentConnection().

Part of #218
oleg-jukovec added a commit that referenced this issue Jan 16, 2023
We need to use an atomic method to update the atomic value.

Part of #218
oleg-jukovec added a commit that referenced this issue Jan 16, 2023
You need to protect the poolWatcher.unregistered variable to avoid
the data race. It does not look too critical because we don't
expect that performance of poolWatcher.Unregister() is matter
in cuncurrent calls case.

It could also lead to crashes.

Part of #218
oleg-jukovec added a commit that referenced this issue Jan 16, 2023
It is better to use atomic counters.

Part of #218
oleg-jukovec added a commit that referenced this issue Jan 16, 2023
It is better to use atomic counters.

Part of #218
oleg-jukovec added a commit that referenced this issue Jan 16, 2023
Tests execution result may differ due to different timings, so it is
better to test together, rather than instead.

Closes #218
oleg-jukovec added a commit that referenced this issue Jan 16, 2023
oleg-jukovec added a commit that referenced this issue Jan 16, 2023
Tests execution result may differ due to different timings, so it is
better to test together, rather than instead.

Closes #218
oleg-jukovec added a commit that referenced this issue Jan 16, 2023
oleg-jukovec added a commit that referenced this issue Jan 16, 2023
Tests execution result may differ due to different timings, so it is
better to test together, rather than instead.

Closes #218
oleg-jukovec added a commit that referenced this issue Jan 16, 2023
Initial requests should not use a schema because it has not been
loaded yet.

Part of #218
oleg-jukovec added a commit that referenced this issue Jan 16, 2023
We need to block shards to avoid schema usage by concurrent requests.
Now it can be a ping request or a watch request so it does not look
critical. We don't expect many of this requests and such requests
do not use schema at all.

Part of #218
oleg-jukovec added a commit that referenced this issue Jan 16, 2023
We need to use an atomic method to read the atomic value.

Part of #218
oleg-jukovec added a commit that referenced this issue Jan 16, 2023
A use-case from our code: a response per AppendPush(). It looks like
it's enough to change the test.

Part of #218
oleg-jukovec added a commit that referenced this issue Jan 16, 2023
We need to update an addresses slice under a lock because
we use the slice in ConnectionMulti.getCurrentConnection().

Part of #218
oleg-jukovec added a commit that referenced this issue Jan 16, 2023
We need to use an atomic method to update the atomic value.

Part of #218
oleg-jukovec added a commit that referenced this issue Jan 16, 2023
You need to protect the poolWatcher.unregistered variable to avoid
the data race. It does not look too critical because we don't
expect that performance of poolWatcher.Unregister() is matter
in cuncurrent calls case.

It could also lead to crashes.

Part of #218
oleg-jukovec added a commit that referenced this issue Jan 16, 2023
It is better to use atomic counters.

Part of #218
oleg-jukovec added a commit that referenced this issue Jan 16, 2023
It is better to use atomic counters.

Part of #218
oleg-jukovec added a commit that referenced this issue Jan 16, 2023
oleg-jukovec added a commit that referenced this issue Jan 16, 2023
Tests execution result may differ due to different timings, so it is
better to test together, rather than instead.

Closes #218
oleg-jukovec added a commit that referenced this issue Mar 24, 2023
Overview

    The release adds pagination support and wrappers for for the
    crud module.

Breaking changes

    There are no breaking changes in the release.

New features

    Support pagination (#246).

    A Makefile target to test with race detector (#218).

    Support CRUD API (#108).

    An ability to replace a base network connection to a Tarantool
    instance (#265).

Bugfixes

    Several non-critical data race issues (#218).

    ConnectionPool does not properly handle disconnection with
    Opts.Reconnect set (#272).
oleg-jukovec added a commit that referenced this issue Mar 24, 2023
Overview

    The release adds pagination support and wrappers for the
    crud module.

Breaking changes

    There are no breaking changes in the release.

New features

    Support pagination (#246).

    A Makefile target to test with race detector (#218).

    Support CRUD API (#108).

    An ability to replace a base network connection to a Tarantool
    instance (#265).

Bugfixes

    Several non-critical data race issues (#218).

    ConnectionPool does not properly handle disconnection with
    Opts.Reconnect set (#272).
oleg-jukovec added a commit that referenced this issue Mar 24, 2023
Overview

    The release adds pagination support and wrappers for the
    crud module.

Breaking changes

    There are no breaking changes in the release.

New features

    Support pagination (#246).

    A Makefile target to test with race detector (#218).

    Support CRUD API (#108).

    An ability to replace a base network connection to a Tarantool
    instance (#265).

Bugfixes

    Several non-critical data race issues (#218).

    Build on Apple M1 with OpenSSL (#260).

    ConnectionPool does not properly handle disconnection with
    Opts.Reconnect set (#272).
oleg-jukovec added a commit that referenced this issue Apr 27, 2023
Overview

    The release adds pagination support and wrappers for the
    crud module.

Breaking changes

    There are no breaking changes in the release.

New features

    Support pagination (#246).

    A Makefile target to test with race detector (#218).

    Support CRUD API (#108).

    An ability to replace a base network connection to a Tarantool
    instance (#265).

    Missed iterator constant (#285).

Bugfixes

    Several non-critical data race issues (#218).

    Build on Apple M1 with OpenSSL (#260).

    ConnectionPool does not properly handle disconnection with
    Opts.Reconnect set (#272).
oleg-jukovec added a commit that referenced this issue May 18, 2023
Overview

    The release adds pagination support and wrappers for the
    crud module.

Breaking changes

    There are no breaking changes in the release.

New features

    Support pagination (#246).

    A Makefile target to test with race detector (#218).

    Support CRUD API (#108).

    An ability to replace a base network connection to a Tarantool
    instance (#265).

    Missed iterator constant (#285).

Bugfixes

    Several non-critical data race issues (#218).

    Build on Apple M1 with OpenSSL (#260).

    ConnectionPool does not properly handle disconnection with
    Opts.Reconnect set (#272).

    Watcher events loss with a small per-request timeout (#284).

    Connect() panics on concurrent schema update (#278).

    Wrong Ttr setup by Queue.Cfg() (#278).

    Flaky queue/Example_connectionPool (#278).

    Flaky queue/Example_simpleQueueCustomMsgPack (#277).

Other

    queue module version bumped to 1.3.0 (#278).
oleg-jukovec added a commit that referenced this issue May 18, 2023
Overview

    The release adds pagination support and wrappers for the
    crud module.

Breaking changes

    There are no breaking changes in the release.

New features

    Support pagination (#246).

    A Makefile target to test with race detector (#218).

    Support CRUD API (#108).

    An ability to replace a base network connection to a Tarantool
    instance (#265).

    Missed iterator constant (#285).

Bugfixes

    Several non-critical data race issues (#218).

    Build on Apple M1 with OpenSSL (#260).

    ConnectionPool does not properly handle disconnection with
    Opts.Reconnect set (#272).

    Watcher events loss with a small per-request timeout (#284).

    Connect() panics on concurrent schema update (#278).

    Wrong Ttr setup by Queue.Cfg() (#278).

    Flaky queue/Example_connectionPool (#278).

    Flaky queue/Example_simpleQueueCustomMsgPack (#277).

Other

    queue module version bumped to 1.3.0 (#278).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants