ydb-platform / ydb-php-sdk

Apache License 2.0
26 stars 15 forks source link

bug: YDB_400100 BAD_SESSION #89

Closed gfh31fgh2 closed 1 year ago

gfh31fgh2 commented 1 year ago

Bug Report

YDB PHP SDK version: 1.7.0 1.5.6 - здесь нет таких проблем

Environment ubuntu18 JWT

Current behavior:

YDB Table BeginTransaction (YDB_400100 BAD_SESSION): Session not found: ydb://session/3?node_id=11111&id=xxxxxxxxI=

Expected behavior:

php working more than 12 hours

Steps to reproduce:

php working more than 12 hours

Related code:

https://github.com/gfh31fgh2/ydb-php-simple-driver

gfh31fgh2 commented 1 year ago

пять и больше ретраев никак не меняют ситуацию

ilyakharev commented 1 year ago

В старых версих ретраи работали с ошибками, поэтому мы их поправили и их нужно вызывать явно. Для использования кода с транзакцией используйте:

$ydb->table()->retryTransaction(function(Session $session){
//Тут ваш код
}, $idempotent);

Где $idempotent признак идемпотентности транзакции (по умолчанию - false). Также рекомендуется сделать транзакции имдепотентными, тогда ретраер будет работать лучше

Рекомендуем использовать версию v1.8.0

gfh31fgh2 commented 1 year ago

обновились на 1.8.0 - получаем те же ошибки

gfh31fgh2 commented 1 year ago

Все еще остаются ошибки

ilyakharev commented 1 year ago

Делать prepare и вызывать execute в prepare statement необходимо на одной сессии, то есть внутри одного ретраера. Пример использования:

$result = $table->retryTransaction(function (Session $session) {
    $prepare = $session->prepare($yql);
    return $prepare->execute($data);
});
gfh31fgh2 commented 1 year ago

речь в issue идет о 1.7.0 - так что это в любом случае bug тег как и про 1.8.0 а 1.8.1 только сейчас будем тестировать, если хотите сменить тег - можно создать новый issue с версией 1.8.1

ps: вместо retrySession должен быть retryTransaction ps2: а разве доп параметр по retry вторым не нужен?

ilyakharev commented 1 year ago

вместе retrySession должен быть retryTransaction Исправил

а разве доп параметр по retry вторым не нужен? Флаг идемпотентности и параметры ретраера в данном примере используются по умолчанию

gfh31fgh2 commented 1 year ago

1.8.1 с тем кодом что вы указали - ошибка осталась

gfh31fgh2 commented 1 year ago

Косяк в команде $output = $rsa->sign($input);

который иногда выполянется около 1 минуты

https://github.com/ydb-platform/ydb-php-sdk/blob/72d39a41dc7441b5e6c637985bd9cab2ad2a50b1/src/Jwt/Jwt.php#L115 - при заходе в ELSE

rekby commented 1 year ago

Исходная проблема решилась.

Сейчас осталась проблема со скоростью подписи токена, это будет делаться соседней задачей: https://github.com/ydb-platform/ydb-php-sdk/issues/102

Чтобы сохранять понятность истории.

gfh31fgh2 commented 1 year ago

да, ретрай решает отчасти эту проблему