-
Notifications
You must be signed in to change notification settings - Fork 14
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
Fix goroutine leaking #103
Conversation
2. fixed problems for sql and sqlx
2. fixed data race with sqlmock
2. Added Closed for transaction to catch when transaction really closed. 3. Fix gorm goroutine leak
2. Fixed linters error
f2121c3
to
bfcce81
Compare
2. Fixed linters error
970c136
to
0b5e447
Compare
8e08417
to
2fdd8e6
Compare
19a2bed
to
ab988b0
Compare
@@ -77,7 +88,7 @@ func (t *Transaction) Commit(ctx context.Context) error { | |||
return nil | |||
} | |||
|
|||
defer t.deactivate() | |||
defer t.isClosed.Close() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
А что будет, если будет ошибка при релизе сейвпоинта?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
BEGIN;
SAVEPOINT SP1;
SAVEPOINT SP2;
RELEASE SAVEPOINT SP2; -- return err
ROLLBACK TO SAVEPOINT SP1; -- т.к. будет вверх возвращаться err
-- Если err перехватят, то RELEASE SAVEPOINT SP1 в случае если ошибка и не закрылся коннект.
ROLLBACK; -- т.к. будет вверх возвращаться err и не закрылся коннект
-- Если err перехватят, то успешный COMMIT и не закрылся коннект.
Чуть более правильным был бы подход, когда мы создаем отдельный объект на вложенную транзакцию, однако я не готов делать это в текущем PR, но для V2 можно сделать.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Вот я как раз про закрытый коннект, сейчас кажется не отслеживается, если коннект закроется.
Так-то ПР хуже не делает точно, просто набрасываю какие еще есть кейсы, в которых может остаться горутина
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Обсудили в ЛС, вопросов нет
A goroutine leak occurs when the TRM is used in crons or worker, and the main context lives for a long time.
To solve this problem before PR, you can set setttings.Cancelable equals true.