Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Initialize error: Insufficient buffer. #6

Open
roman-4erkasov opened this issue Apr 24, 2022 · 16 comments
Open

Initialize error: Insufficient buffer. #6

roman-4erkasov opened this issue Apr 24, 2022 · 16 comments

Comments

@roman-4erkasov
Copy link

roman-4erkasov commented Apr 24, 2022

Здравствуйте! Спасибо больше за реализацию коннектора.
Пытаюсь его поднять сервер по инструкции, но возникает ошибка. Я раньше не пользовался ни wine, ни golang, ни коннектором от финам.

Подскажите пожалуйста куда примерно копать, чтобы найти причину ошибки?

root@ubuntu-cpu8-ram16-ssd50:/home/ubuntu/txmlconnector# docker run kmlebedev/txmlconnector server
wine: created the configuration directory '/root/.wine'
0012:err:ole:marshal_object couldn't get IPSFactory buffer for interface {00000131-0000-0000-c000-000000000046}
0012:err:ole:marshal_object couldn't get IPSFactory buffer for interface {6d5140c1-7436-11ce-8034-00aa006009fa}
0012:err:ole:StdMarshalImpl_MarshalInterface Failed to create ifstub, hres=0x80004002
0012:err:ole:CoMarshalInterface Failed to marshal the interface {6d5140c1-7436-11ce-8034-00aa006009fa}, 80004002
0012:err:ole:get_local_server_stream Failed: 80004002
0014:err:winediag:nodrv_CreateWindow Application tried to create a window, but no driver could be loaded.
0014:err:winediag:nodrv_CreateWindow Make sure that your X server is running and that $DISPLAY is set correctly.
0014:err:ole:apartment_createwindowifneeded CreateWindow failed with error 183
0014:err:ole:apartment_createwindowifneeded CreateWindow failed with error 0
0014:err:ole:marshal_object couldn't get IPSFactory buffer for interface {00000131-0000-0000-c000-000000000046}
0014:err:ole:apartment_createwindowifneeded CreateWindow failed with error 14007
0014:err:ole:StdMarshalImpl_MarshalInterface Failed to create ifstub, hres=0x800736b7
0014:err:ole:CoMarshalInterface Failed to marshal the interface {6d5140c1-7436-11ce-8034-00aa006009fa}, 800736b7
0014:err:ole:get_local_server_stream Failed: 800736b7
000b:err:winediag:nodrv_CreateWindow Application tried to create a window, but no driver could be loaded.
000b:err:winediag:nodrv_CreateWindow Make sure that your X server is running and that $DISPLAY is set correctly.
0010:err:winediag:nodrv_CreateWindow Application tried to create a window, but no driver could be loaded.
0010:err:winediag:nodrv_CreateWindow Make sure that your X server is running and that $DISPLAY is set correctly.
Could not find Wine Gecko. HTML rendering will be disabled.
wine: configuration in L"/root/.wine" has been updated.
0009:fixme:process:SetProcessPriorityBoost (FFFFFFFFFFFFFFFF,1): stub
time="2022-04-24T17:56:10Z" level=info msg="Initialize module: /usr/bin/txmlconnector64-6.19.2.21.8.dll"
InitCrashHandler: Z:\usr\bin\txmlconnector-server-220424-175611.mdmp
time="2022-04-24T17:56:11Z" level=panic msg="Initialize error: Insufficient buffer."
panic: (*logrus.Entry) 0xc00019c2a0
root@ubuntu-cpu8-ram16-ssd50:/home/ubuntu/txmlconnector#
@roman-4erkasov roman-4erkasov changed the title Insuffitient buffer Initialize error: Insufficient buffer. Apr 24, 2022
@nableru
Copy link

nableru commented May 2, 2022

docker run kmlebedev/txmlconnector server

В качестве быстрого решения попробуйте не использовать последнюю версию, а запустить сервер таким образом:
docker run kmlebedev/txmlconnector:6.19.2.21.8 server

По самой проблеме, к сожалению, не подскажу. Сам только разбираюсь и kmlebedev/txmlconnector:latest у меня не стартует с аналогичными ошибками

@kmlebedev
Copy link
Owner

Там просто старый образ, сейчас попробую обновить

@nableru
Copy link

nableru commented May 3, 2022

Большое спасибо за обновление.
Но, к сожалению, возникает уже другая ошибка:
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 превращается в чат )

@kmlebedev
Copy link
Owner

Пофиксил сборку выложил свежий рабочий doсker image

@falkolab
Copy link

falkolab commented Jun 8, 2022

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 при конекте и вылетает.

@kmlebedev
Copy link
Owner

kmlebedev commented Jun 8, 2022

txmlSendCommand

Магия тут

resp, _, err := procSendCommand.Call(uintptr(unsafe.Pointer(reqData)))

Кажется ответ не влез в буфер, но как этим управлять не понятно. Могу пока сделать, так что бы не вылетало.
можно пробовать

docker pull kmlebedev/txmlconnector:6.19.2.21.16-1

@falkolab
Copy link

falkolab commented Jun 9, 2022

Да, теперь не падает, спасибо, хотелось бы понять, но не мой профиль, это похоже внутри dll вылетает судя по коду

@falkolab
Copy link

После некоторых экспериментов с локальным билдом проблемка вообще ушла локально, при этом последний собранный вами контейнер что я запустил на сервере продолжает выбивать ошибку, не вылетает конечно.

Отличия в версиях пакетов, вот мой файл:
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
)

@kmlebedev
Copy link
Owner

Может проблема в контейнере

@falkolab
Copy link

Рано радовался, ловится во время дебага клиентского приложение, вернусь с более точной информацией

@kmlebedev
Copy link
Owner

kmlebedev commented Jun 10, 2022

Может быть проблема в том что dll модуль выделяет буфер для чтение и ваш клиент не успевает считывать ?
Так как я часто использую и такой проблемы не ловил
Так же рекомендую посмотреть логи от dll в папке logs

@falkolab
Copy link

falkolab commented Jun 10, 2022

Проблема оказалась в логике клиентского приложения в режиме отладки.

Смысл такой: если допустить повторную отправку команды connect пока еще не обработан весь тот поток начальных данных, что был выкинут сервером в ответ на первый connect, то вылетит эта ошибка.

Тоесть, моя точка останова и неспешная отладка поступающих сообщений вызвала в другом потоке клиента повторную попытку подключения по retry таймауту и эта вторая попытка выбивает ошибку на сервере. По смыслу в принципе так и есть, на стороне сервера в dll библиотеке первый буфер еще не выгружен целиком, и допускается попытка писать туда еще раз.

Официальная документация:
В случае успешного выполнения команды connect повторная посылка команды возможна только после отключения от сервера с помощью команды disconnect.

Надеюсь кому поможет.

@falkolab
Copy link

Этот Insufficient buffer выносит мозг...
Какое-то навождение с этой ошибкой, отлаживаю недоступность сервера при подключении.
Вот что заметил:

  1. Иногда server_status с ошибкой "Сервер не доступен" приходит сразу, иногда надо ждать минуты полторы
  2. Если прервать соединение с txmlconnector пока ожидаешь статус после конекта и попытаться подключиться сразу же, то на команду connect вылетит следующее:
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

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

  1. Словил вот такой кейс:
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\"><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:37:41Z" level=info msg="SendCommand Data: <result success=\"true\"/>"
time="2022-06-11T09:37:45Z" level=info msg="no message received, Tick at 2022-06-11 09:37:45.448695 +0000 GMT m=+23.859898901"
......................
time="2022-06-11T09:38:50Z" level=info msg="no message received, Tick at 2022-06-11 09:38:50.345447 +0000 GMT m=+88.859638601"
time="2022-06-11T09:38:55Z" level=info msg="no message received, Tick at 2022-06-11 09:38:55.345447 +0000 GMT m=+93.859083101"
time="2022-06-11T09:38:56Z" level=info msg="txmlSendCommand() Call: <command id=\"disconnect\"/>"
time="2022-06-11T09:38:56Z" 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 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

@falkolab
Copy link

falkolab commented Jun 11, 2022

Замечены такие кейсы:

  1. После конекта и при получении статуса с ошибкой нельзя дисконектить
  2. Нельзя отправлять коннект не отключившись послу удачного подключения
  3. Нельзя вообще коненктитьповторно не дождавшись статуса с предыдущей команды
  4. Не требуется дисконект если произошло отключение, тоесть пришел статус conneceted=false recover=false

Всвязи с чем обработку этих кейсов надо реализовавать либо на стороне txmlconnector, но как я понимаю это не его задача обрабатывать логику клиента, а значит вот эта строчка https://github.com/kmlebedev/txmlconnector/blob/main/server/main.go#L168 неприемлима тк при ее наличии нельзя обработать перечисленные выше кейсы на стороне клиента.

@kmlebedev kmlebedev reopened this Mar 17, 2023
@kmlebedev
Copy link
Owner

То же словил level=error msg="txmlSendCommand() Insufficient buffer."
Кажется это из-за некорректного закрытия клиента, в следствии чего не возникает закрития коннекта в стороны транзакта и освобождение памяти буферов и на следующий коннект не хвататет.

@nableru
Copy link

nableru commented Mar 18, 2023

Я тоже на это же наступил. Гугление привело на похожее: ClickHouse/clickhouse-go#209
В моем случае тоже падало после получения securities
Решил перевести на нативный clickhouse модуль https://clickhouse.com/docs/en/integrations/go
после перевода securities сохранились успешно. перевожу остальное, проблем пока больше не наблюдается

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants