aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksey Myasnikov <79263256394@ya.ru>2022-02-16 11:57:08 +0300
committerAleksey Myasnikov <79263256394@ya.ru>2022-02-16 11:57:08 +0300
commit63632f939dd73650749c9c6c8d7e42fa0c32458c (patch)
treeb685810b371e7e5592157a983c2bf32825c7bff1
parent50c7a8a430049bcf5a1051b53221ba67d9836079 (diff)
downloadydb-63632f939dd73650749c9c6c8d7e42fa0c32458c.tar.gz
KIKIMR-13205 update ydb-go-sdk to v3.10.0
KIKIMR-13205 update ydb-go-sdk to v3.10.0 ref:455186e32a851fc34d2668e4813042a8be09429b
-rw-r--r--build/rules/go/vendor.policy1
-rw-r--r--ydb/docs/ru/core/reference/ydb-sdk/recipes/debug/_includes/logs/go.md13
-rw-r--r--ydb/docs/ru/core/reference/ydb-sdk/recipes/debug/_includes/logs/go_appendix.md0
-rw-r--r--ydb/docs/ru/core/reference/ydb-sdk/recipes/retry/_includes/go.md61
-rw-r--r--ydb/docs/ru/core/reference/ydb-sdk/recipes/retry/index.md22
-rw-r--r--ydb/docs/ru/core/reference/ydb-sdk/recipes/session_pool_limit.md2
-rw-r--r--ydb/docs/ru/core/reference/ydb-sdk/recipes/session_pool_limit/_includes/go.md (renamed from ydb/docs/ru/core/reference/ydb-sdk/recipes/_includes/session_pool_limit/go.md)0
-rw-r--r--ydb/docs/ru/core/reference/ydb-sdk/recipes/session_pool_limit/index.md (renamed from ydb/docs/ru/core/reference/ydb-sdk/recipes/_includes/session_pool_limit.md)8
-rw-r--r--ydb/docs/ru/core/reference/ydb-sdk/recipes/toc_i.yaml4
9 files changed, 98 insertions, 13 deletions
diff --git a/build/rules/go/vendor.policy b/build/rules/go/vendor.policy
index 5f8f72a5f6f..6af7b285982 100644
--- a/build/rules/go/vendor.policy
+++ b/build/rules/go/vendor.policy
@@ -811,7 +811,6 @@ ALLOW .* -> vendor/github.com/ydb-platform/ydb-go-sdk-prometheus
ALLOW .* -> vendor/github.com/ydb-platform/ydb-go-sdk-zap
ALLOW .* -> vendor/github.com/ydb-platform/ydb-go-sdk-zerolog
ALLOW .* -> vendor/github.com/ydb-platform/ydb-go-sdk-opentracing
-ALLOW .* -> vendor/github.com/ydb-platform/ydb-go-sdk-opentracing/internal/cmd/bench
ALLOW .* -> vendor/github.com/ydb-platform/ydb-go-yc-metadata
# CONTRIB-2099
diff --git a/ydb/docs/ru/core/reference/ydb-sdk/recipes/debug/_includes/logs/go.md b/ydb/docs/ru/core/reference/ydb-sdk/recipes/debug/_includes/logs/go.md
index ba7260180e3..c69f919dd7c 100644
--- a/ydb/docs/ru/core/reference/ydb-sdk/recipes/debug/_includes/logs/go.md
+++ b/ydb/docs/ru/core/reference/ydb-sdk/recipes/debug/_includes/logs/go.md
@@ -1,7 +1,7 @@
Есть несколько способов включить логи в приложении, использующем `ydb-go-sdk`:
-1. Выставить переменную окружения `YDB_LOG_SEVERITY_LEVEL=info` (доступные значения `trace`, `debug`, `info`, `warn`, `error`, `fatal`, `quiet`, по умолчанию `quiet`).
- Данная переменная окружения включает встроенный в `ydb-go-sdk` логгер (синхронный, неблочный) с выводом в стандартный поток вывода.
-2. {% cut "Подключить сторонний логгер `go.uber.org/zap`" %}
+* Выставить переменную окружения `YDB_LOG_SEVERITY_LEVEL=info` (доступные значения `trace`, `debug`, `info`, `warn`, `error`, `fatal`, `quiet`, по умолчанию `quiet`).
+ Данная переменная окружения включает встроенный в `ydb-go-sdk` логгер (синхронный, неблочный) с выводом в стандартный поток вывода.
+* {% cut "Подключить сторонний логгер `go.uber.org/zap`" %}
```go
package main
@@ -40,7 +40,7 @@
}
```
{% endcut %}
-3. {% cut "Подключить сторонний логгер `github.com/rs/zerolog`" %}
+* {% cut "Подключить сторонний логгер `github.com/rs/zerolog`" %}
```go
package main
@@ -80,4 +80,7 @@
}
```
{% endcut %}
-4. Реализовать собственный пакет логгирования на основе пакета трассировки `github.com/ydb-platform/ydb-go-sdk/v3/trace`
+
+{% include [overlay](go_appendix.md) %}
+
+* Реализовать собственный пакет логгирования на основе пакета трассировки `github.com/ydb-platform/ydb-go-sdk/v3/trace`
diff --git a/ydb/docs/ru/core/reference/ydb-sdk/recipes/debug/_includes/logs/go_appendix.md b/ydb/docs/ru/core/reference/ydb-sdk/recipes/debug/_includes/logs/go_appendix.md
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/ydb/docs/ru/core/reference/ydb-sdk/recipes/debug/_includes/logs/go_appendix.md
diff --git a/ydb/docs/ru/core/reference/ydb-sdk/recipes/retry/_includes/go.md b/ydb/docs/ru/core/reference/ydb-sdk/recipes/retry/_includes/go.md
new file mode 100644
index 00000000000..e84dac17748
--- /dev/null
+++ b/ydb/docs/ru/core/reference/ydb-sdk/recipes/retry/_includes/go.md
@@ -0,0 +1,61 @@
+В `Ydb Go SDK` корректная обработка ошибок закреплена в нескольких программных интерфейсах:
+* Основная логика обработки ошибок реализуется функцией-помощником `retry.Retry`
+ Подробности выполнения повторных максимально скрыты.
+ Пользователь может влиять на логику работы функции `retry.Retry` двумя способами:
+ - через контекст (можно устанавливать deadline и cancel)
+ - через флаг идемпотентности операции `retry.WithIdempotent()`. По умолчанию операция считается неидемпотентной.
+
+ Пользователь передает свою функцию в `retry.Retry`, которая по своей сигнатуре должна возвращать ошибку.
+ В случае, если из пользовательской функции вернулся `nil`, то повторные запросы прекращаются.
+ В случае, если из пользовательской функции вернулась ошибка, `Ydb Go SDK` пытается идентифицировать эту ошибку и в зависимости от нее выполняет повторные попытки.
+
+ {% cut "Пример кода, использующего функцию `retry.Retry`:" %}
+ ```go
+ package main
+
+ import (
+ "context"
+ "time"
+
+ "github.com/ydb-platform/ydb-go-sdk/v3"
+ "github.com/ydb-platform/ydb-go-sdk/v3/retry"
+ )
+
+ func main() {
+ db, err := ydb.New(
+ ctx,
+ ...
+ )
+ if err != nil {
+ panic(err)
+ }
+ defer func() {
+ _ = db.Close(ctx)
+ }()
+ var cancel context.CancelFunc
+ // fix deadline for retries
+ ctx, cancel := context.WithTimeout(ctx, time.Second)
+ err = retry.Retry(
+ ctx,
+ func(ctx context.Context) error {
+ whoAmI, err := db.Discovery().WhoAmI(ctx)
+ if err != nil {
+ return err
+ }
+ fmt.Println(whoAmI)
+ },
+ retry.WithIdempotent(),
+ retry.WithTrace(trace.Trace{}),
+ retry.WithID("my high-level call"),
+ )
+ if err != nil {
+ panic(err)
+ }
+ }
+ ```
+ {% endcut %}
+* Сервис для работы с табличными запросами `db.Table()` сразу предоставляет программный интерфейс `table.Client`, который использует пакет `retry`, а также следит за временем жизни сессий `Ydb`.
+ Пользователю доступны две публичных функции: `db.Table().Do(ctx, op)` (`op` предоставляет сессию) и `db.Table().DoTx(ctx, op)` (`op` предоставляет транзакцию).
+ Как и в предыдущем случае пользователь может влиять на логику выполнения повторных запросов через контекст и признак идемпотентности, а `Ydb Go SDK` интерпретирует возвращаемые из `op` ошибки.
+* Запросы к остальным сервисам `Ydb` (`db.Scripting()`, `db.Scheme()`, `db.Coordination()`, `db.Ratelimiter()`, `db.Discovery()`) также используют внутри себя функцию `retry.Retry` для выполнения повторных запросов.
+
diff --git a/ydb/docs/ru/core/reference/ydb-sdk/recipes/retry/index.md b/ydb/docs/ru/core/reference/ydb-sdk/recipes/retry/index.md
new file mode 100644
index 00000000000..2d336da3aa1
--- /dev/null
+++ b/ydb/docs/ru/core/reference/ydb-sdk/recipes/retry/index.md
@@ -0,0 +1,22 @@
+# Выполнение повторных попыток
+
+{% include [work in progress message](../_includes/addition.md) %}
+
+`Ydb` является распределенной СУБД с автоматическим масштабированием под нагрузку.
+На серверной стороне могут проводиться работы, серверные стойки или целые дата-центры могут быть временно отключены.
+В связи с этим допускаются некоторые ошибки при работе с `Ydb`.
+В зависимости от типа ошибки следует по разному реагировать на них.
+`Ydb SDK` для обеспечения высокой доступности предоставляют встроенные средства выполнения повторных попыток,
+в которых учтены типы ошибок и закреплена реакция на них.
+
+Ниже приведены примеры кода использования встроенных в `Ydb SDK` средств выполнения повторных попыток:
+
+{% list tabs %}
+
+- Go
+
+
+ {% include [go.md](_includes/go.md) %}
+
+
+{% endlist %}
diff --git a/ydb/docs/ru/core/reference/ydb-sdk/recipes/session_pool_limit.md b/ydb/docs/ru/core/reference/ydb-sdk/recipes/session_pool_limit.md
deleted file mode 100644
index 6f3b0c252df..00000000000
--- a/ydb/docs/ru/core/reference/ydb-sdk/recipes/session_pool_limit.md
+++ /dev/null
@@ -1,2 +0,0 @@
-
-{% include [index.md](_includes/session_pool_limit.md) %}
diff --git a/ydb/docs/ru/core/reference/ydb-sdk/recipes/_includes/session_pool_limit/go.md b/ydb/docs/ru/core/reference/ydb-sdk/recipes/session_pool_limit/_includes/go.md
index ce1e15b6f3d..ce1e15b6f3d 100644
--- a/ydb/docs/ru/core/reference/ydb-sdk/recipes/_includes/session_pool_limit/go.md
+++ b/ydb/docs/ru/core/reference/ydb-sdk/recipes/session_pool_limit/_includes/go.md
diff --git a/ydb/docs/ru/core/reference/ydb-sdk/recipes/_includes/session_pool_limit.md b/ydb/docs/ru/core/reference/ydb-sdk/recipes/session_pool_limit/index.md
index d0a15ff3693..b8b2f00c935 100644
--- a/ydb/docs/ru/core/reference/ydb-sdk/recipes/_includes/session_pool_limit.md
+++ b/ydb/docs/ru/core/reference/ydb-sdk/recipes/session_pool_limit/index.md
@@ -1,11 +1,11 @@
# Установить размер пула сессий
-{% include [work in progress message](addition.md) %}
+{% include [work in progress message](../_includes/addition.md) %}
-Размер пула сессий на клиенте влияет на потребление ресурсов (память, процессор) на серверной стороне YDB.
+Размер пула сессий на клиенте влияет на потребление ресурсов (память, процессор) на серверной стороне YDB.
Простая математика: если `1000` клиентов одной базы данных имеют по `1000` сессий, то на серверной стороне создается `100000` акторов (воркеров, исполнителей сессий). Если не лимитировать количество сессий на клиенте, то можно получить "задумчивый" кластер в полу-аварийном состоянии.
По умолчанию в `Ydb SDK` установлен лимит в `50` сессий.
-Хорошая рекомендация - устаналивать лимит на количество сессий на клиенте в минимальное-необходимое для штатной работы клиентского приложения. Следует иметь в виду, что сессия однопоточная что на серверной стороне, что на клиентской. Соответственно, если для расчетной нагрузки приложению необходимо выполнять `1000` одновременных запросов (`inflight`) в `Ydb` - значит следует установить лимит в `1000` сессий.
+Хорошая рекомендация - устаналивать лимит на количество сессий на клиенте в минимальное-необходимое для штатной работы клиентского приложения. Следует иметь в виду, что сессия однопоточная что на серверной стороне, что на клиентской. Соответственно, если для расчетной нагрузки приложению необходимо выполнять `1000` одновременных запросов (`inflight`) в `Ydb` - значит следует установить лимит в `1000` сессий.
Тут надо отличать расчетный `RPS` (requests per second, запросов в секунду) и `inflight`. В первом случае это общее колличество выполненных запросов к `Ydb` за `1` секунду. Например, для `RPS`=`10000` и средним `latency` (задержка исполнения запроса) в `100`мс достаточно установить лимит в `1000` сессий. То есть каждая сессия за расчетную секунду выполнит в среднем `10` последовательных запросов.
Ниже приведены примеры кода установки лимита на пул сессий в разных `Ydb SDK`
@@ -15,7 +15,7 @@
- Go
- {% include [go.md](session_pool_limit/go.md) %}
+ {% include [go.md](_includes/go.md) %}
{% endlist %}
diff --git a/ydb/docs/ru/core/reference/ydb-sdk/recipes/toc_i.yaml b/ydb/docs/ru/core/reference/ydb-sdk/recipes/toc_i.yaml
index a24e689af6e..e9a0b6ffb45 100644
--- a/ydb/docs/ru/core/reference/ydb-sdk/recipes/toc_i.yaml
+++ b/ydb/docs/ru/core/reference/ydb-sdk/recipes/toc_i.yaml
@@ -5,8 +5,10 @@ items:
include: { mode: link, path: auth/toc_p.yaml }
- name: Балансировка
include: { mode: link, path: balancing/toc_p.yaml }
+- name: Выполнение повторных запросов
+ href: retry/index.md
- name: Диагностика проблем
include: { mode: link, path: debug/toc_p.yaml }
- name: Установить размер пула сессий
- href: session_pool_limit.md
+ href: session_pool_limit/index.md