TLDR Неймспейсы в линуксе и Golang лучше не смешивать — by weave.works
tl;dr Если вы используете Linux API, которое влияет только на текущий OS-тред, то выйдет нежданчик когда ваша go-рутина стартанет в другом OS-треде. — by nevyn
Published in
1 min readJun 30, 2017
Weave.works пытались написать golang-тулзу котороя по id контейнера покажет информацию о сетевом контроллере. Примерно так:
- Берем контейнер и находим его сетевой неймспейс
- Делаем setNS в него из текущей go-рутины
- Вызываем netlink чтобы получить инфо о сетевухе
- Profit!
На самом деле то, как работает рантайм golang и вот этот go netlink враппер приводит к неожиданной баге: при чтении ответа netlink, рантайм go может зашедулить вашу го-рутину в другой тред, для которого не скопирует сетевой неймспейс , хотя вы ожидали что всё будет выполнятся в этом неймспейсе.