Write: broken pipe

709 views
Skip to first unread message

Ruslan

unread,
Oct 11, 2016, 3:53:47 AM10/11/16
to ClickHouse
При записи переодически получаю ошибку вида:
Post http://127.0.0.1:8123/: write tcp 127.0.0.1:44562->127.0.0.1:8123: write: broken pipe

Как это вылечить?

Ruslan

unread,
Oct 11, 2016, 4:20:17 PM10/11/16
to ClickHouse
Вот еще ошибки, что удалось выявить

ERRO[1122] Post http://127.0.0.1:8123/: write tcp 127.0.0.1:54211->127.0.0.1:8123: write: broken pipe
ERRO[1252] Post http://127.0.0.1:8123/: EOF
ERRO[1344] Post http://127.0.0.1:8123/: read tcp 127.0.0.1:55203->127.0.0.1:8123: read: connection reset by peer
ERRO[1991] Post http://127.0.0.1:8123/: write tcp 127.0.0.1:57763->127.0.0.1:8123: write: connection reset by peer

Использую простенькую обертку на Go, без всяких наворотов.


вторник, 11 октября 2016 г., 12:53:47 UTC+5 пользователь Ruslan написал:

man...@gmail.com

unread,
Oct 11, 2016, 4:41:34 PM10/11/16
to ClickHouse
Возможно, в вашей программе на Go не закрывается какой-то объект для чтения результата или для записи по HTTP.
(По крайней мере, я один раз наблюдал такую ошибку.)

Я не специалист в Go, но вы можете выложить свою программу и сделать минимальный пример для воспроизведения ошибки - тогда это можно будет изучить.

Ruslan

unread,
Oct 11, 2016, 5:34:41 PM10/11/16
to ClickHouse
func Request(query string) ([]byte, error) {
client := &http.Client{}
r, _ := http.NewRequest("POST", dbHost, bytes.NewBufferString(query))
resp, err := client.Do(r)
if err != nil {
return nil, err
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, err
}
if resp.StatusCode != 200 {
return nil, errors.New(string(body))
}
return body, nil
}


вот такой вот простой вариант. ошибка возникает не постоянно, а переодически при постоянной вставке данных.

среда, 12 октября 2016 г., 1:41:34 UTC+5 пользователь man...@gmail.com написал:

Ruslan

unread,
Oct 11, 2016, 6:00:06 PM10/11/16
to ClickHouse
Полный пример использования:

package main

import (
"io/ioutil"
"net/http"
"errors"
"bytes"
"fmt"
)

const dbHost = "http://127.0.0.1:8123/"


func Request(query string) ([]byte, error) {
client := &http.Client{}
r, _ := http.NewRequest("POST", dbHost, bytes.NewBufferString(query))
resp, err := client.Do(r)
if err != nil {
return nil, err
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, err
}
if resp.StatusCode != 200 {
return nil, errors.New(string(body))
}
return body, nil
}

func main()  {
if res, err := Request("SELECT sipHash64('hello');"); err == nil {
fmt.Print(string(res))
}
}


Важно: я делаю батч вставку, иногда даже очень большое кол-во данных с очереди. Пример:


INSERT INTO MyTable (
  Col1, Col2, Col3
) VALUES

(
  1410025, 97650, 1
),
(
  1101713, 8450, 1
),
(
  1413381, 5200, 1
),
(
  1401211, 34650, 1
),
(
  1410412, 1950, 1
);



сложно сразу взять и воспроизвести проблему. оно периодично, а не постоянно.



среда, 12 октября 2016 г., 2:34:41 UTC+5 пользователь Ruslan написал:
Reply all
Reply to author
Forward
0 new messages