Ilya
А че там?
Dmitriy
https://docs.mongodb.com/manual/core/transactions/
Ilya
Кто-то юзает?
Yaroslav
Но видел статью как транзакции без реплики делать
Yaroslav
Я честно их не юзаю да и потребности не было
Dmitriy
Dmitriy
Ilya
Dmitriy
я же сделал реплай поста с которого читать, нажмите на него, не стесняйтесь)
yopp
yopp
В монге нет user defined блокировок как класса
yopp
Это скорее плюс, чем минус, особенно в шарде. но есть ряд случаев когда с этим будет не очень удобно жить
yopp
Если у вас один документ, то оптимистичной блокировки будет более чем достаточно
yopp
findAndModify вернёт updated: 0 и вы сможете сделать retry
Ilya
Что под оптимистичной блокировкой подразумевается? CAS?
yopp
Да, любое поле которое гарантированно меняется при изменении документа
Ilya
Ну то есть CAS?
yopp
Время обновления, версия, хеш
yopp
Я не знаю что такое CAS
Ilya
(compare and set)
yopp
Optimistic concurrency control
yopp
Наверное
Ilya
Я вообще могу, используя findAndModify как-то отличить кейс, когда такого дока нет, от кейса, когда он изменен?
Ilya
Грубо говоря, у меня есть _id и version
yopp
Нет, не можете
Ilya
Понял
yopp
Но вы можете использовать upsert и setOnInsert, если нужно инициализировать состояние
yopp
В 4.2 в вашем распоряжении ещё и Aggregation Framework
Ilya
yopp
Ещё в монге есть атомарные операции, которые позволяют конкурентно обновлять документы, не создавая конфликтов
yopp
В принципе все изменения одного документа атомарные, но они в основном LWW
Ilya
Атомарные изменения это хорошо, но у меня кейс, что я читаю документ, что-то с ним делаю, и сохраняю назад
yopp
И есть ряд операций, типа $inc и $push, которые работают с любым состоянием документа
Ilya
И если у меня два таких запроса придут, то в теории я могу обосраться, и один из них вернет неконсистентный результат
Ilya
Точнее, несуществующее состояние
yopp
Да. Оптимистичная блокировка вполне подходящий паттерн
yopp
Либо транзакции
Гена
Коллеги, доброе утро.
Столкнулись с такой проблемой.
Из 5 монгосов, пишет что активный только один, хотя все вверху.
Пробовали рестартить каждый по очереди, но никакой реакции.
active mongoses:
"4.0.4" : 1
Ничего в гуглах не нашел. Может кто-то сталкивался с подобным?
yopp
а что значит «все вверху»?
Гена
сервисы бегут. Никаких ошибок в логах монгоса.
yopp
с verbose: true, какие там uptime, last ping, status?
Гена
кстати, по поводу verbose: true
подскажите пожалуйста как это выставить. Я пытался понять, но в документации так и не нашел где и как
yopp
sh.status({verbose: true})
Гена
спасибо
одну минуту
yopp
но оно помоему детали только по активным монгосам покажет
Гена
ну это уже что-то
спасибо
yopp
а если через шелл напрямую в один из неактивных монгосов подключится и сделать sh.status?
yopp
у вас все монгосы указаны в connection string, srv записях?
Гена
он везде показывает 1
сейчас с вербос посмотрю
yopp
но монгос команду выполняет?
yopp
можно ещё попробовать запрос какой-то сделать
yopp
нет, не изменяет
Гена
ок
спасибо
Сейчас прогоню и посмотрю
Спасибо большое
yopp
в списке только один?
Гена
да
Гена
active mongoses:
{ "_id" : "*****:*****", "advisoryHostFQDNs" : [ ""**********"," ], "mongoVersion" : "4.0.4", "ping" : ISODate("2019-11-27T10:54:13.763Z"), "up" : NumberLong(1587), "waiting" : true }
yopp
подключитесь к любому неактивному и попробуйте сделать запрос в коллекцию
yopp
хотя даже не запрос
yopp
а сделайте stats() на коллекции
Гена
db.collections.stats() ?
yopp
на какой-то существующей, желательно расшарженной
Гена
есть аутпут.
Сделал на коллекцию расшарденную
yopp
но вообще 4.0.4 это очень старая версия, а в 4.0.9 было CVE
Гена
пока нет возможности на апгрейд к сожалению
yopp
Гена
нет(
yopp
но работает
yopp
тогда забить
Гена
да
Гена
забить не получится. У нас алертами сыпит. Хотелось бы понять почему так происходит. Попробую положить неактивные и снова поднять
yopp
97% потому что у вас 4.0.4
yopp
перезапуск врядли поможет
Гена
думаете баг?
yopp
вероятно
yopp
на csrs в config.mongos что?