Ilya
А че там?
Dmitriy
https://docs.mongodb.com/manual/core/transactions/
Ilya
Кто-то юзает?
Yaroslav
Кто-то юзает?
Скорее нет, чем да)
Yaroslav
Но видел статью как транзакции без реплики делать
Yaroslav
Я честно их не юзаю да и потребности не было
Dmitriy
я же сделал реплай поста с которого читать, нажмите на него, не стесняйтесь)
Ilya
Оптимистичная блокировка
А в монге есть бинт-ин локи?
yopp
В монге нет user defined блокировок как класса
yopp
Это скорее плюс, чем минус, особенно в шарде. но есть ряд случаев когда с этим будет не очень удобно жить
yopp
Если у вас один документ, то оптимистичной блокировки будет более чем достаточно
yopp
findAndModify вернёт updated: 0 и вы сможете сделать retry
Ilya
Что под оптимистичной блокировкой подразумевается? CAS?
Ilya
findAndModify вернёт updated: 0 и вы сможете сделать retry
Для этого что нужно? Какое-то поле добавить вроде version?
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
можно ещё попробовать запрос какой-то сделать
Гена
sh.status({verbose: true})
Это же просто команда? она не изменяет настройки? надо потом делать false?
yopp
нет, не изменяет
Гена
ок спасибо Сейчас прогоню и посмотрю Спасибо большое
Гена
sh.status({verbose: true})
показывает что из 5 только один активный. Это очень странно
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
97% потому что у вас 4.0.4
yopp
перезапуск врядли поможет
Гена
думаете баг?
yopp
вероятно
yopp
на csrs в config.mongos что?