
Zver
29.07.2018
07:53:37

yuriy
29.07.2018
07:54:21
1400 и 2000 разница минимальная

Sergey
29.07.2018
07:58:40

Google

Sergey
29.07.2018
07:59:47
https://play.golang.org/p/7mXlTfKu_xc если явно его вызвать, то все ок
код из книги похож как раз на пример того, как работает планировщик (scheduler)

Aleksey
29.07.2018
09:03:18

Vladislav
29.07.2018
12:37:10
Коллеги. Подскажите, пожалуйста, есть ли уже где-то проверенная либа для реализации именованных мутексов? Хочется, чтобы была возможность сделать mtx.Lock(name) и mtx.Unlock(name). В гугле нашел лишь пару либ с обновлениями 3 года назад

Roman
29.07.2018
12:37:55

Vladislav
29.07.2018
12:42:52
зачем?
Что бы брать лок перед выполнением длительных операций над сущностью в отдельных друг от друга модулях

Roman
29.07.2018
12:44:03

Pawel
29.07.2018
12:45:01

Vladislav
29.07.2018
12:48:17

Roman
29.07.2018
12:49:00
да
ну так в чём проблема написать своими ручками?
оборачиваешь map[string]sync.Mutex{} в структуру и усио

Google

Vladislav
29.07.2018
12:49:53
никаких проблем, я уже так сделал. Решил спросить насчет готового решения. Ну и простая мапа с мутексами, как мне кажется, будет "течь"

Roman
29.07.2018
12:50:47

Pawel
29.07.2018
12:52:24
Можно сделать глобальную мапу строка-мутекс но это дичь какая то

Roman
29.07.2018
12:53:31

Zver
29.07.2018
12:53:33
По мне, именованные мутексы нужны только при межпроцесном взаимодействии.

Pawel
29.07.2018
12:53:53

Zver
29.07.2018
12:54:25

Roman
29.07.2018
12:54:47

Vladislav
29.07.2018
12:54:59

Roman
29.07.2018
12:55:14

Vladislav
29.07.2018
12:55:40

Roman
29.07.2018
12:55:50

Pawel
29.07.2018
12:56:31

Roman
29.07.2018
12:56:33

Vladislav
29.07.2018
12:58:02
От этого задача не изменится. Где-то будет висеть мапа с этими ресурсами. Насчет UnlockDestroy не очень понял если честно

Roman
29.07.2018
12:59:15
type AbstractResource struct{
name string
lock sync.Mutex
}
func NewAbstractResource(name string) *AbstractResource {
return &AstractResource{
name: name,
lock: sync.Mutex{},
}
}
func (r *AbstractResource) DoSomething() {
r.lock.Lock()
defer r.lock.Unlock()
// do your exclusive work
}

Zver
29.07.2018
13:02:31
И зачем тут имя?

Google

Zver
29.07.2018
13:02:58
Тот же самый мютекс и получается.

Vladislav
29.07.2018
13:12:56
Проблемы и нет, я изначально спрашивал лишь о готовых реализациях. В своей наивной реализации задумался над корректностью удаления мутекса из мапы после разблокировки с точки зрения возможных косяков при конкуррентном доступе:
func (n *NamedLock) Unlock(name string) {
n.l.Lock()
localLock, ok := n.locks[name]
if !ok {
panic("no mutex acquired with name " + name)
}
n.l.Unlock()
localLock.Unlock()
}
будет ли это корректно работать, т.к. между последними двумя строчками может вклиниться другой поток

Pawel
29.07.2018
13:14:48
Странный вопрос. Если поток может вклиниться, то как оно может корректно работать?

Vladislav
29.07.2018
13:18:29
скорее всего это не будет критичным, т.к. один фиг мы уже в Unlock находимся, хотя не уверен. Буду писать тестики

Roman
29.07.2018
13:21:11

Vladislav
29.07.2018
13:23:00
а, ну кстати да. чот я сильно протупил. можно же все закрыть локом на мапу

Roman
29.07.2018
13:23:34
ну а UnlockDestroy просто разблокирует и удаляет в 1 операции когда этот лок уже не нужен

Zver
29.07.2018
13:24:27
И будут потом все с этими именованными каналами в локах сидеть.

Vladislav
29.07.2018
13:25:35
про UnlockDestory не нахожу инфу. Это в тандартной библиотеке метод? в sync его не вижу

Roman
29.07.2018
13:26:52
func (n *NamedLock) UnlockDestroy(name string) {
n.l.Lock()
defer n.l.Unlock()
localLock, ok := n.locks[name]
if !ok {
panic("no mutex acquired with name " + name)
}
localLock.Unlock()
delete(n.locks, name)
}

Vladislav
29.07.2018
13:28:53
да, я уже так сделал ) спасибо

Zver
29.07.2018
13:48:47
А к lvm каким образом доступ получаете?

Vladislav
29.07.2018
13:54:59
через exec =)

Zver
29.07.2018
13:56:05

Vladislav
29.07.2018
13:57:08
если речь про логические томы, то конечно именованные

Zver
29.07.2018
13:57:34

Matwey
29.07.2018
13:59:04
Господа

Zver
29.07.2018
13:59:30
Товарищи.

Google

Matwey
29.07.2018
13:59:34
А что бы это значило:
# /root/go/bin/govendor sync -v
fetch "github.com/prometheus/procfs"
failed to copy package from "/root/go/.cache/govendor/github.com/prometheus/procfs" to "/root/go/src/github.com/influxdata/influxdb/vendor/github.com/prometheus/procfs": stat /root/go/.cache/govendor/github.com/prometheus/procfs/fixtures/26231/exe: no such file or directory

Vladislav
29.07.2018
13:59:36
не совсем. там еще есть часть более комплексной логики, которая защищается. lvm здесь в контексте вирт. серверов (доменов). Поэтому мутексами защищается логика по работе с сервером, чтоб нельзя было, например, выполнить его пересоздание в момент восстановления из резервной копии

Matwey
29.07.2018
13:59:56
И не полностью синхронизуется procfs, не хватает в нем запчастей, xfs например
Посмотрел куда файл указывает, он оказался символической ссылкой
И указывает на несуществующий vim
Это какой-то юнит-тесты что-ли?

Zver
29.07.2018
14:02:06
Которая будет инкапсулировать всю работу с сервером. Это по мне логичней и будет более цельно, отлаживать и тестировать будет проще.

Vladislav
29.07.2018
14:07:18
безусловно я с вами согласен, что это будет более зрелое решение и к нему обязательно вернемся. Просто это требует больше времени на разработку, а проблему нужно решить сейчас без переделывания кучи кода )

andrew
29.07.2018
14:34:00
Подскажите, может случиться состояние гонки между горутинами при использовании бд?
2 одновременных запроса, происходит проверка что нужно прибавить деньги и потом прибавляет
При запросе в бд горутина отправляет запрос и запускается другая горутина которая проверяет тот же запрос
Потом первая продолжает и прибавляет
Потом продолжается вторая и тоже прибавляет
Хотя должна только одна)

Roma
29.07.2018
14:41:25
Народ
Как передать контекст?
И где его взять?

Google

Sergey
29.07.2018
14:41:59
Еее Print Screen

Roma
29.07.2018
14:42:12
У меня инета нет
Я в машине еду

Oleg
29.07.2018
14:42:59
И где его взять?
берешь создаешь контекст, закидываешь по ключу значение, после достаешь по ключу, гугл вроде в таких вопросах не отказывает

Roma
29.07.2018
14:43:12

Oleg
29.07.2018
15:07:55
Ребята, не у кого не завалялось конфигов для https://github.com/hyperledger/caliper , хочу сделать бенчмарки Hyperledger Fabric, но пока плохо понимаю в том как это делать

Vladislav
29.07.2018
15:17:59

andrew
29.07.2018
15:18:21
А есть варианты как избежать гонку?

Александр
29.07.2018
15:18:53
при использовании стандартного драйвера - не может
ну по крайне мере на уровне драйвера
там используется пулл коннектов для этого
на уровне бд - может

Vladislav
29.07.2018
15:19:43

Александр
29.07.2018
15:19:51
транзакции есть?

andrew
29.07.2018
15:19:56
Есть но какой смыс если трабла в смене горутин
Одна горутина спит и ждет результата, проверяется другая

Vladislav
29.07.2018
15:21:14
сделайте операцию через каналы