FiNick
|
Date: 10/5/2011
Alexander Mukhanchikov:
По ночам лучше спать :)
Вот именно!=) Все равно не работает, верни return, либо поменяй Func на Action
|
|
|
|
Thanks:
|
|
|
|
|
|
Alexander
|
Date: 10/5/2011
FiNick:
Alexander Mukhanchikov:
По ночам лучше спать :)
Вот именно!=) Все равно не работает, верни return, либо поменяй Func на Action
недокоммитил. у себя проверял - работает.
|
|
|
|
Thanks:
|
|
|
|
|
|
FiNick
|
Date: 10/5/2011
Протестил. В клиринг приложение не падает, но вот после клиринга перестал обновляться стакан, пришлось переконнектиться
|
|
|
|
Thanks:
|
|
|
|
|
|
Alexander
|
Date: 10/5/2011
FiNick:
Протестил. В клиринг приложение не падает, но вот после клиринга перестал обновляться стакан, пришлось переконнектиться
Тоже самое и после торгов. Пока хз в чём дело. Если будут идеи после анализа исходников PlazaTrader - пишите.
|
|
|
|
Thanks:
|
|
|
|
|
|
FiNick
|
Date: 10/5/2011
Похоже ошибку будет сложно отследить, т.к. клиринг просто так посреди дня несколько раз не воспроизвести.
Я смотрел логи, в начале клиринга по потоку FORTS_FUTAGGR5_REPL вылетает 'SERV:NO_SERVICE', затем через несколько секунд
Stream opening started;stream 0x53183F0,type 1,name 'FORTS_FUTAGGR5_REPL'.
То есть поток переоткрывается похоже, наверное в методе CheckConnection, если я ничего не путаю. Потом в логах он больше не фигурирует весь клиринг и после клиринга тоже
Кстати, замечание в РТС сделали, надо исправить:
Закрывать потоки надо до закрытия соединения, а не пытаться сделать это после:
2011-10-05 19:03:13.921;p2repl-cli;;CLOSE message posted;stream 0x5415360
2011-10-05 19:03:13.921;p2repl-cli;error;p2err 24579=0x6003 - 'MQ:NOT_CONNECTED_YET';Couldn't post CLOSE message;stream 0x5415360
|
|
|
|
Thanks:
|
|
|
|
|
|
Alexander
|
Date: 10/5/2011
|
|
|
|
|
FiNick:
Похоже ошибку будет сложно отследить, т.к. клиринг просто так посреди дня несколько раз не воспроизвести.
Я смотрел логи, в начале клиринга по потоку FORTS_FUTAGGR5_REPL вылетает 'SERV:NO_SERVICE', затем через несколько секунд
Stream opening started;stream 0x53183F0,type 1,name 'FORTS_FUTAGGR5_REPL'.
То есть поток переоткрывается похоже, наверное в методе CheckConnection, если я ничего не путаю. Потом в логах он больше не фигурирует весь клиринг и после клиринга тоже
Кстати, замечание в РТС сделали, надо исправить:
Закрывать потоки надо до закрытия соединения, а не пытаться сделать это после:
2011-10-05 19:03:13.921;p2repl-cli;;CLOSE message posted;stream 0x5415360
2011-10-05 19:03:13.921;p2repl-cli;error;p2err 24579=0x6003 - 'MQ:NOT_CONNECTED_YET';Couldn't post CLOSE message;stream 0x5415360
Так и делается, разве нет?
protected override void OnDisconnect()
{
// Иначе при выгрузке в StopStream будет срабатывать исключение.
if (IsExportRunning)
StopExport();
_connectionPool.Disconnect();
System.Diagnostics.Trace.WriteLine("OnDisconnect");
}
По поводу стаканов - в клиринг они присылают StreamDatumDeleted, надо как-то его обработать правильно.
P.S. Я так пару багов с инициализацией инструмента подправил
|
|
|
|
Thanks:
|
|
|
|
|
|
FiNick
|
Date: 10/5/2011
Alexander Mukhanchikov:
Так и делается, разве нет?
protected override void OnDisconnect()
{
// Иначе при выгрузке в StopStream будет срабатывать исключение.
if (IsExportRunning)
StopExport();
_connectionPool.Disconnect();
System.Diagnostics.Trace.WriteLine("OnDisconnect");
}
А StopExport() здесь останавливает выполенение и дожидается пока все потоки будут закрыты?
Я так понимаю закрытие потоков непосредственно выполняется в pollAction, может так получается, что дисконнект и закрытие потоков происходит параллельно.
На счет стаканов РТС написали:
"Как я понял, по вашему времени клиринг с 17-45 до 18-30 ? После него оба агреггированных потока приходили успешно вплоть до самого закрытия приложения."
что собственно я и видел в логах. Возможно это у нас косяк
|
|
|
|
Thanks:
|
|
|
|
|
|
Alexander
|
Date: 10/5/2011
FiNick:
Alexander Mukhanchikov:
Так и делается, разве нет?
protected override void OnDisconnect()
{
// Иначе при выгрузке в StopStream будет срабатывать исключение.
if (IsExportRunning)
StopExport();
_connectionPool.Disconnect();
System.Diagnostics.Trace.WriteLine("OnDisconnect");
}
>
> А StopExport() здесь останавливает выполенение и дожидается пока все потоки будут закрыты?
> Я так понимаю закрытие потоков непосредственно выполняется в pollAction, может так получается, что дисконнект и закрытие потоков происходит параллельно.
>
> На счет стаканов РТС написали:
> "Как я понял, по вашему времени клиринг с 17-45 до 18-30 ? После него оба агреггированных потока приходили успешно вплоть до самого закрытия приложения."
> что собственно я и видел в логах. Возможно это у нас косяк
Это точно наш косяк. Надо удалять записи с ревизиями < пришедшей по событию StreamDatumDeleted. Мы этого не делаем.
|
|
|
|
Thanks:
|
|
|
|
|
|
FiNick
|
Date: 10/5/2011
Специальное уведомление StreamDatumDeleted присылается сервером по каждой таблице в начале синхронизации. Это уведомление означает «данных с ревиженами меньше указанного, на сервере нет».
«Безбазовый» клиент должен удалить все данные с ревиженами, меньшими указанного в уведомлении из своего хранилища.
У нас же «базовый» клиент, там вроде само все делается, или я не прав?
Плюс у нас в коде OnStreamDatumDeleted есть, там что-то делается
|
|
|
|
Thanks:
|
|
|
|
|
|
FiNick
|
Date: 10/5/2011
Протрассировал дисконнект:
protected override void OnDisconnect()
{
// Иначе при выгрузке в StopStream будет срабатывать исключение.
if (IsExportRunning)
StopExport();
_connectionPool.Disconnect();
System.Diagnostics.Trace.WriteLine("OnDisconnect");
}
Там получается, что StopExport() никого не дожидается. _connectionPool.Disconnect() и Close всех потоков происходит параллельно, понятно, что Disconnect раньше происходит, и в лог ошибки сыплются.
Поставил после StopExport() слип на пару секунд, все норм стало, но это грубо и некрасиво. Нужно AutoResetEvent какой-нибудь прикрутить или что-то подбное
|
|
|
|
Thanks:
|
|
|
|
|