Open roman-4erkasov opened 2 years ago
docker run kmlebedev/txmlconnector server
В качестве быстрого решения попробуйте не использовать последнюю версию, а запустить сервер таким образом: docker run kmlebedev/txmlconnector:6.19.2.21.8 server
По самой проблеме, к сожалению, не подскажу. Сам только разбираюсь и kmlebedev/txmlconnector:latest у меня не стартует с аналогичными ошибками
Там просто старый образ, сейчас попробую обновить
Большое спасибо за обновление. Но, к сожалению, возникает уже другая ошибка: Application could not be started, or no application associated with the specified file. ShellExecuteEx failed: File not found она же у меня возникала при попытке самостоятельно сборки образа. Насколько успел разобраться - неправильно собирается образ под win.
Даже успел нагуглить про gonative (https://habr.com/ru/post/249449/), но дальше этого пока не продвинулся
P.S. Большое спасибо за проект P.P.S Извините, что issue превращается в чат )
Пофиксил сборку выложил свежий рабочий doсker image
time="2022-06-08T12:37:48Z" level=error msg="txmlSendCommand() Insufficient buffer."
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x0 addr=0x0 pc=0x1405ddd42]
goroutine 11 [running]:
github.com/kmlebedev/txmlconnector/server.(*server).SendCommand(0x1406fc660?, {0xc0000fa240?, 0xc000109800?}, 0xc0000fa240)
/go/src/github.com/kmlebedev/txmlconnector/server/main.go:144 +0xa2
github.com/kmlebedev/txmlconnector/proto._ConnectService_SendCommand_Handler({0x1406d6180?, 0x140b69b78}, {0x14086e618, 0xc0001b6450}, 0xc0000547e0, 0x0)
/go/src/github.com/kmlebedev/txmlconnector/proto/connect.pb.go:460 +0x258
google.golang.org/grpc.(*Server).processUnaryRPC(0xc00013b180, {0x1408702a8, 0xc0000b2000}, 0xc000060000, 0xc00019b470, 0x140661d30, 0x0)
/go/pkg/mod/google.golang.org/grpc@v1.40.0/server.go:1297 +0x13a3
google.golang.org/grpc.(*Server).handleStream(0xc00013b180, {0x1408702a8, 0xc0000b2000}, 0xc000060000, 0x0)
/go/pkg/mod/google.golang.org/grpc@v1.40.0/server.go:1626 +0xfd4
google.golang.org/grpc.(*Server).serveStreams.func1.2()
/go/pkg/mod/google.golang.org/grpc@v1.40.0/server.go:941 +0xed
created by google.golang.org/grpc.(*Server).serveStreams.func1
/go/pkg/mod/google.golang.org/grpc@v1.40.0/server.go:939 +0x4be
Image version 6.19.2.21.16
Часто выбивает. Отдает структуры Security при конекте и вылетает.
txmlSendCommand
Магия тут
resp, _, err := procSendCommand.Call(uintptr(unsafe.Pointer(reqData)))
Кажется ответ не влез в буфер, но как этим управлять не понятно. Могу пока сделать, так что бы не вылетало. можно пробовать
docker pull kmlebedev/txmlconnector:6.19.2.21.16-1
Да, теперь не падает, спасибо, хотелось бы понять, но не мой профиль, это похоже внутри dll вылетает судя по коду
После некоторых экспериментов с локальным билдом проблемка вообще ушла локально, при этом последний собранный вами контейнер что я запустил на сервере продолжает выбивать ошибку, не вылетает конечно.
Отличия в версиях пакетов, вот мой файл: go.mod
module github.com/kmlebedev/txmlconnector
go 1.18
require (
github.com/360EntSecGroup-Skylar/excelize/v2 v2.4.0
github.com/ClickHouse/clickhouse-go v1.4.5
github.com/PuerkitoBio/goquery v1.7.1
github.com/go-telegram-bot-api/telegram-bot-api v4.6.4+incompatible
github.com/gocolly/colly/v2 v2.1.0
github.com/golang/glog v1.0.0
github.com/golang/protobuf v1.5.2
github.com/shakinm/xlsReader v0.9.10
github.com/sirupsen/logrus v1.8.1
github.com/streadway/amqp v1.0.0
gocloud.dev v0.24.0
gocloud.dev/pubsub/rabbitpubsub v0.24.0
google.golang.org/grpc v1.40.0
google.golang.org/protobuf v1.27.1
)
require (
cloud.google.com/go/pubsub v1.17.1 // indirect
github.com/andybalholm/cascadia v1.2.0 // indirect
github.com/antchfx/htmlquery v1.2.3 // indirect
github.com/antchfx/xmlquery v1.2.4 // indirect
github.com/antchfx/xpath v1.1.8 // indirect
github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58 // indirect
github.com/gobwas/glob v0.2.3 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/googleapis/gax-go/v2 v2.1.1 // indirect
github.com/kennygrant/sanitize v1.2.4 // indirect
github.com/metakeule/fmtdate v1.1.2 // indirect
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect
github.com/richardlehane/mscfb v1.0.3 // indirect
github.com/richardlehane/msoleps v1.0.1 // indirect
github.com/saintfish/chardet v0.0.0-20120816061221-3af4cd4741ca // indirect
github.com/technoweenie/multipartstreamer v1.0.1 // indirect
github.com/temoto/robotstxt v1.1.1 // indirect
github.com/xuri/efp v0.0.0-20210322160811-ab561f5b45e3 // indirect
go.opencensus.io v0.23.0 // indirect
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 // indirect
golang.org/x/net v0.0.0-20210825183410-e898025ed96a // indirect
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect
golang.org/x/sys v0.0.0-20210917161153-d61c044b1678 // indirect
golang.org/x/text v0.3.7 // indirect
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
google.golang.org/api v0.58.0 // indirect
google.golang.org/appengine v1.6.7 // indirect
google.golang.org/genproto v0.0.0-20211019152133-63b7e35f4404 // indirect
)
Может проблема в контейнере
Рано радовался, ловится во время дебага клиентского приложение, вернусь с более точной информацией
Может быть проблема в том что dll модуль выделяет буфер для чтение и ваш клиент не успевает считывать ? Так как я часто использую и такой проблемы не ловил Так же рекомендую посмотреть логи от dll в папке logs
Проблема оказалась в логике клиентского приложения в режиме отладки.
Смысл такой: если допустить повторную отправку команды connect пока еще не обработан весь тот поток начальных данных, что был выкинут сервером в ответ на первый connect, то вылетит эта ошибка.
Тоесть, моя точка останова и неспешная отладка поступающих сообщений вызвала в другом потоке клиента повторную попытку подключения по retry таймауту и эта вторая попытка выбивает ошибку на сервере. По смыслу в принципе так и есть, на стороне сервера в dll библиотеке первый буфер еще не выгружен целиком, и допускается попытка писать туда еще раз.
Официальная документация:
В случае успешного выполнения команды connect повторная посылка команды возможна только после отключения от сервера с помощью команды disconnect.
Надеюсь кому поможет.
Этот Insufficient buffer
выносит мозг...
Какое-то навождение с этой ошибкой, отлаживаю недоступность сервера при подключении.
Вот что заметил:
time="2022-06-11T09:48:34Z" level=info msg="txmlSendCommand() Call: <command id=\"connect\"><login>***</login><password>****</password><host>tr1-demo5.finam.ru</h
ost><port>3939</port><micex_registers>true</micex_registers><rqdelay>100</rqdelay><push_u_limits>10</push_u_limits><push_pos_equity>10</push_pos_equity></command>"
time="2022-06-11T09:48:34Z" level=error msg="txmlSendCommand() Insufficient buffer."
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x0 addr=0x0 pc=0x1405e0dc2]
goroutine 25 [running]: github.com/kmlebedev/txmlconnector/server.(*server).SendCommand(0x1406ffde0?, {0xc00002cc40?, 0xc00006d818?}, 0xc00002cc40) /go/src/github.com/kmlebedev/txmlconnector/server/main.go:145 +0xa2
Если выждать и подключиться через минутку, то все будет нормально.
3. Словил вот такой кейс:
time="2022-06-11T09:37:21Z" level=info msg="Press CRTL+C to stop the server..."
time="2022-06-11T09:37:40Z" level=info msg="txmlSendCommand() Call: <command id=\"connect\">
goroutine 12 [running]: github.com/kmlebedev/txmlconnector/server.(server).SendCommand(0x1406ffde0?, {0xc00002cec0?, 0xc000231818?}, 0xc00002cec0) /go/src/github.com/kmlebedev/txmlconnector/server/main.go:145 +0xa2 github.com/kmlebedev/txmlconnector/proto._ConnectService_SendCommand_Handler({0x1406d9300?, 0x140b80d40}, {0x140883ad0, 0xc0001b0cc0}, 0xc000062ba0, 0x0) /go/src/github.com/kmlebedev/txmlconnector/proto/connect.pb.go:460 +0x258 google.golang.org/grpc.(Server).processUnaryRPC(0xc000139180, {0x140885768, 0xc000182d00}, 0xc0001558c0, 0xc0001b0030, 0x140664660, 0x0) /go/pkg/mod/google.golang.org/grpc@v1.47.0/server.go:1283 +0x13b6 google.golang.org/grpc.(Server).handleStream(0xc000139180, {0x140885768, 0xc000182d00}, 0xc0001558c0, 0x0) /go/pkg/mod/google.golang.org/grpc@v1.47.0/server.go:1620 +0xfd4 google.golang.org/grpc.(Server).serveStreams.func1.2() /go/pkg/mod/google.golang.org/grpc@v1.47.0/server.go:922 +0xed created by google.golang.org/grpc.(*Server).serveStreams.func1 /go/pkg/mod/google.golang.org/grpc@v1.47.0/server.go:920 +0x4be
Замечены такие кейсы:
Всвязи с чем обработку этих кейсов надо реализовавать либо на стороне txmlconnector, но как я понимаю это не его задача обрабатывать логику клиента, а значит вот эта строчка https://github.com/kmlebedev/txmlconnector/blob/main/server/main.go#L168 неприемлима тк при ее наличии нельзя обработать перечисленные выше кейсы на стороне клиента.
То же словил level=error msg="txmlSendCommand() Insufficient buffer."
Кажется это из-за некорректного закрытия клиента, в следствии чего не возникает закрития коннекта в стороны транзакта и освобождение памяти буферов и на следующий коннект не хвататет.
Я тоже на это же наступил. Гугление привело на похожее: https://github.com/ClickHouse/clickhouse-go/issues/209 В моем случае тоже падало после получения securities Решил перевести на нативный clickhouse модуль https://clickhouse.com/docs/en/integrations/go после перевода securities сохранились успешно. перевожу остальное, проблем пока больше не наблюдается
Здравствуйте! Спасибо больше за реализацию коннектора. Пытаюсь его поднять сервер по инструкции, но возникает ошибка. Я раньше не пользовался ни wine, ни golang, ни коннектором от финам.
Подскажите пожалуйста куда примерно копать, чтобы найти причину ошибки?