Search
Write a publication
Pull to refresh
3
0
Кирилл @KirillKurdyukov

Software Engineer YDB AppTeam

Send message

Мне кажется, что Docker образ Flyway не поддерживает кастомные расширения databaseType. (сущность, расширяющая flyway).

https://github.com/flyway/flyway-docker/issues/159 завел ишью по этому поводу.

Обратите внимание какие директории доступны flyway/libexec/lib 

гипотеза: /flyway/libexec/lib - зашита в образе

Спасибо вам за подробное разъяснение вашей проблемы!

Добрый день!
Я воспроизвел вашу проблему у себя локально. И сделал пару наблюдений:
1. Не увидел flyway/libexec/lib в образе
2. Боюсь, что список баз данных в образе ограничен

Продолжу изучать вопрос.

Добрый день, ADO.NET доступен в Ydb.Sdk, начиная с версии 0.7.0. Вы можете использовать со связкой Dapper.

Распределенные блокировки в Liquibase

Liquibase создает таблицу DATABASECHANGELOGLOCK, в которой содержится одна запись.

| ID | LOCKED | LOCKEDBY | LOCKGRANTED |
|:---|:-------|:---------|:------------|
| 1  | false  | null     | null        |

Блокировка для большинства СУБД происходит следующим образом:

-- acquire lock
SELECT LOCKED FROM DATABASECHANGELOGLOCK WHERE ID = 1;

-- Если false, делаем запрос на взятие блокировки

UPDATE DATABASECHANGELOGLOCK SET LOCKED = true .. WHERE ID = 1;

-- Если UPDATE вернул 0, то блокировку взять не удалось, повторим взятие блокировки через 1 секунду.

-- run migrations..

-- release lock
UPDATE DATABASECHANGELOGLOCK SET LOCKED = false WHERE ID = 1;

В текущем виде этот подход не позволит получить корректно распределенную блокировку для YDB, так как на данный момент UPDATE не возвращает количество обновленных строк. Этот способ становится рабочим, если взятие блокировки делать в транзакции уровня SERIALIZABLE

На этом уровне изоляции транзакция фиксирует состояние записи согласно модели MVCC. Если другая транзакция изменяет те же данные, текущая транзакция становится недействительной, поскольку она работала с уже неактуальной версией данных.

-- acquire lock
SELECT LOCKED FROM DATABASECHANGELOGLOCK WHERE ID = 1;

-- Если false, делаем запрос на взятие блокировки

UPDATE DATABASECHANGELOGLOCK SET LOCKED = true .. WHERE ID = 1;
COMMIT;

-- Transaction lock invalidated - означет, что блокировку не удалось взять, кто - то нас обогнал

Клиенты, которые не получили блокировку пытаются получить ее снова с интервалом 1 секунда.

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Works in
Date of birth
Registered
Activity