Что означает исключение Datomic `read-transactor-location-failed`?

Я получаю следующее исключение при удалении или создании базы данных Datomic (с Datomic Pro 0.9.4899):

Exception in thread "main" java.lang.IllegalArgumentException: :db.error/read-transactor-location-failed Could not read transactor location from storage
    at datomic.error$arg.invoke(error.clj:55)
    at datomic.coordination$check_peer_version.invoke(coordination.clj:138)
    at datomic.coordination$lookup_compatible_transactor_endpoint.invoke(coordination.clj:149)
    at datomic.peer$send_admin_request$fn__8594.invoke(peer.clj:713)
    at datomic.peer$send_admin_request.invoke(peer.clj:707)
    at datomic.peer$delete_database.invoke(peer.clj:745)
    at clojure.lang.Var.invoke(Var.java:379)
    at datomic.Peer.deleteDatabase(Peer.java:142)
    at datomic.api$delete_database.invoke(api.clj:23)
...

Что означает это исключение? Каковы некоторые общие причины, по которым это может произойти?


person Jeff Terrell Ph.D.    schedule 16.11.2014    source источник
comment
Какое хранилище вы используете?   -  person Ben Kamphaus    schedule 25.11.2014
comment
Я использую Amazon DynamoDB.   -  person Jeff Terrell Ph.D.    schedule 03.12.2014


Ответы (3)


Когда транзакторы запускаются, они записывают свое местоположение в хранилище. Они фактически пишут свое местоположение с каждым сообщением о сердцебиении. Если вы видите это сообщение, когда одноранговый узел пытается подключиться, это означает, что либо местоположение транзакции не было записано, либо они не могут прочитать данные из хранилища по какой-либо иной причине (и при попытке сделать это первым столкнулись с этой ошибкой).

Причиной этого для конфигурации AWS — скажем, с AWS CloudFormation и DynamoDB в качестве хранилища — может быть запуск с файлом свойств транзакций, который неправильно настроен для записи в хранилище. Когда одноранговые узлы пытаются подключиться к хранилищу, они не смогут прочитать местоположение транзактора. Это может быть связано с тем, что транзактор и одноранговые узлы указывают на разные хранилища. Вы также можете столкнуться с проблемами разрешений, например. транзактор не имеет прав на запись в указанное вами хранилище (конфигурация групп безопасности и т. д.)

В любом случае, общая причина этого заключается в том, о чем говорится в сообщении об ошибке, что местоположение транзакции не может быть прочитано из хранилища. Похоже, недостающая деталь заключается в том, как это происходит, когда система исправна и правильно настроена: одноранговые узлы считывают местоположение транзактора из хранилища и что транзактор записывает свое местоположение как часть пульса (а в случае аварийного переключения резервный транзактор напишет свое местоположение, когда вступит во владение). Этому могут способствовать различные проблемы с конфигурацией системы.

person Ben Kamphaus    schedule 08.12.2014
comment
Имеет большой смысл. Спасибо за подробный ответ. - person Jeff Terrell Ph.D.; 09.12.2014
comment
так как вы отладили это? Я использовал шаблон cloudformation из github. com/vrivellino/clojure-west-2014-demo/blob/master/config/ и теперь я вижу это сообщение об ошибке - person user299709; 01.06.2016

Прошло две недели с тех пор, как я столкнулся с этим. Кажется, я понял ответ, но не уверен, что правильно его помню. Так что я сделаю это вики сообщества на случай, если я ошибаюсь.

:db.error/read-transactor-location-failed означает, что в местоположении, настроенном в Datomic, нет действительной серверной службы хранения.

Я столкнулся с этой ошибкой в ​​AWS CloudFormation. У меня был и транзактор (работающий на экземпляре EC2), и внутреннее хранилище (таблица DynamoDB). Я думаю, что эта ошибка произошла из-за того, что транзактор запустился до создания таблицы DynamoDB. (Добавление предложения DependsOn к экземпляру транзакции устранило проблему.)

person Community    schedule 04.12.2014
comment
Код, как таковой, в основном является артефактом имени, которое вы выбираете для таблицы DynamoDB, поэтому не имеет особого смысла делиться здесь кодом. Вот дополнительная информация о предложении DependsOn: docs.aws .amazon.com/AWSCloudFormation/latest/UserGuide/ - person Jeff Terrell Ph.D.; 01.06.2016

Я получаю эту ошибку, когда я подключаюсь без пароля в базе данных uri

datomic:dev://transactor:4334/mydb?password=XxXxXx
person Erik van Velzen    schedule 19.04.2021