From 3cae99d351332fb1ba1379c4147b9c7b93ede7c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9D=D0=B8=D0=BA=D0=BE=D0=BB=D0=B0=D0=B9=20=D0=91=D0=B5?= =?UTF-8?q?=D0=BB=D0=BE=D0=BD=D0=BE=D0=B3=D0=BE=D0=B2?= Date: Mon, 12 Jan 2026 18:37:34 +0300 Subject: [PATCH] doc(examples): add single-node connection example Closes #29 --- .github/workflows/release.yml | 2 +- .github/workflows/snapshot.yml | 2 +- .gitignore | 1 + documentation/README.md | 100 +++++++++++++--- documentation/README_EN.md | 98 ++++++++++++++++ .../assets/drawio/client/balancer.drawio | 0 .../drawio/client/connection-pool.drawio | 0 .../client/distributing-round-robin.drawio | 0 .../drawio/client/few-connection-box.drawio | 0 .../assets/drawio/client/heartbeat-1.drawio | 0 .../assets/drawio/client/heartbeat.drawio | 0 .../drawio/client/high-level-arch.drawio | 0 .../client/instance-connection-group.drawio | 0 .../assets/drawio/client/round-robin.drawio | 0 .../assets/images/client/few-nodes-crud.svg | 0 .../assets/images/client/few-replicas-box.svg | 0 documentation/{docs => doc-src}/index.en.md | 0 documentation/{docs => doc-src}/index.md | 0 ...ngleInstanceConnectionAbstractExample.java | 51 ++++++++ ...tanceConnectionCartridgeDriverExample.java | 54 +++++++++ ...lSingleInstanceConnectionTJSDKExample.java | 60 ++++++++++ .../utils/TarantoolSingleNodeConfigUtils.java | 103 ++++++++++++++++ .../pages}/client/arch/balancer.en.md | 16 +-- .../pages}/client/arch/balancer.md | 16 +-- .../pages}/client/arch/call.en.md | 2 +- .../pages}/client/arch/call.md | 2 +- .../pages}/client/arch/connection-pool.en.md | 12 +- .../pages}/client/arch/connection-pool.md | 12 +- .../arch/connection-to-multiple-nodes.en.md | 14 +-- .../arch/connection-to-multiple-nodes.md | 14 +-- .../client/arch/exception-handling.en.md | 2 +- .../pages}/client/arch/exception-handling.md | 2 +- .../pages}/client/arch/heartbeat.en.md | 16 +-- .../pages}/client/arch/heartbeat.md | 16 +-- .../pages}/client/arch/high-level-arch.en.md | 20 ++-- .../pages}/client/arch/high-level-arch.md | 21 ++-- .../pages}/client/arch/index.en.md | 0 .../pages}/client/arch/index.md | 0 .../arch/instance-connection-group.en.md | 8 +- .../client/arch/instance-connection-group.md | 8 +- .../client/arch/tuple_pojo_mapping.en.md | 2 +- .../pages}/client/arch/tuple_pojo_mapping.md | 2 +- .../client/examples/connection/index.en.md | 7 ++ .../pages/client/examples/connection/index.md | 7 ++ .../examples/connection/single-node.en.md | 34 ++++++ .../client/examples/connection/single-node.md | 33 ++++++ .../doc-src/pages/client/examples/index.en.md | 12 ++ .../doc-src/pages/client/examples/index.md | 12 ++ .../pages}/client/index.en.md | 0 .../pages}/client/index.md | 0 .../pages}/index.en.md | 0 .../documentation => doc-src/pages}/index.md | 2 +- .../pages}/spring-data/configuration.en.md | 0 .../pages}/spring-data/configuration.md | 0 .../pages}/spring-data/derived-methods.en.md | 0 .../pages}/spring-data/derived-methods.md | 0 .../pages}/spring-data/index.en.md | 0 .../pages}/spring-data/index.md | 0 .../spring-data/page-slice-pageable.en.md | 0 .../pages}/spring-data/page-slice-pageable.md | 0 .../pages}/spring-data/query-lua.en.md | 0 .../pages}/spring-data/query-lua.md | 0 .../pages}/spring-data/repository.en.md | 0 .../pages}/spring-data/repository.md | 0 .../pages}/spring-data/scroll-api.en.md | 0 .../pages}/spring-data/scroll-api.md | 0 .../pages}/spring-data/sort.en.md | 0 .../pages}/spring-data/sort.md | 0 .../pages}/testcontainers/index.en.md | 0 .../pages}/testcontainers/index.md | 0 .../pages}/testcontainers/single/index.en.md | 0 .../pages}/testcontainers/single/index.md | 0 .../single-node-testcontainers-arch.en.md | 4 +- .../single/single-node-testcontainers-arch.md | 4 +- ...testcontainers-standard-impl-example.en.md | 12 +- ...de-testcontainers-standard-impl-example.md | 12 +- ...le-node-testcontainers-standard-impl.en.md | 2 +- ...ingle-node-testcontainers-standard-impl.md | 2 +- .../pages}/testcontainers/tdb/index.en.md | 0 .../pages}/testcontainers/tdb/index.md | 0 .../tdb/tdb-cluster-testcontainers-arch.en.md | 0 .../tdb/tdb-cluster-testcontainers-arch.md | 0 ...testcontainers-standard-impl-example.en.md | 0 ...er-testcontainers-standard-impl-example.md | 0 ...cluster-testcontainers-standard-impl.en.md | 2 +- ...b2-cluster-testcontainers-standard-impl.md | 2 +- .../pages}/testcontainers/tqe/index.en.md | 0 .../pages}/testcontainers/tqe/index.md | 0 .../testcontainers/tqe/tqe-cluster-arch.en.md | 0 .../testcontainers/tqe/tqe-cluster-arch.md | 0 .../tqe/tqe-cluster-example.en.md | 0 .../testcontainers/tqe/tqe-cluster-example.md | 0 documentation/mkdocs.yml | 86 ++++++++------ documentation/pom.xml | 111 ++++++++++++++++++ documentation/readme-images/navigation.png | Bin 0 -> 117782 bytes documentation/readme-images/sections.png | Bin 0 -> 49758 bytes documentation/requirements.txt | 2 +- pom.xml | 1 + 98 files changed, 836 insertions(+), 167 deletions(-) create mode 100644 documentation/README_EN.md rename documentation/{docs => doc-src}/assets/drawio/client/balancer.drawio (100%) rename documentation/{docs => doc-src}/assets/drawio/client/connection-pool.drawio (100%) rename documentation/{docs => doc-src}/assets/drawio/client/distributing-round-robin.drawio (100%) rename documentation/{docs => doc-src}/assets/drawio/client/few-connection-box.drawio (100%) rename documentation/{docs => doc-src}/assets/drawio/client/heartbeat-1.drawio (100%) rename documentation/{docs => doc-src}/assets/drawio/client/heartbeat.drawio (100%) rename documentation/{docs => doc-src}/assets/drawio/client/high-level-arch.drawio (100%) rename documentation/{docs => doc-src}/assets/drawio/client/instance-connection-group.drawio (100%) rename documentation/{docs => doc-src}/assets/drawio/client/round-robin.drawio (100%) rename documentation/{docs => doc-src}/assets/images/client/few-nodes-crud.svg (100%) rename documentation/{docs => doc-src}/assets/images/client/few-replicas-box.svg (100%) rename documentation/{docs => doc-src}/index.en.md (100%) rename documentation/{docs => doc-src}/index.md (100%) create mode 100644 documentation/doc-src/java/src/client/TarantoolSingleInstanceConnectionAbstractExample.java create mode 100644 documentation/doc-src/java/src/client/TarantoolSingleInstanceConnectionCartridgeDriverExample.java create mode 100644 documentation/doc-src/java/src/client/TarantoolSingleInstanceConnectionTJSDKExample.java create mode 100644 documentation/doc-src/java/src/testcontainers/utils/TarantoolSingleNodeConfigUtils.java rename documentation/{docs/documentation => doc-src/pages}/client/arch/balancer.en.md (87%) rename documentation/{docs/documentation => doc-src/pages}/client/arch/balancer.md (92%) rename documentation/{docs/documentation => doc-src/pages}/client/arch/call.en.md (97%) rename documentation/{docs/documentation => doc-src/pages}/client/arch/call.md (96%) rename documentation/{docs/documentation => doc-src/pages}/client/arch/connection-pool.en.md (72%) rename documentation/{docs/documentation => doc-src/pages}/client/arch/connection-pool.md (81%) rename documentation/{docs/documentation => doc-src/pages}/client/arch/connection-to-multiple-nodes.en.md (93%) rename documentation/{docs/documentation => doc-src/pages}/client/arch/connection-to-multiple-nodes.md (95%) rename documentation/{docs/documentation => doc-src/pages}/client/arch/exception-handling.en.md (99%) rename documentation/{docs/documentation => doc-src/pages}/client/arch/exception-handling.md (99%) rename documentation/{docs/documentation => doc-src/pages}/client/arch/heartbeat.en.md (86%) rename documentation/{docs/documentation => doc-src/pages}/client/arch/heartbeat.md (88%) rename documentation/{docs/documentation => doc-src/pages}/client/arch/high-level-arch.en.md (71%) rename documentation/{docs/documentation => doc-src/pages}/client/arch/high-level-arch.md (82%) rename documentation/{docs/documentation => doc-src/pages}/client/arch/index.en.md (100%) rename documentation/{docs/documentation => doc-src/pages}/client/arch/index.md (100%) rename documentation/{docs/documentation => doc-src/pages}/client/arch/instance-connection-group.en.md (93%) rename documentation/{docs/documentation => doc-src/pages}/client/arch/instance-connection-group.md (94%) rename documentation/{docs/documentation => doc-src/pages}/client/arch/tuple_pojo_mapping.en.md (99%) rename documentation/{docs/documentation => doc-src/pages}/client/arch/tuple_pojo_mapping.md (99%) create mode 100644 documentation/doc-src/pages/client/examples/connection/index.en.md create mode 100644 documentation/doc-src/pages/client/examples/connection/index.md create mode 100644 documentation/doc-src/pages/client/examples/connection/single-node.en.md create mode 100644 documentation/doc-src/pages/client/examples/connection/single-node.md create mode 100644 documentation/doc-src/pages/client/examples/index.en.md create mode 100644 documentation/doc-src/pages/client/examples/index.md rename documentation/{docs/documentation => doc-src/pages}/client/index.en.md (100%) rename documentation/{docs/documentation => doc-src/pages}/client/index.md (100%) rename documentation/{docs/documentation => doc-src/pages}/index.en.md (100%) rename documentation/{docs/documentation => doc-src/pages}/index.md (79%) rename documentation/{docs/documentation => doc-src/pages}/spring-data/configuration.en.md (100%) rename documentation/{docs/documentation => doc-src/pages}/spring-data/configuration.md (100%) rename documentation/{docs/documentation => doc-src/pages}/spring-data/derived-methods.en.md (100%) rename documentation/{docs/documentation => doc-src/pages}/spring-data/derived-methods.md (100%) rename documentation/{docs/documentation => doc-src/pages}/spring-data/index.en.md (100%) rename documentation/{docs/documentation => doc-src/pages}/spring-data/index.md (100%) rename documentation/{docs/documentation => doc-src/pages}/spring-data/page-slice-pageable.en.md (100%) rename documentation/{docs/documentation => doc-src/pages}/spring-data/page-slice-pageable.md (100%) rename documentation/{docs/documentation => doc-src/pages}/spring-data/query-lua.en.md (100%) rename documentation/{docs/documentation => doc-src/pages}/spring-data/query-lua.md (100%) rename documentation/{docs/documentation => doc-src/pages}/spring-data/repository.en.md (100%) rename documentation/{docs/documentation => doc-src/pages}/spring-data/repository.md (100%) rename documentation/{docs/documentation => doc-src/pages}/spring-data/scroll-api.en.md (100%) rename documentation/{docs/documentation => doc-src/pages}/spring-data/scroll-api.md (100%) rename documentation/{docs/documentation => doc-src/pages}/spring-data/sort.en.md (100%) rename documentation/{docs/documentation => doc-src/pages}/spring-data/sort.md (100%) rename documentation/{docs/documentation => doc-src/pages}/testcontainers/index.en.md (100%) rename documentation/{docs/documentation => doc-src/pages}/testcontainers/index.md (100%) rename documentation/{docs/documentation => doc-src/pages}/testcontainers/single/index.en.md (100%) rename documentation/{docs/documentation => doc-src/pages}/testcontainers/single/index.md (100%) rename documentation/{docs/documentation => doc-src/pages}/testcontainers/single/single-node-testcontainers-arch.en.md (99%) rename documentation/{docs/documentation => doc-src/pages}/testcontainers/single/single-node-testcontainers-arch.md (99%) rename documentation/{docs/documentation => doc-src/pages}/testcontainers/single/single-node-testcontainers-standard-impl-example.en.md (97%) rename documentation/{docs/documentation => doc-src/pages}/testcontainers/single/single-node-testcontainers-standard-impl-example.md (96%) rename documentation/{docs/documentation => doc-src/pages}/testcontainers/single/single-node-testcontainers-standard-impl.en.md (97%) rename documentation/{docs/documentation => doc-src/pages}/testcontainers/single/single-node-testcontainers-standard-impl.md (98%) rename documentation/{docs/documentation => doc-src/pages}/testcontainers/tdb/index.en.md (100%) rename documentation/{docs/documentation => doc-src/pages}/testcontainers/tdb/index.md (100%) rename documentation/{docs/documentation => doc-src/pages}/testcontainers/tdb/tdb-cluster-testcontainers-arch.en.md (100%) rename documentation/{docs/documentation => doc-src/pages}/testcontainers/tdb/tdb-cluster-testcontainers-arch.md (100%) rename documentation/{docs/documentation => doc-src/pages}/testcontainers/tdb/tdb2-cluster-testcontainers-standard-impl-example.en.md (100%) rename documentation/{docs/documentation => doc-src/pages}/testcontainers/tdb/tdb2-cluster-testcontainers-standard-impl-example.md (100%) rename documentation/{docs/documentation => doc-src/pages}/testcontainers/tdb/tdb2-cluster-testcontainers-standard-impl.en.md (98%) rename documentation/{docs/documentation => doc-src/pages}/testcontainers/tdb/tdb2-cluster-testcontainers-standard-impl.md (98%) rename documentation/{docs/documentation => doc-src/pages}/testcontainers/tqe/index.en.md (100%) rename documentation/{docs/documentation => doc-src/pages}/testcontainers/tqe/index.md (100%) rename documentation/{docs/documentation => doc-src/pages}/testcontainers/tqe/tqe-cluster-arch.en.md (100%) rename documentation/{docs/documentation => doc-src/pages}/testcontainers/tqe/tqe-cluster-arch.md (100%) rename documentation/{docs/documentation => doc-src/pages}/testcontainers/tqe/tqe-cluster-example.en.md (100%) rename documentation/{docs/documentation => doc-src/pages}/testcontainers/tqe/tqe-cluster-example.md (100%) create mode 100644 documentation/pom.xml create mode 100644 documentation/readme-images/navigation.png create mode 100644 documentation/readme-images/sections.png diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7352454..ed36483 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -34,7 +34,7 @@ jobs: - name: Publish to Maven Central run: | - ./mvnw -B clean deploy -PsonatypeRelease -DskipTests -pl '!jacoco-coverage-aggregate-report' + ./mvnw -B clean deploy -PsonatypeRelease -DskipTests -pl '!jacoco-coverage-aggregate-report,!documentation' env: MAVEN_USERNAME: ${{ secrets.MAVEN_CENTRAL_USER }} MAVEN_TOKEN: ${{ secrets.MAVEN_CENTRAL_TOKEN }} diff --git a/.github/workflows/snapshot.yml b/.github/workflows/snapshot.yml index af6abeb..334e124 100644 --- a/.github/workflows/snapshot.yml +++ b/.github/workflows/snapshot.yml @@ -27,7 +27,7 @@ jobs: - name: Publish Snapshot to Maven Central run: | - ./mvnw -B clean deploy -PsonatypeSnapshot -DskipTests -pl '!jacoco-coverage-aggregate-report' + ./mvnw -B clean deploy -PsonatypeSnapshot -DskipTests -pl '!jacoco-coverage-aggregate-report,!documentation' env: MAVEN_USERNAME: ${{ secrets.MAVEN_CENTRAL_USER }} MAVEN_TOKEN: ${{ secrets.MAVEN_CENTRAL_TOKEN }} diff --git a/.gitignore b/.gitignore index 3b1e9ee..3ce9a8a 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,4 @@ workbench.xmi .factorypath documentation/venv documentation/site +documentation/target diff --git a/documentation/README.md b/documentation/README.md index 3e526b3..588db08 100644 --- a/documentation/README.md +++ b/documentation/README.md @@ -1,33 +1,99 @@ -## Documentation +## Документация -### Local Build +### Локальная сборка документации -To deploy the site locally on the current branch/tag: +Чтобы собрать документацию локально на текущей ветке/теге: -1. ```bash +1. Перейдите на ветку/тег и инициализируйте python-окружение: + + ```shell git checkout - ``` -2. ```bash cd documentation - ``` -3. ```bash python3 -m venv venv - ``` -4. ```bash source venv/bin/activate - ``` -5. ```bash pip install -r requirements.txt ``` -6. ```bash - mkdocs serve + +2. Соберите или запустите сайт: + + ```shell + mkdocs build + ``` + + ```shell + mkdocs serve ``` -### Schemas +### Интернационализация + +На данный момент документация поддерживает два языка: + +- Русский 🇷🇺 - по умолчанию +- Английский 🇺🇸 + +### Правила написания новых страниц и разделов + +#### Раздел + +`Раздел` - группа страниц, описывающая одну конкретную тему. Раздел может включать подразделы. +Раздел оформаляется в отдельной директории. Каждый раздел обязан иметь страницу с именем `index.md`, +в которой описывается тематика раздела. + +`Страница` - страница с произвольным именем и расширением `.md`, написанная на `markdown`. + +При добавлении страницы и раздела, добавьте их в секцию `nav` в файле `mkdocs.yml`: -Documentation supports `.drawio` format schemas. Place your schema in the `assets` directory. In the markdown text, -refer to the schema as a regular markdown image. The path to the image must be relative: +Пример раздела: + +> ![alt](readme-images/sections.png) + +Пример оформленной навигации для этого раздела: + +> ![alt](readme-images/navigation.png) + +### Схемы + +#### Plantuml + +Документация поддерживает рендеринг `plantuml-диаграмм`. Для того чтобы добавить схему plantuml в +текст страницы `markdown` используйте блок кода с расширением `puml`: + +> \`\`\`puml +> +> @startuml +> +> Alice -> Bob: test +> +> @enduml +> +> \`\`\` + +#### Drawio + +Документация поддерживает отображение схем, написанных в `drawio` (файлы с расширением `.drawio`). +Необходимо добавить схему в директорию `assets`. В тексте markdown добавьте схему также как +добавляете обыное изображение, используя относительный путь: ```markdown ![](../../../../assets//schema.drawio) ``` + +### Code Snippets + +Документация поддерживает добавление в текст markdown включение текста из других файлов (snippets). +Для того, чтобы добавить snippet в текст markdown изучите +документацию [расширения](https://facelessuser.github.io/pymdown-extensions/extensions/snippets/). +Путь к файлам, которые будут включены вычисляется относительно директории +`docs/documentation/examples`. + +#### Дополнительные возможности + +Также поддерживаются следующие дополнения: + +- Использование [emoji](https://squidfunk.github.io/mkdocs-material/reference/icons-emojis/) в + тексте страниц. +- [Табы](https://squidfunk.github.io/mkdocs-material/reference/content-tabs/) +- [Сноски](https://squidfunk.github.io/mkdocs-material/reference/footnotes/) +- [Диаграммы mermaid](https://squidfunk.github.io/mkdocs-material/reference/diagrams/) +- [Admonitions](https://squidfunk.github.io/mkdocs-material/reference/admonitions/) +- [Аннотации](https://squidfunk.github.io/mkdocs-material/reference/annotations/) diff --git a/documentation/README_EN.md b/documentation/README_EN.md new file mode 100644 index 0000000..e0d0be2 --- /dev/null +++ b/documentation/README_EN.md @@ -0,0 +1,98 @@ +## Documentation + +### Local documentation deploy + +To deploy documentation locally on current branch/tag: + +1. Checkout branch/tag and initialize python-environment: + + ```shell + git checkout + cd documentation + python3 -m venv venv + source venv/bin/activate + pip install -r requirements.txt + ``` + +2. Build or serve site: + + ```shell + mkdocs build + ``` + + ```shell + mkdocs serve + ``` + +### Internationalization + +Documentation supports two languages: + +- Russian 🇷🇺 - by default +- English 🇺🇸 + +### New pages writing rules + +#### Section + +`Section` is group of pages, describing one certain topic. Section can include subsections. Write +section on separate directory. Each section must have page with `index.md` name that describe topic +area. + +`Page` is page with any name and `.md` extension. + +When a new section and page are being written, they should be added to the `nav` section in the +`mkdocs.yml` file. + +Section example: + +> ![alt](readme-images/sections.png) + +Example of a decorated navigation for this section: + +> ![alt](readme-images/navigation.png) + +### Схемы + +#### Plantuml + +The documentation supports the rendering of `plantuml diagrams`. To add the plantuml schema to the +text of the `markdown` page, use a block of code with the `puml` extension.: + +> \`\`\`puml +> +> @startuml +> +> Alice -> Bob: test +> +> @enduml +> +> \`\`\` + +#### Drawio + +The documentation supports the display of diagrams written in `drawio` (files with the `.drawio` +extension). It is necessary to add the schema to the `assets` directory. In the Markdown text, add a +diagram in the same way as you add an image using a relative path: + +```markdown +![](../../../../assets//schema.drawio) +``` + +### Code Snippets + +The documentation supports adding text inclusions from other files (snippets) to the Markdown text. +To add snippet to the Markdown text, read the +extension's [documentation](https://facelessuser.github.io/pymdown-extensions/extensions/snippets/). +The path to the files to be included is calculated relative to the `docs/documentation/examples` +directory. + +#### Additional extensions + +- Usage of [emoji](https://squidfunk.github.io/mkdocs-material/reference/icons-emojis/) in Markdown + pages +- [Tabs of content](https://squidfunk.github.io/mkdocs-material/reference/content-tabs/) +- [Footnotes](https://squidfunk.github.io/mkdocs-material/reference/footnotes/) +- [Mermaid diagrams](https://squidfunk.github.io/mkdocs-material/reference/diagrams/) +- [Admonitions](https://squidfunk.github.io/mkdocs-material/reference/admonitions/) +- [Annotations](https://squidfunk.github.io/mkdocs-material/reference/annotations/) diff --git a/documentation/docs/assets/drawio/client/balancer.drawio b/documentation/doc-src/assets/drawio/client/balancer.drawio similarity index 100% rename from documentation/docs/assets/drawio/client/balancer.drawio rename to documentation/doc-src/assets/drawio/client/balancer.drawio diff --git a/documentation/docs/assets/drawio/client/connection-pool.drawio b/documentation/doc-src/assets/drawio/client/connection-pool.drawio similarity index 100% rename from documentation/docs/assets/drawio/client/connection-pool.drawio rename to documentation/doc-src/assets/drawio/client/connection-pool.drawio diff --git a/documentation/docs/assets/drawio/client/distributing-round-robin.drawio b/documentation/doc-src/assets/drawio/client/distributing-round-robin.drawio similarity index 100% rename from documentation/docs/assets/drawio/client/distributing-round-robin.drawio rename to documentation/doc-src/assets/drawio/client/distributing-round-robin.drawio diff --git a/documentation/docs/assets/drawio/client/few-connection-box.drawio b/documentation/doc-src/assets/drawio/client/few-connection-box.drawio similarity index 100% rename from documentation/docs/assets/drawio/client/few-connection-box.drawio rename to documentation/doc-src/assets/drawio/client/few-connection-box.drawio diff --git a/documentation/docs/assets/drawio/client/heartbeat-1.drawio b/documentation/doc-src/assets/drawio/client/heartbeat-1.drawio similarity index 100% rename from documentation/docs/assets/drawio/client/heartbeat-1.drawio rename to documentation/doc-src/assets/drawio/client/heartbeat-1.drawio diff --git a/documentation/docs/assets/drawio/client/heartbeat.drawio b/documentation/doc-src/assets/drawio/client/heartbeat.drawio similarity index 100% rename from documentation/docs/assets/drawio/client/heartbeat.drawio rename to documentation/doc-src/assets/drawio/client/heartbeat.drawio diff --git a/documentation/docs/assets/drawio/client/high-level-arch.drawio b/documentation/doc-src/assets/drawio/client/high-level-arch.drawio similarity index 100% rename from documentation/docs/assets/drawio/client/high-level-arch.drawio rename to documentation/doc-src/assets/drawio/client/high-level-arch.drawio diff --git a/documentation/docs/assets/drawio/client/instance-connection-group.drawio b/documentation/doc-src/assets/drawio/client/instance-connection-group.drawio similarity index 100% rename from documentation/docs/assets/drawio/client/instance-connection-group.drawio rename to documentation/doc-src/assets/drawio/client/instance-connection-group.drawio diff --git a/documentation/docs/assets/drawio/client/round-robin.drawio b/documentation/doc-src/assets/drawio/client/round-robin.drawio similarity index 100% rename from documentation/docs/assets/drawio/client/round-robin.drawio rename to documentation/doc-src/assets/drawio/client/round-robin.drawio diff --git a/documentation/docs/assets/images/client/few-nodes-crud.svg b/documentation/doc-src/assets/images/client/few-nodes-crud.svg similarity index 100% rename from documentation/docs/assets/images/client/few-nodes-crud.svg rename to documentation/doc-src/assets/images/client/few-nodes-crud.svg diff --git a/documentation/docs/assets/images/client/few-replicas-box.svg b/documentation/doc-src/assets/images/client/few-replicas-box.svg similarity index 100% rename from documentation/docs/assets/images/client/few-replicas-box.svg rename to documentation/doc-src/assets/images/client/few-replicas-box.svg diff --git a/documentation/docs/index.en.md b/documentation/doc-src/index.en.md similarity index 100% rename from documentation/docs/index.en.md rename to documentation/doc-src/index.en.md diff --git a/documentation/docs/index.md b/documentation/doc-src/index.md similarity index 100% rename from documentation/docs/index.md rename to documentation/doc-src/index.md diff --git a/documentation/doc-src/java/src/client/TarantoolSingleInstanceConnectionAbstractExample.java b/documentation/doc-src/java/src/client/TarantoolSingleInstanceConnectionAbstractExample.java new file mode 100644 index 0000000..a58023c --- /dev/null +++ b/documentation/doc-src/java/src/client/TarantoolSingleInstanceConnectionAbstractExample.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2025 VK DIGITAL TECHNOLOGIES LIMITED LIABILITY COMPANY + * All Rights Reserved. + */ + +package client; + +// --8<-- [start:tarantool-single-instance-abstract] + +import java.io.IOException; +import java.nio.file.Path; + +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.io.TempDir; +import org.testcontainers.containers.tarantool.Tarantool3Container; +import org.testcontainers.containers.tarantool.TarantoolContainer; +import org.testcontainers.utility.DockerImageName; +import testcontainers.utils.TarantoolSingleNodeConfigUtils; + +public abstract class TarantoolSingleInstanceConnectionAbstractExample { + + protected static final String TARANTOOL_TAG = "3.6.0"; + + @TempDir protected static Path TEMP_DIR; + + private static final DockerImageName image = + DockerImageName.parse("tarantool/tarantool:" + TARANTOOL_TAG); + + protected static TarantoolContainer CONTAINER; + + @BeforeAll + static void beforeAll() throws IOException { + CONTAINER = createSingleNodeContainer(TEMP_DIR); + CONTAINER.start(); + } + + @AfterAll + static void afterAll() { + CONTAINER.stop(); + } + + protected abstract void simpleConnection(); + + protected static TarantoolContainer createSingleNodeContainer(Path tempPath) + throws IOException { + final Path pathToConfig = TarantoolSingleNodeConfigUtils.createConfig(tempPath); + return new Tarantool3Container(image, "test-node").withConfigPath(pathToConfig); + } +} +// --8<-- [end:tarantool-single-instance-abstract] diff --git a/documentation/doc-src/java/src/client/TarantoolSingleInstanceConnectionCartridgeDriverExample.java b/documentation/doc-src/java/src/client/TarantoolSingleInstanceConnectionCartridgeDriverExample.java new file mode 100644 index 0000000..682dba6 --- /dev/null +++ b/documentation/doc-src/java/src/client/TarantoolSingleInstanceConnectionCartridgeDriverExample.java @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2025 VK DIGITAL TECHNOLOGIES LIMITED LIABILITY COMPANY + * All Rights Reserved. + */ + +package client; + +// --8<-- [start:tarantool-single-instance-cartridge-driver] + +import java.net.InetSocketAddress; +import java.util.List; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import testcontainers.utils.TarantoolSingleNodeConfigUtils; + +import io.tarantool.driver.api.TarantoolClient; +import io.tarantool.driver.api.TarantoolClientFactory; +import io.tarantool.driver.api.TarantoolResult; +import io.tarantool.driver.api.tuple.TarantoolTuple; + +public class TarantoolSingleInstanceConnectionCartridgeDriverExample + extends TarantoolSingleInstanceConnectionAbstractExample { + + @Test + @Override + protected void simpleConnection() { + try (TarantoolClient> client = setupClient()) { + final List result = client.eval("return _TARANTOOL").join(); + + Assertions.assertEquals(1, result.size()); + + final Object object = result.get(0); + + Assertions.assertInstanceOf(String.class, object); + Assertions.assertTrue(((String) object).contains(TARANTOOL_TAG)); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + private static TarantoolClient> setupClient() { + // Получаем адрес и порт из докера + // Gets address and port from docker + final InetSocketAddress nodeAddress = CONTAINER.mappedAddress(); + + return TarantoolClientFactory.createClient() + .withAddress(nodeAddress.getHostName(), nodeAddress.getPort()) + .withCredentials( + TarantoolSingleNodeConfigUtils.LOGIN, TarantoolSingleNodeConfigUtils.PWD.toString()) + .build(); + } +} +// --8<-- [end:tarantool-single-instance-cartridge-driver] diff --git a/documentation/doc-src/java/src/client/TarantoolSingleInstanceConnectionTJSDKExample.java b/documentation/doc-src/java/src/client/TarantoolSingleInstanceConnectionTJSDKExample.java new file mode 100644 index 0000000..dc22e88 --- /dev/null +++ b/documentation/doc-src/java/src/client/TarantoolSingleInstanceConnectionTJSDKExample.java @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2025 VK DIGITAL TECHNOLOGIES LIMITED LIABILITY COMPANY + * All Rights Reserved. + */ + +package client; + +// --8<-- [start:tarantool-single-instance-tjsdk] + +import java.net.InetSocketAddress; +import java.util.Collections; +import java.util.List; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import testcontainers.utils.TarantoolSingleNodeConfigUtils; + +import io.tarantool.client.box.TarantoolBoxClient; +import io.tarantool.client.factory.TarantoolBoxClientBuilder; +import io.tarantool.client.factory.TarantoolFactory; +import io.tarantool.mapping.TarantoolResponse; +import io.tarantool.pool.InstanceConnectionGroup; + +public class TarantoolSingleInstanceConnectionTJSDKExample + extends TarantoolSingleInstanceConnectionAbstractExample { + + @Test + @Override + protected void simpleConnection() { + // Получаем адрес и порт из докера + // Gets address and port from docker + final InetSocketAddress nodeAddress = CONTAINER.mappedAddress(); + + // Настраиваем группу подключения + // Set ups connection group + final InstanceConnectionGroup connectionGroup = + InstanceConnectionGroup.builder() + .withHost(nodeAddress.getHostName()) + .withPort(nodeAddress.getPort()) + .withUser(TarantoolSingleNodeConfigUtils.LOGIN) + .withPassword(TarantoolSingleNodeConfigUtils.PWD.toString()) + .build(); + + final TarantoolBoxClientBuilder clientBuilder = + TarantoolFactory.box().withGroups(Collections.singletonList(connectionGroup)); + + try (final TarantoolBoxClient singleNodeClient = clientBuilder.build()) { + + final TarantoolResponse> response = + singleNodeClient.eval("return _TARANTOOL", String.class).join(); + final List results = response.get(); + + Assertions.assertEquals(1, results.size()); + Assertions.assertTrue(results.get(0).contains(TARANTOOL_TAG)); + } catch (Exception e) { + throw new RuntimeException(e); + } + } +} +// --8<-- [end:tarantool-single-instance-tjsdk] diff --git a/documentation/doc-src/java/src/testcontainers/utils/TarantoolSingleNodeConfigUtils.java b/documentation/doc-src/java/src/testcontainers/utils/TarantoolSingleNodeConfigUtils.java new file mode 100644 index 0000000..1aa274b --- /dev/null +++ b/documentation/doc-src/java/src/testcontainers/utils/TarantoolSingleNodeConfigUtils.java @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2025 VK DIGITAL TECHNOLOGIES LIMITED LIABILITY COMPANY + * All Rights Reserved. + */ + +package testcontainers.utils; + +// --8<-- [start:create-single-instance] + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Collections; + +import org.testcontainers.containers.tarantool.config.ConfigurationUtils; + +import io.tarantool.autogen.Tarantool3Configuration; +import io.tarantool.autogen.credentials.Credentials; +import io.tarantool.autogen.credentials.users.Users; +import io.tarantool.autogen.credentials.users.usersProperty.UsersProperty; +import io.tarantool.autogen.groups.Groups; +import io.tarantool.autogen.groups.groupsProperty.GroupsProperty; +import io.tarantool.autogen.groups.groupsProperty.replicasets.Replicasets; +import io.tarantool.autogen.groups.groupsProperty.replicasets.replicasetsProperty.ReplicasetsProperty; +import io.tarantool.autogen.groups.groupsProperty.replicasets.replicasetsProperty.instances.Instances; +import io.tarantool.autogen.groups.groupsProperty.replicasets.replicasetsProperty.instances.instancesProperty.InstancesProperty; +import io.tarantool.autogen.groups.groupsProperty.replicasets.replicasetsProperty.instances.instancesProperty.iproto.Iproto; +import io.tarantool.autogen.groups.groupsProperty.replicasets.replicasetsProperty.instances.instancesProperty.iproto.listen.Listen; + +public class TarantoolSingleNodeConfigUtils { + + public static final String NODE = "test-node"; + + public static final CharSequence PWD = "secret"; + + public static final String LOGIN = "test-user"; + + /* + // Создает конфигурацию вида: + // Creates configuration like: + --- + credentials: + users: + test-user: + password: "secret" + roles: + - "super" + groups: + test-group: + replicasets: + test-rs: + instances: + test-node: + iproto: + listen: + - uri: "0.0.0.0:3301" + */ + public static Path createConfig(Path tempDir) throws IOException { + final Path pathToConfigFile = Files.createFile(tempDir.resolve("config.yaml")); + + final Credentials credentials = + Credentials.builder() + .withUsers( + Users.builder() + .withAdditionalProperty( + LOGIN, + UsersProperty.builder() + .withRoles(Collections.singletonList("super")) + .withPassword(PWD.toString()) + .build()) + .build()) + .build(); + + final Iproto iproto = + Iproto.builder() + .withListen(Collections.singletonList(Listen.builder().withUri("0.0.0.0:3301").build())) + .build(); + + final InstancesProperty instance = InstancesProperty.builder().withIproto(iproto).build(); + + final ReplicasetsProperty replicaset = + ReplicasetsProperty.builder() + .withInstances(Instances.builder().withAdditionalProperty(NODE, instance).build()) + .build(); + + final GroupsProperty group = + GroupsProperty.builder() + .withReplicasets( + Replicasets.builder().withAdditionalProperty("test-rs", replicaset).build()) + .build(); + + final Tarantool3Configuration configuration = + Tarantool3Configuration.builder() + .withGroups(Groups.builder().withAdditionalProperty("test-group", group).build()) + .withCredentials(credentials) + .build(); + + ConfigurationUtils.writeToFile(configuration, pathToConfigFile); + return pathToConfigFile; + } +} + +// --8<-- [end:create-single-instance] diff --git a/documentation/docs/documentation/client/arch/balancer.en.md b/documentation/doc-src/pages/client/arch/balancer.en.md similarity index 87% rename from documentation/docs/documentation/client/arch/balancer.en.md rename to documentation/doc-src/pages/client/arch/balancer.en.md index 3e17516..381a82c 100644 --- a/documentation/docs/documentation/client/arch/balancer.en.md +++ b/documentation/doc-src/pages/client/arch/balancer.en.md @@ -12,16 +12,16 @@ between Tarantool nodes. The balancer abstraction in `Tarantool Java EE` is represented by the `TarantoolBalancer` interface. Let's look at how balancing works in the Java client: -
-
How the balancer works
- +
+
How the balancer works
+![](../../../assets/drawio/client/balancer.drawio)
1. The programmer executes a request through the API of high-level clients (`TarantoolClient`, `TarantoolCrudClient` or `TarantoolBoxClient`) 2. The high-level client requests a connection to execute the request from `TarantoolBalancer` 3. The balancer, using its logic, requests an available node from the connection pool (`IProtoClientPool`) - Node availability is determined using the [heartbeat](./heartbeat.md) mechanism + Node availability is determined using the [heartbeat](heartbeat.md) mechanism 4. The connection pool returns an available connection to the balancer 5. The balancer provides the high-level client with a connection 6. The high-level client executes the request through the provided connection @@ -40,9 +40,9 @@ By default, the following types of balancers are available: #### TarantoolRoundRobinBalancer -
+
How the balancer works
- +![](../../../assets/drawio/client/round-robin.drawio)
This implementation of the `TarantoolBalancer` interface performs connection selection according to the following @@ -55,9 +55,9 @@ algorithm: #### TarantoolDistributingRoundRobinBalancer -
+
How the balancer works
- +![](../../../assets/drawio/client/distributing-round-robin.drawio)
This implementation of the `TarantoolBalancer` interface performs connection selection according to the following diff --git a/documentation/docs/documentation/client/arch/balancer.md b/documentation/doc-src/pages/client/arch/balancer.md similarity index 92% rename from documentation/docs/documentation/client/arch/balancer.md rename to documentation/doc-src/pages/client/arch/balancer.md index d266bf7..f82076f 100644 --- a/documentation/docs/documentation/client/arch/balancer.md +++ b/documentation/doc-src/pages/client/arch/balancer.md @@ -12,16 +12,16 @@ title: Балансировка Абстракция балансировщика в `Tarantool Java EE` представлена интерфейсом `TarantoolBalancer`. Рассмотрим принцип работы балансировки в Java-клиенте: -
-
Работа балансировщика
- +
+
Работа балансировщика
+![](../../../assets/drawio/client/balancer.drawio)
1. Программист выполняется запрос через API высокоуровневых клиентов (`TarantoolClient`, `TarantoolCrudClient` или `TarantoolBoxClient`) 2. Высокоуровневый клиент запрашивает соединение для выполнения запроса у `TarantoolBalancer` 3. Балансировщик, используя свою логику, запрашивает у пула соединений (`IProtoClientPool`) - доступный узел. Доступность узлов определяется с помощью механизма [heartbeat](./heartbeat.md) + доступный узел. Доступность узлов определяется с помощью механизма [heartbeat](heartbeat.md) 4. Пул соединений возвращает доступное соединение балансировщику 5. Балансировщик предоставляет высокоуровневому клиенту соединение 6. Высокоуровневый клиент выполняет запрос через предоставленное соединение @@ -40,9 +40,9 @@ title: Балансировка #### TarantoolRoundRobinBalancer -
+
Работа балансировщика
- +![](../../../assets/drawio/client/round-robin.drawio)
Данная реализация интерфейса `TarantoolBalancer` выполняет выбор соединений по следующему @@ -55,9 +55,9 @@ title: Балансировка #### TarantoolDistributingRoundRobinBalancer -
+
Работа балансировщика
- +![](../../../assets/drawio/client/distributing-round-robin.drawio)
Данная реализация интерфейса `TarantoolBalancer` выполняет выбор соединений по следующему diff --git a/documentation/docs/documentation/client/arch/call.en.md b/documentation/doc-src/pages/client/arch/call.en.md similarity index 97% rename from documentation/docs/documentation/client/arch/call.en.md rename to documentation/doc-src/pages/client/arch/call.en.md index 2927b91..f49194d 100644 --- a/documentation/docs/documentation/client/arch/call.en.md +++ b/documentation/doc-src/pages/client/arch/call.en.md @@ -124,5 +124,5 @@ data = [true] // array with one boolean element Stored procedures can accept 0 or more input and output arguments. Conversion of Java types to Tarantool types is performed using Jackson serializers/deserializers -([more details](./tuple_pojo_mapping.md)). To specify custom type conversions, +([more details](tuple_pojo_mapping.md)). To specify custom type conversions, refer to the [Jackson documentation](https://github.com/FasterXML/jackson-databind/wiki). diff --git a/documentation/docs/documentation/client/arch/call.md b/documentation/doc-src/pages/client/arch/call.md similarity index 96% rename from documentation/docs/documentation/client/arch/call.md rename to documentation/doc-src/pages/client/arch/call.md index 13f1d0e..154a5c0 100644 --- a/documentation/docs/documentation/client/arch/call.md +++ b/documentation/doc-src/pages/client/arch/call.md @@ -127,5 +127,5 @@ data = [true] // массив из одного жлемента типа boolea Хранимые процедуры могут принимать 0 или более входных и выходных аргументов. Преобразование Java-типов в типы Tarantool производится с помощью Jackson сериализаторов/десериализаторов -([подробнее](./tuple_pojo_mapping.md)). Для того чтобы задать пользовательские преобразования типов, +([подробнее](tuple_pojo_mapping.md)). Для того чтобы задать пользовательские преобразования типов, обратитесь к [документации Jackson](https://github.com/FasterXML/jackson-databind/wiki). diff --git a/documentation/docs/documentation/client/arch/connection-pool.en.md b/documentation/doc-src/pages/client/arch/connection-pool.en.md similarity index 72% rename from documentation/docs/documentation/client/arch/connection-pool.en.md rename to documentation/doc-src/pages/client/arch/connection-pool.en.md index 8348db9..9f5d59a 100644 --- a/documentation/docs/documentation/client/arch/connection-pool.en.md +++ b/documentation/doc-src/pages/client/arch/connection-pool.en.md @@ -6,23 +6,23 @@ title: Connection Pool In the `Tarantool Java SDK`, the connection pool represents a set of connections to Tarantool nodes, grouped into logical groups. These groups are created using instances of the `InstanceConnectionGroup` class, -which contains the necessary metadata. More details about [InstanceConnectionGroup](./instance-connection-group.md). +which contains the necessary metadata. More details about [InstanceConnectionGroup](instance-connection-group.md). When creating `TarantoolCrudClient` or `TarantoolBoxClient`, one instance of `IprotoClientPool` is created. This pool, based on the `InstanceConnectionGroup` passed to it, creates within itself instances of `PoolEntry`, which manage the lifecycle of their connection (connection/disconnection process, -[heartbeat](./heartbeat.md)). Each `PoolEntry` is associated only with one logical group. All `PoolEntry` in one logical group +[heartbeat](heartbeat.md)). Each `PoolEntry` is associated only with one logical group. All `PoolEntry` in one logical group contain their own connections to the same node. -
-
Location of IProtoClientPool in the Java client architecture
- +
+
Location of IProtoClientPool in the Java client architecture
+![](../../../assets/drawio/client/connection-pool.drawio)
`IProtoClientPool` should be considered as a container designed to store a set of connections. When executing requests, `IProtoClientPool` acts as an object that provides active connections to the balancer (no more than one). More detailed information about connection selection during -requests can be found in the [balancers](./balancer.md) section. +requests can be found in the [balancers](balancer.md) section. ???+ warning "Important" diff --git a/documentation/docs/documentation/client/arch/connection-pool.md b/documentation/doc-src/pages/client/arch/connection-pool.md similarity index 81% rename from documentation/docs/documentation/client/arch/connection-pool.md rename to documentation/doc-src/pages/client/arch/connection-pool.md index 8509859..40535ec 100644 --- a/documentation/docs/documentation/client/arch/connection-pool.md +++ b/documentation/doc-src/pages/client/arch/connection-pool.md @@ -7,24 +7,24 @@ title: Пул соединений В `Tarantool Java SDK` пул соединений представляет собой набор подключений к узлам Tarantool, объединенных в логические группы. Эти группы создаются с помощью экземпляров класса `InstanceConnectionGroup`, который содержит необходимые метаданные. Более подробно о -[InstanceConnectionGroup](./instance-connection-group.md). +[InstanceConnectionGroup](instance-connection-group.md). При создании `TarantoolCrudClient` или `TarantoolBoxClient` создается один экземпляр `IprotoClientPool`. Этот пул, на основе переданных ему `InstanceConnectionGroup`, создает внутри себя экземпляры `PoolEntry`, которые управляют жизненным циклом своего соединения (процесс -подключения/отключения, [heartbeat](./heartbeat.md)). Каждый `EntryPool` связан только с одной +подключения/отключения, [heartbeat](heartbeat.md)). Каждый `EntryPool` связан только с одной логической группой. Все `EntryPool` в одной логической группе содержат свои собственные соединения к одному и тому же узлу. -
-
Место IProtoClientPool в архитектуре Java-клиента
- +
+
Место IProtoClientPool в архитектуре Java-клиента
+![](../../../assets/drawio/client/connection-pool.drawio)
`IProtoClientPool` следует рассматривать как контейнер, предназначенный для хранения набора соединений. При выполнении запросов `IProtoClientPool` действует как объект, предоставляющий балансировщику активные соединения (не более). Более подробную информацию о выборе соединения при -запросах можно найти в разделе о [балансировщиках](./balancer.md). +запросах можно найти в разделе о [балансировщиках](balancer.md). ???+ warning "Важно" diff --git a/documentation/docs/documentation/client/arch/connection-to-multiple-nodes.en.md b/documentation/doc-src/pages/client/arch/connection-to-multiple-nodes.en.md similarity index 93% rename from documentation/docs/documentation/client/arch/connection-to-multiple-nodes.en.md rename to documentation/doc-src/pages/client/arch/connection-to-multiple-nodes.en.md index 4c68c44..d63ca73 100644 --- a/documentation/docs/documentation/client/arch/connection-to-multiple-nodes.en.md +++ b/documentation/doc-src/pages/client/arch/connection-to-multiple-nodes.en.md @@ -37,9 +37,9 @@ To connect to Tarantool regardless of mode (cluster or single node), the followi Let's consider an example with the following cluster topology: -
-
Example vshard cluster topology
- +
+
Example vshard cluster topology
+![](../../../assets/images/client/few-nodes-crud.svg)
To configure `TarantoolCrudClient`, you need to use the @@ -120,9 +120,9 @@ the example, this is the space named `person`. In general, `TarantoolBoxClient` instances are intended for working with a single Tarantool node, but there are scenarios where `TarantoolBoxSpace` can be used when working with multiple nodes: -
-
Selecting data from multiple replicas of one shard
- +
+
Selecting data from multiple replicas of one shard
+![](../../../assets/images/client/few-replicas-box.svg)
In the example above, one of the replicas `replica-1` fails. The Java client needs to continue @@ -136,7 +136,7 @@ final TarantoolBoxClientBuilder boxBuilder = TarantoolFactory.box(); ``` Next, you need to configure connection groups to replica nodes, similar to how it -is demonstrated in the section "[Connecting to Multiple Router Nodes via TarantoolCrudClient API](./connection-to-multiple-nodes.md): +is demonstrated in the section "[Connecting to Multiple Router Nodes via TarantoolCrudClient API](connection-to-multiple-nodes.md): ```java final InstanceConnectionGroup firstReplicaConnectionGroup = InstanceConnectionGroup.builder() diff --git a/documentation/docs/documentation/client/arch/connection-to-multiple-nodes.md b/documentation/doc-src/pages/client/arch/connection-to-multiple-nodes.md similarity index 95% rename from documentation/docs/documentation/client/arch/connection-to-multiple-nodes.md rename to documentation/doc-src/pages/client/arch/connection-to-multiple-nodes.md index 9ee5289..81a0045 100644 --- a/documentation/docs/documentation/client/arch/connection-to-multiple-nodes.md +++ b/documentation/doc-src/pages/client/arch/connection-to-multiple-nodes.md @@ -39,9 +39,9 @@ title: Подключение к нескольким узлам Рассмотрим пример со следующей топологией кластера Tarantool: -
-
Пример топологии vshard-кластера
- +
+
Пример топологии vshard-кластера
+![](../../../assets/images/client/few-nodes-crud.svg)
Для того чтобы настроить `TarantoolCrudClient`, необходимо воспользоваться API @@ -122,9 +122,9 @@ final TarantoolCrudSpace personSpace = crudClient.space("person"); В общем случае экземпляры `TarantoolBoxClient` предназначены для работы с одиночным узлом Tarantool, но есть сценарии, в которых `TarantoolBoxSpace` можно использовать при работе с несколькими узлами: -
-
Выборка данных с нескольких реплик одного шарда
- +
+
Выборка данных с нескольких реплик одного шарда
+![](../../../assets/images/client/few-replicas-box.svg)
В приведенном примере одна из реплик `replica-1` отказывает. Необходимо, чтобы Java-клиент продолжал @@ -139,7 +139,7 @@ final TarantoolBoxClientBuilder boxBuilder = TarantoolFactory.box(); Далее необходимо настроить группы подключений к узлам-репликам, аналогично тому, как это демонстрируется в секции "[Подключение к нескольким узлам-маршрутизаторам Tarantool через -TarantoolCrudClient API](./connection-to-multiple-nodes.md): +TarantoolCrudClient API](connection-to-multiple-nodes.md): ```java final InstanceConnectionGroup firstReplicaConnectionGroup = InstanceConnectionGroup.builder() diff --git a/documentation/docs/documentation/client/arch/exception-handling.en.md b/documentation/doc-src/pages/client/arch/exception-handling.en.md similarity index 99% rename from documentation/docs/documentation/client/arch/exception-handling.en.md rename to documentation/doc-src/pages/client/arch/exception-handling.en.md index 3692cab..552aa68 100644 --- a/documentation/docs/documentation/client/arch/exception-handling.en.md +++ b/documentation/doc-src/pages/client/arch/exception-handling.en.md @@ -333,7 +333,7 @@ final Tuple> exceptionallyTuple = space.insert(tupleWithSameId).join(); Tarantool allows returning Go-like tuples in the return value of stored procedures. In this case, the user must take care of proper conversion of lua and Java types, based on the rules of -[conversion](./tuple_pojo_mapping.md). +[conversion](tuple_pojo_mapping.md). Consider the following procedure: diff --git a/documentation/docs/documentation/client/arch/exception-handling.md b/documentation/doc-src/pages/client/arch/exception-handling.md similarity index 99% rename from documentation/docs/documentation/client/arch/exception-handling.md rename to documentation/doc-src/pages/client/arch/exception-handling.md index 3015983..5f8fb27 100644 --- a/documentation/docs/documentation/client/arch/exception-handling.md +++ b/documentation/doc-src/pages/client/arch/exception-handling.md @@ -334,7 +334,7 @@ final Tuple> exceptionallyTuple = space.insert(tupleWithSameId).join(); Tarantool допускает возврат Go-like кортежей в возвращаемом значении хранимых процедур. В этом случае пользователь должен позаботиться о правильности преобразования lua и Java типов, основываясь -на правилах [преобразования](./tuple_pojo_mapping.md). +на правилах [преобразования](tuple_pojo_mapping.md). Рассмотрим следующую процедуру: diff --git a/documentation/docs/documentation/client/arch/heartbeat.en.md b/documentation/doc-src/pages/client/arch/heartbeat.en.md similarity index 86% rename from documentation/docs/documentation/client/arch/heartbeat.en.md rename to documentation/doc-src/pages/client/arch/heartbeat.en.md index 10e0c13..bdecd98 100644 --- a/documentation/docs/documentation/client/arch/heartbeat.en.md +++ b/documentation/doc-src/pages/client/arch/heartbeat.en.md @@ -6,7 +6,7 @@ title: Heartbeat Architecture `heartbeat` is a background task that sends periodic ping requests to the Tarantool node and analyzes the results of successful and unsuccessful ping requests. The `heartbeat` task is set up for -each `PoolEntry` in [IProtoClientPool](./connection-pool.md). The main purpose of `heartbeat` - +each `PoolEntry` in [IProtoClientPool](connection-pool.md). The main purpose of `heartbeat` - to monitor the availability of the connection to the `Tarantool` node ### How It Works @@ -18,22 +18,22 @@ that the following `heartbeat` settings were specified: - `deathThreshold == 4` - `windowSize == 3` -
-
How heartbeat works
- +
+
How heartbeat works
+![](../../../assets/drawio/client/heartbeat.drawio)
Availability analysis of the node is performed using ping requests. If the number of failed ping requests at the moment of consideration exceeds the value `invalidationThreshold` in the window, then the connection is excluded -from the [connection pool](./connection-pool.md) for selection by the [balancer](./balancer.md) (4,5,6). For +from the [connection pool](connection-pool.md) for selection by the [balancer](balancer.md) (4,5,6). For the excluded connection, the `heartbeat` process continues. Each exceeding of `invalidationThreshold` increases the `currentDeathThreshold` counter by 1. If `currentDeathThreshold` reaches the value `deathThreshold`, the connection is considered `dead` (status `KILL`) and the reconnection process of the connection is started (7). -
-
Transition from INVALIDATE to ACTIVATE
- +
+
Transition from INVALIDATE to ACTIVATE
+![](../../../assets/drawio/client/heartbeat-1.drawio)
The transition from the `INVALIDATE` state to the `ACTIVATE` state occurs if in subsequent iterations diff --git a/documentation/docs/documentation/client/arch/heartbeat.md b/documentation/doc-src/pages/client/arch/heartbeat.md similarity index 88% rename from documentation/docs/documentation/client/arch/heartbeat.md rename to documentation/doc-src/pages/client/arch/heartbeat.md index fe11849..5960ebd 100644 --- a/documentation/docs/documentation/client/arch/heartbeat.md +++ b/documentation/doc-src/pages/client/arch/heartbeat.md @@ -6,7 +6,7 @@ title: Архитектура heartbeat `heartbeat` - это фоновая задача, оправляющая постоянные ping-запросы к узлу Tarantool и анализирующая результаты успешных и неуспешных ping-запросов. Задача `heartbeat` устанавливается для -каждого `PoolEntry` в [IProtoClientPool](./connection-pool.md). Главная задача `heartbeat` - +каждого `PoolEntry` в [IProtoClientPool](connection-pool.md). Главная задача `heartbeat` - отслеживать доступность соединения к узлу `Tarantool` ### Принцип работы @@ -18,22 +18,22 @@ title: Архитектура heartbeat - `deathThreshold == 4` - `windowSize == 3` -
-
Принцип работы heartbeat
- +
+
Принцип работы heartbeat
+![](../../../assets/drawio/client/heartbeat.drawio)
Анализ доступности узла проводится с помощью ping-запросов. Если количество неудачных ping-запросов в момент рассмотрения превышает значение `invalidationThreshold` в окне, то соединение исключается -из [пула соединений](./connection-pool.md) для выбора [балансировщиком](./balancer.md) (4,5,6). Для +из [пула соединений](connection-pool.md) для выбора [балансировщиком](balancer.md) (4,5,6). Для исключенного соединения процесс `heartbeat`продолжается. Каждое превышение `invalidationThreshold` увеличивает значение счетчика `currentDeathThreshold` на 1. Если `currentDeathThreshold` достигает значения `deathThreshold` соединение считается `мертвым` (статус `KILL`) и запускается процесс переподключения соединения (7). -
-
Переход из INVALIDATE к ACTIVATE
- +
+
Переход из INVALIDATE к ACTIVATE
+![](../../../assets/drawio/client/heartbeat-1.drawio)
Переход из состояния `INVALIDATE` в состояние `ACTIVATE` происходит если при последующих итерациях diff --git a/documentation/docs/documentation/client/arch/high-level-arch.en.md b/documentation/doc-src/pages/client/arch/high-level-arch.en.md similarity index 71% rename from documentation/docs/documentation/client/arch/high-level-arch.en.md rename to documentation/doc-src/pages/client/arch/high-level-arch.en.md index 9246776..24f10d9 100644 --- a/documentation/docs/documentation/client/arch/high-level-arch.en.md +++ b/documentation/doc-src/pages/client/arch/high-level-arch.en.md @@ -4,30 +4,30 @@ title: Interaction with Tarantool Java SDK ## High-Level Architecture of Interaction with Tarantool Java SDK -
-
High-Level Architecture of Tarantool Java SDK
- +
+
High-Level Architecture of Tarantool Java SDK
+![](../../../assets/drawio/client/high-level-arch.drawio)
To interact with `Tarantool`, the `Tarantool Java SDK` uses the `IProto` protocol, which is implemented in classes supporting the `IProtoClient` interface. Connection management and their -state are handled through `PoolEntry` objects, which wrap `IProtoClient`. The mechanism [heartbeat](./heartbeat.md) is used +state are handled through `PoolEntry` objects, which wrap `IProtoClient`. The mechanism [heartbeat](heartbeat.md) is used to check connection availability. To work with multiple connections simultaneously, `PoolEntry` objects are grouped into -logical groups within [IProtoClientPool](./connection-pool.md). These groups represent +logical groups within [IProtoClientPool](connection-pool.md). These groups represent sets of connections to a single `Tarantool` node and are configured using metadata passed -through instances of the [InstanceConnectionGroup](./instance-connection-group.md) class. +through instances of the [InstanceConnectionGroup](instance-connection-group.md) class. The connection pool performs the following functions: * Creates logically separated sets of `PoolEntry` when creating a client, using metadata from - objects of the [InstanceConnectionGroup](./instance-connection-group.md) class -* Provides [available](./heartbeat.md) connections upon request from the [balancer](./balancer.md) + objects of the [InstanceConnectionGroup](instance-connection-group.md) class +* Provides [available](heartbeat.md) connections upon request from the [balancer](balancer.md) * Closes connections when the client shuts down The selection of a connection for executing a request is performed using an object of a class implementing -the [TarantoolBalancer](./balancer.md) interface. +the [TarantoolBalancer](balancer.md) interface. For working with logically separated groups of connections, high-level clients are used ( `TarantoolClient`, `TarantoolCrudClient` and `TarantoolBoxClient`), which provide a convenient @@ -40,7 +40,7 @@ looks as follows: `TarantoolCrudClient` or `TarantoolBoxClient`) 2. The high-level client requests a connection to execute the request from `TarantoolBalancer` 3. The balancer, using its logic, requests an available node from the connection pool (`IProtoClientPool`) - Available nodes are determined using the [heartbeat](./heartbeat.md) mechanism + Available nodes are determined using the [heartbeat](heartbeat.md) mechanism 4. The connection pool returns an available connection to the balancer 5. The balancer provides the high-level client with a connection 6. The high-level client executes the request through the provided connection diff --git a/documentation/docs/documentation/client/arch/high-level-arch.md b/documentation/doc-src/pages/client/arch/high-level-arch.md similarity index 82% rename from documentation/docs/documentation/client/arch/high-level-arch.md rename to documentation/doc-src/pages/client/arch/high-level-arch.md index d3cff85..0b83567 100644 --- a/documentation/docs/documentation/client/arch/high-level-arch.md +++ b/documentation/doc-src/pages/client/arch/high-level-arch.md @@ -4,30 +4,31 @@ title: Взаимодействие с Tarantool Java SDK ## Высокоуровневая архитектура взаимодействия с Tarantool Java SDK -
-
Высокоуровневая архитектура Tarantool Java SDK
- + +
+
Высокоуровневая архитектура Tarantool Java SDK
+![](../../../assets/drawio/client/high-level-arch.drawio)
Для взаимодействия с `Tarantool`, `Tarantool Java SDK` использует протокол `IProto`, который реализован в классах, поддерживающих интерфейс `IProtoClient`. Управление соединениями и их состоянием осуществляется через объекты `PoolEntry`, которые оборачивают `IProtoClient`. Для -проверки доступности соединений используется механизм [heartbeat](./heartbeat.md). +проверки доступности соединений используется механизм [heartbeat](heartbeat.md). Чтобы работать с несколькими соединениями одновременно, объекты `PoolEntry` объединяются в -логические группы внутри [IProtoClientPool](./connection-pool.md). Эти группы представляют собой +логические группы внутри [IProtoClientPool](connection-pool.md). Эти группы представляют собой наборы соединений к одному узлу `Tarantool` и настраиваются с помощью метаданных, переданных -через экземпляры класса [InstanceConnectionGroup](./instance-connection-group.md). +через экземпляры класса [InstanceConnectionGroup](instance-connection-group.md). Пул соединений выполняет следующие функции: * Создает логически разделенные наборы `PoolEntry` при создании клиента, используя метаданные из - объектов класса [InstanceConnectionGroup](./instance-connection-group.md) -* Предоставляет [доступные](./heartbeat.md) соединения по запросу [балансировщика](./balancer.md) + объектов класса [InstanceConnectionGroup](instance-connection-group.md) +* Предоставляет [доступные](heartbeat.md) соединения по запросу [балансировщика](balancer.md) * Закрывает соединения при завершении работы клиента Выбор соединения для выполнения запроса осуществляется с помощью объекта класса, реализующего -интерфейс [TarantoolBalancer](./balancer.md). +интерфейс [TarantoolBalancer](balancer.md). Для работы с логически разделенными группами соединений используются высокоуровневые клиенты ( `TarantoolClient`, `TarantoolCrudClient` и `TarantoolBoxClient`), которые предоставляют удобный @@ -40,7 +41,7 @@ API. `TarantoolCrudClient` или `TarantoolBoxClient`) 2. Высокоуровневый клиент запрашивает соединение для выполнения запроса у `TarantoolBalancer` 3. Балансировщик, используя свою логику, запрашивает у пула соединений (`IProtoClientPool`) - доступный узел. Доступность узлов определяется с помощью механизма [heartbeat](./heartbeat.md) + доступный узел. Доступность узлов определяется с помощью механизма [heartbeat](heartbeat.md) 4. Пул соединений возвращает доступное соединение балансировщику 5. Балансировщик предоставляет высокоуровневому клиенту соединение 6. Высокоуровневый клиент выполняет запрос через предоставленное соединение diff --git a/documentation/docs/documentation/client/arch/index.en.md b/documentation/doc-src/pages/client/arch/index.en.md similarity index 100% rename from documentation/docs/documentation/client/arch/index.en.md rename to documentation/doc-src/pages/client/arch/index.en.md diff --git a/documentation/docs/documentation/client/arch/index.md b/documentation/doc-src/pages/client/arch/index.md similarity index 100% rename from documentation/docs/documentation/client/arch/index.md rename to documentation/doc-src/pages/client/arch/index.md diff --git a/documentation/docs/documentation/client/arch/instance-connection-group.en.md b/documentation/doc-src/pages/client/arch/instance-connection-group.en.md similarity index 93% rename from documentation/docs/documentation/client/arch/instance-connection-group.en.md rename to documentation/doc-src/pages/client/arch/instance-connection-group.en.md index 64632d4..70ad424 100644 --- a/documentation/docs/documentation/client/arch/instance-connection-group.en.md +++ b/documentation/doc-src/pages/client/arch/instance-connection-group.en.md @@ -8,9 +8,9 @@ title: Connection Group ### Connection Groups Concept -
-
Location of InstanceConnectionGroup in the Java client architecture
- +
+
Location of InstanceConnectionGroup in the Java client architecture
+![](../../../assets/drawio/client/instance-connection-group.drawio)
High-level clients `TarantoolCrudClient`/ `TarantoolBoxClient` interact with @@ -23,7 +23,7 @@ metadata from one object of the `InstanceConnectionGroup` class. Using multiple connections within one group allows you to increase the performance of the Java client, especially in situations where data operations are performed in parallel. The selection -of a connection for executing a request is determined by the balancing rules ([more details](./balancer.md)). +of a connection for executing a request is determined by the balancing rules ([more details](balancer.md)). ### Parameter Description diff --git a/documentation/docs/documentation/client/arch/instance-connection-group.md b/documentation/doc-src/pages/client/arch/instance-connection-group.md similarity index 94% rename from documentation/docs/documentation/client/arch/instance-connection-group.md rename to documentation/doc-src/pages/client/arch/instance-connection-group.md index b3979fe..836a2b7 100644 --- a/documentation/docs/documentation/client/arch/instance-connection-group.md +++ b/documentation/doc-src/pages/client/arch/instance-connection-group.md @@ -9,9 +9,9 @@ Tarantool. ### Концепция групп соединений -
-
Место InstanceConnectionGroup в архитектуре Java-клиента
- +
+
Место InstanceConnectionGroup в архитектуре Java-клиента
+![](../../../assets/drawio/client/instance-connection-group.drawio)
Высокоуровневые клиенты `TarantoolCrudClient`/ `TarantoolBoxClient` осуществляют взаимодействие с @@ -24,7 +24,7 @@ Tarantool. Использование нескольких соединений в рамках одной группы позволяет повысить производительность работы Java-клиента, особенно в ситуациях, когда операции над данными выполняются параллельно. Выбор -соединения для выполнения запроса определяется правилами балансировки ([подробнее](./balancer.md)). +соединения для выполнения запроса определяется правилами балансировки ([подробнее](balancer.md)). ### Описание параметров diff --git a/documentation/docs/documentation/client/arch/tuple_pojo_mapping.en.md b/documentation/doc-src/pages/client/arch/tuple_pojo_mapping.en.md similarity index 99% rename from documentation/docs/documentation/client/arch/tuple_pojo_mapping.en.md rename to documentation/doc-src/pages/client/arch/tuple_pojo_mapping.en.md index ca24f06..2d40c15 100644 --- a/documentation/docs/documentation/client/arch/tuple_pojo_mapping.en.md +++ b/documentation/doc-src/pages/client/arch/tuple_pojo_mapping.en.md @@ -2,7 +2,7 @@ title: Data Mapping --- -## Tarantool <-> Java POJO Field Mapping +## Tarantool ⟷ Java POJO Field Mapping Working with Plain Old Java Objects (POJO) in Tarantool is done using the Jackson library. diff --git a/documentation/docs/documentation/client/arch/tuple_pojo_mapping.md b/documentation/doc-src/pages/client/arch/tuple_pojo_mapping.md similarity index 99% rename from documentation/docs/documentation/client/arch/tuple_pojo_mapping.md rename to documentation/doc-src/pages/client/arch/tuple_pojo_mapping.md index c306ba9..a6815b3 100644 --- a/documentation/docs/documentation/client/arch/tuple_pojo_mapping.md +++ b/documentation/doc-src/pages/client/arch/tuple_pojo_mapping.md @@ -2,7 +2,7 @@ title: Маппинг данных --- -## Маппинг полей Tarantool <-> Java POJO +## Маппинг полей Tarantool ⟷ Java POJO Работа с Plain Old Java Objects (POJO) в Tarantool происходит с помощью библиотеки Jackson. diff --git a/documentation/doc-src/pages/client/examples/connection/index.en.md b/documentation/doc-src/pages/client/examples/connection/index.en.md new file mode 100644 index 0000000..b8cc404 --- /dev/null +++ b/documentation/doc-src/pages/client/examples/connection/index.en.md @@ -0,0 +1,7 @@ +--- +title: Connection to instances +hide: + - toc +--- + +This section provides examples of connecting to Tarantool using the `tarantool-java-sdk`. diff --git a/documentation/doc-src/pages/client/examples/connection/index.md b/documentation/doc-src/pages/client/examples/connection/index.md new file mode 100644 index 0000000..dabe45d --- /dev/null +++ b/documentation/doc-src/pages/client/examples/connection/index.md @@ -0,0 +1,7 @@ +--- +title: Подключение к узлам +hide: + - toc +--- + +В данном разделе приводятся примеры подключения к Tarantool с помощью `tarantool-java-sdk`. diff --git a/documentation/doc-src/pages/client/examples/connection/single-node.en.md b/documentation/doc-src/pages/client/examples/connection/single-node.en.md new file mode 100644 index 0000000..f483abf --- /dev/null +++ b/documentation/doc-src/pages/client/examples/connection/single-node.en.md @@ -0,0 +1,34 @@ +--- +title: Connection to single instance Tarantool +--- + +To connect to a single instance, run the following code: + +=== "tarantool-java-sdk" + + ```java title="Connection to single instance Tarantool" + --8<-- "client/TarantoolSingleInstanceConnectionTJSDKExample.java:tarantool-single-instance-tjsdk" + ``` + + ```java title="Parent abstract class to create docker container" + --8<-- "client/TarantoolSingleInstanceConnectionAbstractExample.java:tarantool-single-instance-abstract" + ``` + + ```java title="Class to create container" + --8<-- "testcontainers/utils/TarantoolSingleNodeConfigUtils.java:create-single-instance" + ``` + +=== "cartridge-driver" + + ```java title="Connection to single instance Tarantool" + --8<-- "client/TarantoolSingleInstanceConnectionCartridgeDriverExample.java:tarantool-single-instance-cartridge-driver" + ``` + + ```java title="Parent abstract class to create docker container" + --8<-- "client/TarantoolSingleInstanceConnectionAbstractExample.java:tarantool-single-instance-abstract" + ``` + + ```java title="Class to create container" + --8<-- "testcontainers/utils/TarantoolSingleNodeConfigUtils.java:create-single-instance" + ``` + \ No newline at end of file diff --git a/documentation/doc-src/pages/client/examples/connection/single-node.md b/documentation/doc-src/pages/client/examples/connection/single-node.md new file mode 100644 index 0000000..e2bf395 --- /dev/null +++ b/documentation/doc-src/pages/client/examples/connection/single-node.md @@ -0,0 +1,33 @@ +--- +title: Подключение к одиночному узлу +--- + +Для того чтобы подключиться к одиночному узлу необходимо выполнить следующий код: + +=== "tarantool-java-sdk" + + ```java title="Подключение к одному узлу Tarantool" + --8<-- "client/TarantoolSingleInstanceConnectionTJSDKExample.java:tarantool-single-instance-tjsdk" + ``` + + ```java title="Родительский класс с созданием контейнера" + --8<-- "client/TarantoolSingleInstanceConnectionAbstractExample.java:tarantool-single-instance-abstract" + ``` + + ```java title="Класс, который создает контейнер" + --8<-- "testcontainers/utils/TarantoolSingleNodeConfigUtils.java:create-single-instance" + ``` + +=== "cartridge-driver" + + ```java title="Подключение к одному узлу Tarantool" + --8<-- "client/TarantoolSingleInstanceConnectionCartridgeDriverExample.java:tarantool-single-instance-cartridge-driver" + ``` + + ```java title="Родительский класс с созданием контейнера" + --8<-- "client/TarantoolSingleInstanceConnectionAbstractExample.java:tarantool-single-instance-abstract" + ``` + + ```java title="Класс, который создает контейнер" + --8<-- "testcontainers/utils/TarantoolSingleNodeConfigUtils.java:create-single-instance" + ``` diff --git a/documentation/doc-src/pages/client/examples/index.en.md b/documentation/doc-src/pages/client/examples/index.en.md new file mode 100644 index 0000000..2500ea7 --- /dev/null +++ b/documentation/doc-src/pages/client/examples/index.en.md @@ -0,0 +1,12 @@ +--- +title: Usage examples +hide: + - toc +--- + +This section provides examples of using the `tarantool-java-sdk`. + +???+ note + + Where possible, the code is compared with + [cartridge-java](https://github.com/tarantool/cartridge-java) diff --git a/documentation/doc-src/pages/client/examples/index.md b/documentation/doc-src/pages/client/examples/index.md new file mode 100644 index 0000000..72d969f --- /dev/null +++ b/documentation/doc-src/pages/client/examples/index.md @@ -0,0 +1,12 @@ +--- +title: Примеры использования +hide: + - toc +--- + +В разделе приводятся примеры использования `tarantool-java-sdk`. + +???+ note "Заметка" + + Где это возможно, производится сравнение кода с + [cartridge-java](https://github.com/tarantool/cartridge-java) diff --git a/documentation/docs/documentation/client/index.en.md b/documentation/doc-src/pages/client/index.en.md similarity index 100% rename from documentation/docs/documentation/client/index.en.md rename to documentation/doc-src/pages/client/index.en.md diff --git a/documentation/docs/documentation/client/index.md b/documentation/doc-src/pages/client/index.md similarity index 100% rename from documentation/docs/documentation/client/index.md rename to documentation/doc-src/pages/client/index.md diff --git a/documentation/docs/documentation/index.en.md b/documentation/doc-src/pages/index.en.md similarity index 100% rename from documentation/docs/documentation/index.en.md rename to documentation/doc-src/pages/index.en.md diff --git a/documentation/docs/documentation/index.md b/documentation/doc-src/pages/index.md similarity index 79% rename from documentation/docs/documentation/index.md rename to documentation/doc-src/pages/index.md index 93487f8..665ab4b 100644 --- a/documentation/docs/documentation/index.md +++ b/documentation/doc-src/pages/index.md @@ -4,4 +4,4 @@ hide: - toc --- -Документация разделена на секции - каждая из которых применима к одному из модулей библиотеки. \ No newline at end of file +Документация разделена на секции - каждая из которых применима к одному из модулей библиотеки. diff --git a/documentation/docs/documentation/spring-data/configuration.en.md b/documentation/doc-src/pages/spring-data/configuration.en.md similarity index 100% rename from documentation/docs/documentation/spring-data/configuration.en.md rename to documentation/doc-src/pages/spring-data/configuration.en.md diff --git a/documentation/docs/documentation/spring-data/configuration.md b/documentation/doc-src/pages/spring-data/configuration.md similarity index 100% rename from documentation/docs/documentation/spring-data/configuration.md rename to documentation/doc-src/pages/spring-data/configuration.md diff --git a/documentation/docs/documentation/spring-data/derived-methods.en.md b/documentation/doc-src/pages/spring-data/derived-methods.en.md similarity index 100% rename from documentation/docs/documentation/spring-data/derived-methods.en.md rename to documentation/doc-src/pages/spring-data/derived-methods.en.md diff --git a/documentation/docs/documentation/spring-data/derived-methods.md b/documentation/doc-src/pages/spring-data/derived-methods.md similarity index 100% rename from documentation/docs/documentation/spring-data/derived-methods.md rename to documentation/doc-src/pages/spring-data/derived-methods.md diff --git a/documentation/docs/documentation/spring-data/index.en.md b/documentation/doc-src/pages/spring-data/index.en.md similarity index 100% rename from documentation/docs/documentation/spring-data/index.en.md rename to documentation/doc-src/pages/spring-data/index.en.md diff --git a/documentation/docs/documentation/spring-data/index.md b/documentation/doc-src/pages/spring-data/index.md similarity index 100% rename from documentation/docs/documentation/spring-data/index.md rename to documentation/doc-src/pages/spring-data/index.md diff --git a/documentation/docs/documentation/spring-data/page-slice-pageable.en.md b/documentation/doc-src/pages/spring-data/page-slice-pageable.en.md similarity index 100% rename from documentation/docs/documentation/spring-data/page-slice-pageable.en.md rename to documentation/doc-src/pages/spring-data/page-slice-pageable.en.md diff --git a/documentation/docs/documentation/spring-data/page-slice-pageable.md b/documentation/doc-src/pages/spring-data/page-slice-pageable.md similarity index 100% rename from documentation/docs/documentation/spring-data/page-slice-pageable.md rename to documentation/doc-src/pages/spring-data/page-slice-pageable.md diff --git a/documentation/docs/documentation/spring-data/query-lua.en.md b/documentation/doc-src/pages/spring-data/query-lua.en.md similarity index 100% rename from documentation/docs/documentation/spring-data/query-lua.en.md rename to documentation/doc-src/pages/spring-data/query-lua.en.md diff --git a/documentation/docs/documentation/spring-data/query-lua.md b/documentation/doc-src/pages/spring-data/query-lua.md similarity index 100% rename from documentation/docs/documentation/spring-data/query-lua.md rename to documentation/doc-src/pages/spring-data/query-lua.md diff --git a/documentation/docs/documentation/spring-data/repository.en.md b/documentation/doc-src/pages/spring-data/repository.en.md similarity index 100% rename from documentation/docs/documentation/spring-data/repository.en.md rename to documentation/doc-src/pages/spring-data/repository.en.md diff --git a/documentation/docs/documentation/spring-data/repository.md b/documentation/doc-src/pages/spring-data/repository.md similarity index 100% rename from documentation/docs/documentation/spring-data/repository.md rename to documentation/doc-src/pages/spring-data/repository.md diff --git a/documentation/docs/documentation/spring-data/scroll-api.en.md b/documentation/doc-src/pages/spring-data/scroll-api.en.md similarity index 100% rename from documentation/docs/documentation/spring-data/scroll-api.en.md rename to documentation/doc-src/pages/spring-data/scroll-api.en.md diff --git a/documentation/docs/documentation/spring-data/scroll-api.md b/documentation/doc-src/pages/spring-data/scroll-api.md similarity index 100% rename from documentation/docs/documentation/spring-data/scroll-api.md rename to documentation/doc-src/pages/spring-data/scroll-api.md diff --git a/documentation/docs/documentation/spring-data/sort.en.md b/documentation/doc-src/pages/spring-data/sort.en.md similarity index 100% rename from documentation/docs/documentation/spring-data/sort.en.md rename to documentation/doc-src/pages/spring-data/sort.en.md diff --git a/documentation/docs/documentation/spring-data/sort.md b/documentation/doc-src/pages/spring-data/sort.md similarity index 100% rename from documentation/docs/documentation/spring-data/sort.md rename to documentation/doc-src/pages/spring-data/sort.md diff --git a/documentation/docs/documentation/testcontainers/index.en.md b/documentation/doc-src/pages/testcontainers/index.en.md similarity index 100% rename from documentation/docs/documentation/testcontainers/index.en.md rename to documentation/doc-src/pages/testcontainers/index.en.md diff --git a/documentation/docs/documentation/testcontainers/index.md b/documentation/doc-src/pages/testcontainers/index.md similarity index 100% rename from documentation/docs/documentation/testcontainers/index.md rename to documentation/doc-src/pages/testcontainers/index.md diff --git a/documentation/docs/documentation/testcontainers/single/index.en.md b/documentation/doc-src/pages/testcontainers/single/index.en.md similarity index 100% rename from documentation/docs/documentation/testcontainers/single/index.en.md rename to documentation/doc-src/pages/testcontainers/single/index.en.md diff --git a/documentation/docs/documentation/testcontainers/single/index.md b/documentation/doc-src/pages/testcontainers/single/index.md similarity index 100% rename from documentation/docs/documentation/testcontainers/single/index.md rename to documentation/doc-src/pages/testcontainers/single/index.md diff --git a/documentation/docs/documentation/testcontainers/single/single-node-testcontainers-arch.en.md b/documentation/doc-src/pages/testcontainers/single/single-node-testcontainers-arch.en.md similarity index 99% rename from documentation/docs/documentation/testcontainers/single/single-node-testcontainers-arch.en.md rename to documentation/doc-src/pages/testcontainers/single/single-node-testcontainers-arch.en.md index 19c000c..f039534 100644 --- a/documentation/docs/documentation/testcontainers/single/single-node-testcontainers-arch.en.md +++ b/documentation/doc-src/pages/testcontainers/single/single-node-testcontainers-arch.en.md @@ -180,7 +180,7 @@ Container restart is performed using the `void restart(long delay, TimeUnit unit @Test public void testCloseWithSafeMount() { - final DockerImageName image = DockerImageName.parse("tarantool/tarantool:3.4.1"); + final DockerImageName image = DockerImageName.parse("tarantool/tarantool:3.6.0"); final Path pathToConfigFile = Paths.get("path/to/config.yaml"); try (TarantoolContainer container = new Tarantool3Container(image, @@ -213,7 +213,7 @@ Container restart is performed using the `void restart(long delay, TimeUnit unit @Test public void testCloseWithRemoveMount() { - final DockerImageName image = DockerImageName.parse("tarantool/tarantool:3.4.1"); + final DockerImageName image = DockerImageName.parse("tarantool/tarantool:3.6.0"); final Path pathToConfigFile = Paths.get("path/to/config.yaml"); try (TarantoolContainer container = new Tarantool3Container(image, diff --git a/documentation/docs/documentation/testcontainers/single/single-node-testcontainers-arch.md b/documentation/doc-src/pages/testcontainers/single/single-node-testcontainers-arch.md similarity index 99% rename from documentation/docs/documentation/testcontainers/single/single-node-testcontainers-arch.md rename to documentation/doc-src/pages/testcontainers/single/single-node-testcontainers-arch.md index b687204..fef3f52 100644 --- a/documentation/docs/documentation/testcontainers/single/single-node-testcontainers-arch.md +++ b/documentation/doc-src/pages/testcontainers/single/single-node-testcontainers-arch.md @@ -195,7 +195,7 @@ stop @Test public void testCloseWithSafeMount() { - final DockerImageName image = DockerImageName.parse("tarantool/tarantool:3.4.1"); + final DockerImageName image = DockerImageName.parse("tarantool/tarantool:3.6.0"); final Path pathToConfigFile = Paths.get("path/to/config.yaml"); try (TarantoolContainer container = new Tarantool3Container(image, @@ -228,7 +228,7 @@ stop @Test public void testCloseWithRemoveMount() { - final DockerImageName image = DockerImageName.parse("tarantool/tarantool:3.4.1"); + final DockerImageName image = DockerImageName.parse("tarantool/tarantool:3.6.0"); final Path pathToConfigFile = Paths.get("path/to/config.yaml"); try (TarantoolContainer container = new Tarantool3Container(image, diff --git a/documentation/docs/documentation/testcontainers/single/single-node-testcontainers-standard-impl-example.en.md b/documentation/doc-src/pages/testcontainers/single/single-node-testcontainers-standard-impl-example.en.md similarity index 97% rename from documentation/docs/documentation/testcontainers/single/single-node-testcontainers-standard-impl-example.en.md rename to documentation/doc-src/pages/testcontainers/single/single-node-testcontainers-standard-impl-example.en.md index 32af107..5dd26e9 100644 --- a/documentation/docs/documentation/testcontainers/single/single-node-testcontainers-standard-impl-example.en.md +++ b/documentation/doc-src/pages/testcontainers/single/single-node-testcontainers-standard-impl-example.en.md @@ -143,7 +143,7 @@ public class TestClass { } ``` -Let's create a container for `Tarantool 3.4.1` and start it: +Let's create a container for `Tarantool 3.6.0` and start it: ```java import java.io.IOException; @@ -188,7 +188,7 @@ public class TestClass { public void test() throws IOException, InterruptedException { final Path pathToConfigFile = createSimpleTestConfigFile(tempDir); - final DockerImageName image = DockerImageName.parse("tarantool/tarantool:3.4.1"); + final DockerImageName image = DockerImageName.parse("tarantool/tarantool:3.6.0"); // NODE must match the instance name in the configuration file try (TarantoolContainer container = new Tarantool3Container(image, NODE) @@ -250,10 +250,10 @@ public class TestClass { As a result of the execution, you will get similar logs: ``` -15:15:31.769 [main] INFO tc.tarantool/tarantool:3.4.1 - Creating container for image: tarantool/tarantool:3.4.1 -15:15:32.185 [main] INFO tc.tarantool/tarantool:3.4.1 - Container tarantool/tarantool:3.4.1 is starting: eb542dfac096dead65b1f00e39f1926d4dfc8267dd0e8b3a7f4ecae62d02d306 +15:15:31.769 [main] INFO tc.tarantool/tarantool:3.6.0 - Creating container for image: tarantool/tarantool:3.6.0 +15:15:32.185 [main] INFO tc.tarantool/tarantool:3.6.0 - Container tarantool/tarantool:3.6.0 is starting: eb542dfac096dead65b1f00e39f1926d4dfc8267dd0e8b3a7f4ecae62d02d306 15:15:32.382 [docker-java-stream-1077198046] INFO o.t.c.tarantool.Tarantool3Container - [test-node] STDERR: started -15:15:32.395 [docker-java-stream-1077198046] INFO o.t.c.tarantool.Tarantool3Container - [test-node] STDERR: 2025-08-27 12:15:32.364 [1] main/104/interactive main.cc:497 I> Tarantool 3.4.1-0-g0b3c0eb8c0b Linux-aarch64-RelWithDebInfo +15:15:32.395 [docker-java-stream-1077198046] INFO o.t.c.tarantool.Tarantool3Container - [test-node] STDERR: 2025-08-27 12:15:32.364 [1] main/104/interactive main.cc:497 I> Tarantool 3.6.0-0-g9a006b00642 Linux-aarch64-RelWithDebInfo 15:15:32.395 [docker-java-stream-1077198046] INFO o.t.c.tarantool.Tarantool3Container - [test-node] STDERR: 2025-08-27 12:15:32.364 [1] main/104/interactive main.cc:499 I> log level 5 (INFO) 15:15:32.395 [docker-java-stream-1077198046] INFO o.t.c.tarantool.Tarantool3Container - [test-node] STDERR: 2025-08-27 12:15:32.364 [1] main/104/interactive gc.c:131 I> wal/engine cleanup is paused 15:15:32.396 [docker-java-stream-1077198046] INFO o.t.c.tarantool.Tarantool3Container - [test-node] STDERR: 2025-08-27 12:15:32.365 [1] main/104/interactive tuple.c:411 I> mapping 268435456 bytes for memtx tuple arena... @@ -295,5 +295,5 @@ As a result of the execution, you will get similar logs: 15:15:32.420 [docker-java-stream-1077198046] INFO o.t.c.tarantool.Tarantool3Container - [test-node] STDERR: 2025-08-27 12:15:32.389 [1] main/104/interactive box.cc:444 I> box switched to rw 15:15:32.420 [docker-java-stream-1077198046] INFO o.t.c.tarantool.Tarantool3Container - [test-node] STDERR: 2025-08-27 12:15:32.389 [1] main/107/gc gc.c:319 I> wal/engine cleanup is resumed 15:15:32.421 [docker-java-stream-1077198046] INFO o.t.c.tarantool.Tarantool3Container - [test-node] STDERR: 2025-08-27 12:15:32.391 [1] main main.cc:1072 I> entering the event loop -15:15:32.451 [main] INFO tc.tarantool/tarantool:3.4.1 - Container tarantool/tarantool:3.4.1 started in PT0.682201S +15:15:32.451 [main] INFO tc.tarantool/tarantool:3.6.0 - Container tarantool/tarantool:3.6.0 started in PT0.682201S ``` diff --git a/documentation/docs/documentation/testcontainers/single/single-node-testcontainers-standard-impl-example.md b/documentation/doc-src/pages/testcontainers/single/single-node-testcontainers-standard-impl-example.md similarity index 96% rename from documentation/docs/documentation/testcontainers/single/single-node-testcontainers-standard-impl-example.md rename to documentation/doc-src/pages/testcontainers/single/single-node-testcontainers-standard-impl-example.md index 20034a8..5407ef1 100644 --- a/documentation/docs/documentation/testcontainers/single/single-node-testcontainers-standard-impl-example.md +++ b/documentation/doc-src/pages/testcontainers/single/single-node-testcontainers-standard-impl-example.md @@ -145,7 +145,7 @@ public class TestClass { } ``` -Создадим контейнер для `Tarantool 3.4.1` и запустим его: +Создадим контейнер для `Tarantool 3.6.0` и запустим его: ```java import java.io.IOException; @@ -190,7 +190,7 @@ public class TestClass { public void test() throws IOException, InterruptedException { final Path pathToConfigFile = createSimpleTestConfigFile(tempDir); - final DockerImageName image = DockerImageName.parse("tarantool/tarantool:3.4.1"); + final DockerImageName image = DockerImageName.parse("tarantool/tarantool:3.6.0"); // NODE должен соответствовать instance name в конфигурационном файле try (TarantoolContainer container = new Tarantool3Container(image, NODE) @@ -252,10 +252,10 @@ public class TestClass { В результате работы вы получите аналогичные логи: ``` -15:15:31.769 [main] INFO tc.tarantool/tarantool:3.4.1 - Creating container for image: tarantool/tarantool:3.4.1 -15:15:32.185 [main] INFO tc.tarantool/tarantool:3.4.1 - Container tarantool/tarantool:3.4.1 is starting: eb542dfac096dead65b1f00e39f1926d4dfc8267dd0e8b3a7f4ecae62d02d306 +15:15:31.769 [main] INFO tc.tarantool/tarantool:3.6.0 - Creating container for image: tarantool/tarantool:3.6.0 +15:15:32.185 [main] INFO tc.tarantool/tarantool:3.6.0 - Container tarantool/tarantool:3.6.0 is starting: eb542dfac096dead65b1f00e39f1926d4dfc8267dd0e8b3a7f4ecae62d02d306 15:15:32.382 [docker-java-stream-1077198046] INFO o.t.c.tarantool.Tarantool3Container - [test-node] STDERR: started -15:15:32.395 [docker-java-stream-1077198046] INFO o.t.c.tarantool.Tarantool3Container - [test-node] STDERR: 2025-08-27 12:15:32.364 [1] main/104/interactive main.cc:497 I> Tarantool 3.4.1-0-g0b3c0eb8c0b Linux-aarch64-RelWithDebInfo +15:15:32.395 [docker-java-stream-1077198046] INFO o.t.c.tarantool.Tarantool3Container - [test-node] STDERR: 2025-08-27 12:15:32.364 [1] main/104/interactive main.cc:497 I> Tarantool 3.6.0-0-g9a006b00642 Linux-aarch64-RelWithDebInfo 15:15:32.395 [docker-java-stream-1077198046] INFO o.t.c.tarantool.Tarantool3Container - [test-node] STDERR: 2025-08-27 12:15:32.364 [1] main/104/interactive main.cc:499 I> log level 5 (INFO) 15:15:32.395 [docker-java-stream-1077198046] INFO o.t.c.tarantool.Tarantool3Container - [test-node] STDERR: 2025-08-27 12:15:32.364 [1] main/104/interactive gc.c:131 I> wal/engine cleanup is paused 15:15:32.396 [docker-java-stream-1077198046] INFO o.t.c.tarantool.Tarantool3Container - [test-node] STDERR: 2025-08-27 12:15:32.365 [1] main/104/interactive tuple.c:411 I> mapping 268435456 bytes for memtx tuple arena... @@ -287,5 +287,5 @@ public class TestClass { 15:15:32.420 [docker-java-stream-1077198046] INFO o.t.c.tarantool.Tarantool3Container - [test-node] STDERR: 2025-08-27 12:15:32.389 [1] main/104/interactive box.cc:444 I> box switched to rw 15:15:32.420 [docker-java-stream-1077198046] INFO o.t.c.tarantool.Tarantool3Container - [test-node] STDERR: 2025-08-27 12:15:32.389 [1] main/108/checkpoint_daemon gc.c:650 I> scheduled next checkpoint for Wed Aug 27 13:35:30 2025 15:15:32.421 [docker-java-stream-1077198046] INFO o.t.c.tarantool.Tarantool3Container - [test-node] STDERR: 2025-08-27 12:15:32.391 [1] main main.cc:1072 I> entering the event loop -15:15:32.451 [main] INFO tc.tarantool/tarantool:3.4.1 - Container tarantool/tarantool:3.4.1 started in PT0.682201S +15:15:32.451 [main] INFO tc.tarantool/tarantool:3.6.0 - Container tarantool/tarantool:3.6.0 started in PT0.682201S ``` diff --git a/documentation/docs/documentation/testcontainers/single/single-node-testcontainers-standard-impl.en.md b/documentation/doc-src/pages/testcontainers/single/single-node-testcontainers-standard-impl.en.md similarity index 97% rename from documentation/docs/documentation/testcontainers/single/single-node-testcontainers-standard-impl.en.md rename to documentation/doc-src/pages/testcontainers/single/single-node-testcontainers-standard-impl.en.md index 280c21e..1a32127 100644 --- a/documentation/docs/documentation/testcontainers/single/single-node-testcontainers-standard-impl.en.md +++ b/documentation/doc-src/pages/testcontainers/single/single-node-testcontainers-standard-impl.en.md @@ -50,7 +50,7 @@ Tarantool3Container -[#008200,dashed]-^ TarantoolContainer @enduml ``` -The `Tarantool3Container` class allows you to create a `Tarantool 3.x` container object that satisfies the [contract](./single-node-testcontainers-arch.md) of `TarantoolContainer`. +The `Tarantool3Container` class allows you to create a `Tarantool 3.x` container object that satisfies the [contract](single-node-testcontainers-arch.md) of `TarantoolContainer`. ### Implementation Description diff --git a/documentation/docs/documentation/testcontainers/single/single-node-testcontainers-standard-impl.md b/documentation/doc-src/pages/testcontainers/single/single-node-testcontainers-standard-impl.md similarity index 98% rename from documentation/docs/documentation/testcontainers/single/single-node-testcontainers-standard-impl.md rename to documentation/doc-src/pages/testcontainers/single/single-node-testcontainers-standard-impl.md index da33db5..dab3ccf 100644 --- a/documentation/docs/documentation/testcontainers/single/single-node-testcontainers-standard-impl.md +++ b/documentation/doc-src/pages/testcontainers/single/single-node-testcontainers-standard-impl.md @@ -51,7 +51,7 @@ Tarantool3Container -[#008200,dashed]-^ TarantoolContainer ``` Класс `Tarantool3Container` позволяет создать объект контейнера `Tarantool 3.x`, удовлетворяющий -[контракту](./single-node-testcontainers-arch.md) `TarantoolContainer`. +[контракту](single-node-testcontainers-arch.md) `TarantoolContainer`. ### Описание реализации diff --git a/documentation/docs/documentation/testcontainers/tdb/index.en.md b/documentation/doc-src/pages/testcontainers/tdb/index.en.md similarity index 100% rename from documentation/docs/documentation/testcontainers/tdb/index.en.md rename to documentation/doc-src/pages/testcontainers/tdb/index.en.md diff --git a/documentation/docs/documentation/testcontainers/tdb/index.md b/documentation/doc-src/pages/testcontainers/tdb/index.md similarity index 100% rename from documentation/docs/documentation/testcontainers/tdb/index.md rename to documentation/doc-src/pages/testcontainers/tdb/index.md diff --git a/documentation/docs/documentation/testcontainers/tdb/tdb-cluster-testcontainers-arch.en.md b/documentation/doc-src/pages/testcontainers/tdb/tdb-cluster-testcontainers-arch.en.md similarity index 100% rename from documentation/docs/documentation/testcontainers/tdb/tdb-cluster-testcontainers-arch.en.md rename to documentation/doc-src/pages/testcontainers/tdb/tdb-cluster-testcontainers-arch.en.md diff --git a/documentation/docs/documentation/testcontainers/tdb/tdb-cluster-testcontainers-arch.md b/documentation/doc-src/pages/testcontainers/tdb/tdb-cluster-testcontainers-arch.md similarity index 100% rename from documentation/docs/documentation/testcontainers/tdb/tdb-cluster-testcontainers-arch.md rename to documentation/doc-src/pages/testcontainers/tdb/tdb-cluster-testcontainers-arch.md diff --git a/documentation/docs/documentation/testcontainers/tdb/tdb2-cluster-testcontainers-standard-impl-example.en.md b/documentation/doc-src/pages/testcontainers/tdb/tdb2-cluster-testcontainers-standard-impl-example.en.md similarity index 100% rename from documentation/docs/documentation/testcontainers/tdb/tdb2-cluster-testcontainers-standard-impl-example.en.md rename to documentation/doc-src/pages/testcontainers/tdb/tdb2-cluster-testcontainers-standard-impl-example.en.md diff --git a/documentation/docs/documentation/testcontainers/tdb/tdb2-cluster-testcontainers-standard-impl-example.md b/documentation/doc-src/pages/testcontainers/tdb/tdb2-cluster-testcontainers-standard-impl-example.md similarity index 100% rename from documentation/docs/documentation/testcontainers/tdb/tdb2-cluster-testcontainers-standard-impl-example.md rename to documentation/doc-src/pages/testcontainers/tdb/tdb2-cluster-testcontainers-standard-impl-example.md diff --git a/documentation/docs/documentation/testcontainers/tdb/tdb2-cluster-testcontainers-standard-impl.en.md b/documentation/doc-src/pages/testcontainers/tdb/tdb2-cluster-testcontainers-standard-impl.en.md similarity index 98% rename from documentation/docs/documentation/testcontainers/tdb/tdb2-cluster-testcontainers-standard-impl.en.md rename to documentation/doc-src/pages/testcontainers/tdb/tdb2-cluster-testcontainers-standard-impl.en.md index 8738b59..13512fb 100644 --- a/documentation/docs/documentation/testcontainers/tdb/tdb2-cluster-testcontainers-standard-impl.en.md +++ b/documentation/doc-src/pages/testcontainers/tdb/tdb2-cluster-testcontainers-standard-impl.en.md @@ -62,7 +62,7 @@ TDBCluster -[#008200,plain]-^ Startable @enduml ``` -The `TDB2ClusterImpl` class allows you to create an object managing the lifecycle of a TDB 2.x cluster, satisfying the [contract](./tdb-cluster-testcontainers-arch.md) of `TDBCluster`. +The `TDB2ClusterImpl` class allows you to create an object managing the lifecycle of a TDB 2.x cluster, satisfying the [contract](tdb-cluster-testcontainers-arch.md) of `TDBCluster`. ## Implementation Description diff --git a/documentation/docs/documentation/testcontainers/tdb/tdb2-cluster-testcontainers-standard-impl.md b/documentation/doc-src/pages/testcontainers/tdb/tdb2-cluster-testcontainers-standard-impl.md similarity index 98% rename from documentation/docs/documentation/testcontainers/tdb/tdb2-cluster-testcontainers-standard-impl.md rename to documentation/doc-src/pages/testcontainers/tdb/tdb2-cluster-testcontainers-standard-impl.md index 3275ca1..5688ac2 100644 --- a/documentation/docs/documentation/testcontainers/tdb/tdb2-cluster-testcontainers-standard-impl.md +++ b/documentation/doc-src/pages/testcontainers/tdb/tdb2-cluster-testcontainers-standard-impl.md @@ -63,7 +63,7 @@ TDBCluster -[#008200,plain]-^ Startable ``` Класс `TDB2ClusterImpl` позволяет создать объект, управляющий жизненным циклом кластера TDB 2.x, -удовлетворяющий [контракту](./tdb-cluster-testcontainers-arch.md) `TDBCluster`. +удовлетворяющий [контракту](tdb-cluster-testcontainers-arch.md) `TDBCluster`. ## Описание реализации diff --git a/documentation/docs/documentation/testcontainers/tqe/index.en.md b/documentation/doc-src/pages/testcontainers/tqe/index.en.md similarity index 100% rename from documentation/docs/documentation/testcontainers/tqe/index.en.md rename to documentation/doc-src/pages/testcontainers/tqe/index.en.md diff --git a/documentation/docs/documentation/testcontainers/tqe/index.md b/documentation/doc-src/pages/testcontainers/tqe/index.md similarity index 100% rename from documentation/docs/documentation/testcontainers/tqe/index.md rename to documentation/doc-src/pages/testcontainers/tqe/index.md diff --git a/documentation/docs/documentation/testcontainers/tqe/tqe-cluster-arch.en.md b/documentation/doc-src/pages/testcontainers/tqe/tqe-cluster-arch.en.md similarity index 100% rename from documentation/docs/documentation/testcontainers/tqe/tqe-cluster-arch.en.md rename to documentation/doc-src/pages/testcontainers/tqe/tqe-cluster-arch.en.md diff --git a/documentation/docs/documentation/testcontainers/tqe/tqe-cluster-arch.md b/documentation/doc-src/pages/testcontainers/tqe/tqe-cluster-arch.md similarity index 100% rename from documentation/docs/documentation/testcontainers/tqe/tqe-cluster-arch.md rename to documentation/doc-src/pages/testcontainers/tqe/tqe-cluster-arch.md diff --git a/documentation/docs/documentation/testcontainers/tqe/tqe-cluster-example.en.md b/documentation/doc-src/pages/testcontainers/tqe/tqe-cluster-example.en.md similarity index 100% rename from documentation/docs/documentation/testcontainers/tqe/tqe-cluster-example.en.md rename to documentation/doc-src/pages/testcontainers/tqe/tqe-cluster-example.en.md diff --git a/documentation/docs/documentation/testcontainers/tqe/tqe-cluster-example.md b/documentation/doc-src/pages/testcontainers/tqe/tqe-cluster-example.md similarity index 100% rename from documentation/docs/documentation/testcontainers/tqe/tqe-cluster-example.md rename to documentation/doc-src/pages/testcontainers/tqe/tqe-cluster-example.md diff --git a/documentation/mkdocs.yml b/documentation/mkdocs.yml index 45e14f9..38fdf2f 100644 --- a/documentation/mkdocs.yml +++ b/documentation/mkdocs.yml @@ -3,6 +3,7 @@ copyright: Copyright ©️ 2025 VK Tech repo_name: tarantool/tarantool-java-sdk repo_url: https://github.com/tarantool/tarantool-java-sdk site_url: https://tarantool.github.io/tarantool-java-sdk/ +docs_dir: doc-src strict: true extra: @@ -41,10 +42,14 @@ plugins: Одиночный узел: Single Node Кластер TarantoolDB: TarantoolDB Cluster Кластер TQE: TQE Cluster + Примеры использования: Usage examples + Подключение к узлам: Connecting to nodes - drawio: darkmode: true - plantuml: puml_url: https://www.plantuml.com/plantuml/ + # в секундах(in seconds) + request_timeout: 300 theme: features: @@ -95,51 +100,56 @@ nav: - Главная: - index.md - Документация: - - documentation/index.md + - pages/index.md - Spring Data: - - documentation/spring-data/index.md - - documentation/spring-data/configuration.md - - documentation/spring-data/repository.md - - documentation/spring-data/derived-methods.md - - documentation/spring-data/sort.md - - documentation/spring-data/query-lua.md - - documentation/spring-data/page-slice-pageable.md - - documentation/spring-data/scroll-api.md + - pages/spring-data/index.md + - pages/spring-data/configuration.md + - pages/spring-data/repository.md + - pages/spring-data/derived-methods.md + - pages/spring-data/sort.md + - pages/spring-data/query-lua.md + - pages/spring-data/page-slice-pageable.md + - pages/spring-data/scroll-api.md - Высокоуровневый клиент: - - documentation/client/index.md + - pages/client/index.md - Архитектура: - - documentation/client/arch/index.md - - documentation/client/arch/high-level-arch.md - - documentation/client/arch/heartbeat.md - - documentation/client/arch/balancer.md - - documentation/client/arch/connection-pool.md - - documentation/client/arch/instance-connection-group.md - - documentation/client/arch/exception-handling.md - - documentation/client/arch/connection-to-multiple-nodes.md - - documentation/client/arch/call.md - - documentation/client/arch/tuple_pojo_mapping.md + - pages/client/arch/index.md + - pages/client/arch/high-level-arch.md + - pages/client/arch/heartbeat.md + - pages/client/arch/balancer.md + - pages/client/arch/connection-pool.md + - pages/client/arch/instance-connection-group.md + - pages/client/arch/exception-handling.md + - pages/client/arch/connection-to-multiple-nodes.md + - pages/client/arch/call.md + - pages/client/arch/tuple_pojo_mapping.md + - Примеры использования: + - pages/client/examples/index.md + - Подключение к узлам: + - pages/client/examples/connection/index.md + - pages/client/examples/connection/single-node.md - Tarantool Testcontainers: - - documentation/testcontainers/index.md + - pages/testcontainers/index.md - Одиночный узел: - - documentation/testcontainers/single/index.md - - documentation/testcontainers/single/single-node-testcontainers-arch.md - - documentation/testcontainers/single/single-node-testcontainers-standard-impl.md - - documentation/testcontainers/single/single-node-testcontainers-standard-impl-example.md + - pages/testcontainers/single/index.md + - pages/testcontainers/single/single-node-testcontainers-arch.md + - pages/testcontainers/single/single-node-testcontainers-standard-impl.md + - pages/testcontainers/single/single-node-testcontainers-standard-impl-example.md - Кластер TarantoolDB: - - documentation/testcontainers/tdb/index.md - - documentation/testcontainers/tdb/tdb-cluster-testcontainers-arch.md - - documentation/testcontainers/tdb/tdb2-cluster-testcontainers-standard-impl.md - - documentation/testcontainers/tdb/tdb2-cluster-testcontainers-standard-impl-example.md + - pages/testcontainers/tdb/index.md + - pages/testcontainers/tdb/tdb-cluster-testcontainers-arch.md + - pages/testcontainers/tdb/tdb2-cluster-testcontainers-standard-impl.md + - pages/testcontainers/tdb/tdb2-cluster-testcontainers-standard-impl-example.md - Кластер TQE: - - documentation/testcontainers/tqe/index.md - - documentation/testcontainers/tqe/tqe-cluster-arch.md - - documentation/testcontainers/tqe/tqe-cluster-example.md + - pages/testcontainers/tqe/index.md + - pages/testcontainers/tqe/tqe-cluster-arch.md + - pages/testcontainers/tqe/tqe-cluster-example.md markdown_extensions: + - md_in_html - tables - admonition - pymdownx.details - - pymdownx.superfences - pymdownx.tabbed: alternate_style: true - footnotes @@ -153,11 +163,19 @@ markdown_extensions: anchor_linenums: true line_spans: __spanz pygments_lang_class: true + default_lang: java - pymdownx.inlinehilite - - pymdownx.snippets + - pymdownx.snippets: + check_paths: true + base_path: doc-src/java/src - def_list - pymdownx.tasklist: custom_checkbox: true + - pymdownx.superfences: + custom_fences: + - name: mermaid + class: mermaid + format: !!python/name:pymdownx.superfences.fence_code_format exclude_docs: | venv diff --git a/documentation/pom.xml b/documentation/pom.xml new file mode 100644 index 0000000..9b94b9c --- /dev/null +++ b/documentation/pom.xml @@ -0,0 +1,111 @@ + + + 4.0.0 + + io.tarantool + tarantool-java-sdk + 2.0.0-SNAPSHOT + + + site + + + 0.13.0 + 5.14.0 + 17 + 17 + ${project.parent.basedir}/LICENSE_HEADER.txt + + + + + + io.tarantool + tarantool-client + 2.0.0-SNAPSHOT + import + pom + + + io.tarantool + testcontainers + 2.0.0-SNAPSHOT + import + pom + + + org.junit + junit-bom + ${junit.version} + import + pom + + + io.tarantool + cartridge-driver + ${cartridge-java.version} + test + + + + + + + io.tarantool + tarantool-client + test + + + io.tarantool + testcontainers + test + + + org.junit.jupiter + junit-jupiter + test + + + ch.qos.logback + logback-classic + test + + + io.tarantool + cartridge-driver + + + io.netty + netty-transport + + + io.netty + netty-handler + + + io.netty + netty-codec + + + io.netty + netty-codec-http + + + org.msgpack + msgpack-core + + + + + + + doc-src/java/src + + + doc-src/java/resources + + + + diff --git a/documentation/readme-images/navigation.png b/documentation/readme-images/navigation.png new file mode 100644 index 0000000000000000000000000000000000000000..5b9d1c55b3e2d012ac0ca9a8bd6ad77a8b8dd353 GIT binary patch literal 117782 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�hxl| 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

d@CedK`C*=h)6v4jqy#ef8^VzEN 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 CHeVY6 literal 0 HcmV?d00001 diff --git a/documentation/requirements.txt b/documentation/requirements.txt index e361f0a..9c72964 100644 --- a/documentation/requirements.txt +++ b/documentation/requirements.txt @@ -1,5 +1,5 @@ mkdocs-material==9.7.0 mike==v2.1.3 -mkdocs-drawio==v1.12.2 +mkdocs-drawio==v1.13.0 mkdocs_puml==v2.3.0 mkdocs-static-i18n[material]==v1.3.0 diff --git a/pom.xml b/pom.xml index 44d92b5..29d1540 100644 --- a/pom.xml +++ b/pom.xml @@ -642,5 +642,6 @@ testcontainers jacoco-coverage-aggregate-report testcontainers-autogen + documentation