Kirill
разве нет?
Logan
на любой вкус и задачу? это же просто хранилище
ну да. Но одно дело – хранилище на rPi для 10м файлов а другое – пару петаайт сохранить со стопроцентной защитой от сбоев
Logan
плюс вопрос управления правами (который тоже не так очевиден)
Kirill
можете посоветовать что погуглить/почитать по этой теме?
Kirill
или посмотреть
Kirill
реализации популярные например
Logan
можно посмотреть выступления Чистякова и Badoo на HL++, секция по хранению данных. Для тестов можно взять minio (он простой), стандарт де-факто из opensource - ceph. Во втором случае рекомендуется очень тщательно прочитать документацию и советоваться со знающими людьми. Неаккуратная работа с ceph легко может уничтожить все данные разом (именно так погиб провайдер cloudmouse)
Logan
в принципе даже NetApp поддерживает S3 интерфейс, насколько я помню
Kirill
почему minio только для тестов?
Logan
потому, что он не умеет то, что нужно от системы хранения. Он медленный, он примитивный (у минио нет пользователей – пара ключей там только одна), реплицироваться он тоже не умеет
Logan
erasure codes тоже, ЕМНИП, не умел
Kirill
спасибо)
Logan
erasure codes уже умеет судя по докам
если верить докам – репликацию он тоже умеет. Но лучше бы не умел, честное слово
Aleksandr
erasure codes уже умеет судя по докам
не помню времен когда не имел
Logan
потому что он заточен под задачу. хочешь второго пользователя - поднимай второй инстанс
и задача эта в первую очередь – отладка. По крайней мере я так понял его документацию. Надо протестировать S3? Minio уже готов. Один бинарник, запуск вообще без настроек, встроенная удобная веб-морда - идеально для тестирования
Aleksandr
https://docs.minio.io/docs/distributed-minio-quickstart-guide
Logan
если ваши данные вам ценны хоть сколько-нибудь – никогда не используйте этот режим
Logan
я проверил его на себе. Повторять не советую
Aleksandr
только что ты утверждал что минио для тестирования, нет реплик и erasure codes, и вдруг пройдя по ссылке где все это есть, утверждаешь что режим плох, и ты потерял данные
Anonymous
Привет. Никто не встречался со следующей проблемой. Записал я значит парсер сайтов без единого Print(ln|f). Запустил я своё произведение искусства, сижу наслаждаюсь девственно чистой консолью. И тут бац, посыпалось: Unsolicited response received on idle HTTP channel starting with [нечитаемые байты]
Anonymous
ну ты конечно же сразу же поиск по коду, нашел функцию которая логи пишет. а вопрос то в чем?
Вопрос в том, что такой функции я не нашёл. Похоже спамит стандартный http под капотом...
Aleksandr
/net/http/transport.go:1685
Aleksandr
в 1.9.3
Anonymous
/net/http/transport.go:1685
Воу, ты крут. Уже встречался с этим?
Aleksandr
нет, ctrl+f по коду. ну в самом деле
heavycharged
я встречался с паникой, когда работал через прокси, прокся изменяла ответ сервера и сраза чем ни попадя. в итоге начинались паники.
heavycharged
нет, ctrl+f по коду. ну в самом деле
это в IDE поиск, или через google?
heavycharged
а все, нашел как, спс. через Find -> Scope -> All Places
heavycharged
почему когда делаешь Ctrl+Z в терминале, задача уходит в stopped, а не продолжает работу?
Slava
а почему она должна продолжать работу?
heavycharged
в некоторых случаях, когда делаешь Ctrl+Z задачи продолжают работу. это же вроде как отправить задачу в фон
heavycharged
или не?
🎉
В фон отправляй так ./main &
heavycharged
спасибо, я в курсе за этот способ, мне интересно почему по Ctrl+Z останавливает. так удобней на много просто.
Slava
ctrz +z отправляет сигнал sigstp
Slava
программа должна остановить свою работу
heavycharged
спасибо за объяснения, теперь понял, можно через bg запустить её
Ilya
Привет всем Только начал изучать go и столкнулся с проблемой. Такое чувство что goroutine прекращает выполняться после отправки из нее сообщения в канал. Пример тут: https://play.golang.org/p/Jef_5zHpTRN
heavycharged
GOMAXPROCS?
Vasily
нет
Vasily
канал не буферизированный, из него никто не читает
Vasily
вот оно и лочится в ожидании когда кто-то прочтёт
Alexander
Привет всем Только начал изучать go и столкнулся с проблемой. Такое чувство что goroutine прекращает выполняться после отправки из нее сообщения в канал. Пример тут: https://play.golang.org/p/Jef_5zHpTRN
При завершении main все горутины принудительно прибиваются. В этом коде горутины висят в блокировке на записи в канал, а потом main быстро считывает данные из каналов и завершает работу, не давая шансов горутинам продолжить выполнение. Если в самый конец main добавить time.Sleep(1*time.Second) то все горутины будут полностью выполнены
heavycharged
27 строка
heavycharged
в данном кейсе проблема, кмк. именно в GOMAXPROCS, я у себя запустил на 4 ядрах и все успевает отписаться.. https://i.imgur.com/3YFjTa1.png
Alexander
https://play.golang.org/p/0WBi5Ok9fHZ
heavycharged
а вот runtime.GOMAXPROCS(1): https://i.imgur.com/xP4PGEY.png
Ilya
При завершении main все горутины принудительно прибиваются. В этом коде горутины висят в блокировке на записи в канал, а потом main быстро считывает данные из каналов и завершает работу, не давая шансов горутинам продолжить выполнение. Если в самый конец main добавить time.Sleep(1*time.Second) то все горутины будут полностью выполнены
Хочется придумать какой-то подход без Sleep. Я думал в структуру job добавить флаг, который указывал бы на окончание работы goroutine и в бесконечном цикле смотреть на все этот флаг у всех элементов. Нормальный ли это подход в go?
Alexander
в данном кейсе проблема, кмк. именно в GOMAXPROCS, я у себя запустил на 4 ядрах и все успевает отписаться.. https://i.imgur.com/3YFjTa1.png
В GOMAXPROCS _проблемы_ нет. Это побочный эффект от запуска в несколько потоков. Проблему и причину такого поведения я описал выше.
Vasily
👍
Ilya
Спасибо
Alexander
Спасибо @rvasily, вы хороший учитель :)
Vasily
да, после той домашки всё запомнилось навсегда, правда ?:)
heavycharged
горутины не успевают выполнится из-за конструктивного косяка, это факт. но сам факт того, что с GOMAXPROCS повыше код успеет отработать мне и был интересен)
Wingman
Не совсем в тему вопрос :) Запускаю из веба задачу; гошка в фоне её (долго) выполняет; для обновления статуса (какая задача запущена/остановлена) из веба раз в секунду дергаю гошку на предмет запущеных задач. Нюанс: в вебе руками эти задачи будут запускаться/смотреться не сильно часто, скорее для дебага - зато в фоне их могут крутиться сотни и тысячи. Стоит ли корячиться и приделывать сбоку к демону вебсокеты, чтобы не дёргать его (иногда, когда понадобиться) раз в секунду? Сам способ опрашивать посекундно не нравится и уродский, зато не нужен лишний слой логики с вебсокетами Тут больше вопрос не го, а лень/перфекционизм, конечно - но сам никак не могу решить :D
heavycharged
ну если пользоваться будете только вы, я бы не делал, все что нужно - прикрутить логи чтобы знать, что, почему, и во сколько закончилось/прервалось.
heavycharged
я как-то пробовал написать парсер с воркерами и вебсокеты, чтобы из вебморды было видно что какой воркер парсит, его текущий стейт и т.д., получилось... красиво)) но больше я так не делал)
Wingman
Ну лан
Wingman
Всегда можно потом дописать )
Aleksey
горутины не успевают выполнится из-за конструктивного косяка, это факт. но сам факт того, что с GOMAXPROCS повыше код успеет отработать мне и был интересен)
Если макспроц поставить 3, скорее всего выполнится, а 2, скорее всего нет, это пример того чем процессы отличаются от корутин. ПыСы: код не смотрел, только комментарии прочёл :)
Anonymous
https://github.com/hIMEI29A/gichidan
G72K
если верить докам – репликацию он тоже умеет. Но лучше бы не умел, честное слово
Репликацию же нет, надо руками переливать. Вообще расскажите про боль, мы планируем использовать
Лёша
Здравствуйте. Если тест обычных http хендлеров, принимающих http.ResponseWriter, *http.Request, выглядит так: // есть какой-то хендлер - handler req, _ := http.NewRequest("METHOD", "/some/url", nil) rec := httptest.NewRecorder() handler.ServerHTTP(rec, req) // используем rec для тестов то как можно протестировать какое-нибудь middleware, принимающее http.Handler?
hypnopumpia
Вызывать в нем ServeHTTP?
Kirill
Привет, подскажите при сборке проекта на хероку выходит такая ошибка
Kirill
FATAL: command "build" failed: failed to resolve import path "main": import "github.com/minio/minio-go/pkg/credentials": not found: stat /tmp/build_9d126a28343bef30699cfad15e174da9/src/github.com/minio/minio-go/pkg/credentials: no such file or directory
Kirill
на локальной машине при этом все ок