Ошибка в клиринг
Atom Ответить
04.10.2011


Во время клиринга вылетает огромное колличество ошибок "Ошибка проверки потока репликации. Код -2147184638", описание "P2ERR_SERV_NO_SERVICE", пока не переполнится стек.
Источник ошибки:
Код
() => // pollAction
{
	if (Streams.Count == 0 && _streamsToRemove.Count == 0)
		_sleepInterval.Sleep();

	Streams.SyncDo(c =>
	{
		foreach (var stream in Streams)
		{
			try
			{
				stream.CheckConnection(_connection);
			}
			catch (COMException e)
			{
				System.Diagnostics.Trace.WriteLine("stream.CheckConnection(_connection) - COMException " + e.ErrorCode.ToString());
				Error.SafeInvoke(new PlazaException("Ошибка проверки потока репликации.", e));
			}
		}
	});

В методе stream.CheckConnection(_connection), вызывается DataStream.Open(connection);, что и дает ошибку.

Теги:


Спасибо:




37 Ответов
< 1 2 
Alexander

Фотография
Дата: 06.10.2011
Ответить


По коду выше немного не понял для чего нужен _streamManager._stopStreamLock.Reset();.
Спасибо:

FiNick

Фотография
Благотворитель
Дата: 06.10.2011
Ответить


Alexander Mukhanchikov Перейти
По коду выше немного не понял для чего нужен _streamManager._stopStreamLock.Reset();.

Чтобы быть уверенным, что перед началом остановки потоков _stopStreamLock находится в закрытом состоянии, т.е. что вызов WaitOne точно остановит выполнение.

я на самом деле никогда с такими штуками не работал, могу ошибаться.
Автор топика
Спасибо:

Alexander

Фотография
Дата: 06.10.2011
Ответить


Фикс с удалением, к сожалению, не помог. Чего-то не так с ревизиями всё равно.
Спасибо:

FiNick

Фотография
Благотворитель
Дата: 06.10.2011
Ответить


Alexander Mukhanchikov Перейти
Фикс с удалением, к сожалению, не помог. Чего-то не так с ревизиями всё равно.

Да, действительно. Тут еще такая проблемка: до клиринга выставил заявку, ушел с ней на клиринг. Теперь она висит активной, не могу снять, перезапускал и робота и раутер все равно висит. Запускаю SimpleGUI, там нет этой заявки.

И еще вот что мне РТС написал:
По приложенному логу видно, что накапливается очередь сообщений в первые секунды работы.
2011-10-06 16:45:47.234;p2mq-cli;;New message added to recvList. Size: 38
Это приводит к задержкам в получении данных, поэтому предлагается побороться с очередями. Для этого предлагается разбить получение реплики на несколько соединений, работающих в отдельных thread'ах, каждое со своим циклом выборки.

Вот еще странная фраза РТС, которая может помочь=)
Используется базовый или безбазовый вариант клиента репликации?
В случае безбазового клиента, какова политика обработки ошибок в потоке данных - используется ли накопленная информация для запроса данных?
Автор топика
Спасибо:

Alexander

Фотография
Дата: 06.10.2011
Ответить


Безбазовый у нас клиент, бд не использует.
Спасибо:

Alexander

Фотография
Дата: 07.10.2011
Ответить


Стаканы поправил, в клиринг с 14 до 14:03 проблема со стаканами прошла - пошли дальше как ни в чём не бывало. Посмотрим что будет в вечерний клиринг.
Спасибо:

FiNick

Фотография
Благотворитель
Дата: 07.10.2011
Ответить


Alexander Mukhanchikov Перейти
Стаканы поправил, в клиринг с 14 до 14:03 проблема со стаканами прошла - пошли дальше как ни в чём не бывало. Посмотрим что будет в вечерний клиринг.

А вы на каком сервере смотрите, на игровом? Малый клиринг стаканы нормально проходят, проблема была с клирингом 14.45-15.30 Мск. В понедельник протестирую
Автор топика
Спасибо:

Alexander

Фотография
Дата: 07.10.2011
Ответить


FiNick Перейти
Alexander Mukhanchikov Перейти
Стаканы поправил, в клиринг с 14 до 14:03 проблема со стаканами прошла - пошли дальше как ни в чём не бывало. Посмотрим что будет в вечерний клиринг.

А вы на каком сервере смотрите, на игровом? Малый клиринг стаканы нормально проходят, проблема была с клирингом 14.45-15.30 Мск. В понедельник протестирую


На боевом, да. Тестовый сегодня не работает в связи с обновлением на 3.8.2. Жду 18:45 :)
Спасибо:

FiNick

Фотография
Благотворитель
Дата: 07.10.2011
Ответить


Alexander Mukhanchikov Перейти
На боевом, да. Тестовый сегодня не работает в связи с обновлением на 3.8.2. Жду 18:45 :)


На боевом или на игровом всетаки? ведь чтобы открыть счет на боевом сервере надо робота засертифицировать
Автор топика
Спасибо:

Alexander

Фотография
Дата: 07.10.2011
Ответить


FiNick Перейти
Alexander Mukhanchikov Перейти
На боевом, да. Тестовый сегодня не работает в связи с обновлением на 3.8.2. Жду 18:45 :)


На боевом или на игровом всетаки? ведь чтобы открыть счет на боевом сервере надо робота засертифицировать


На полноценном боевом сервере.
Спасибо:

Alexander

Фотография
Дата: 07.10.2011
Ответить


Проверил - фикс работает.
Стакан обновляется, после клиринга не останавливается. ThumpUp

Но также надо и остальные таблицы обновлять, удаляя ненужные записи. Чтоб потом не поиметь проблем.
Как минимум - если в клиринг приходит StreamDatumDeleted для стрима сделок своих - то все активные сделки с ревизиями меньшей пришедшей - снимаются.
Спасибо:

Alexander

Фотография
Дата: 10.10.2011
Ответить


FiNick Перейти
Например сделать так:
В PlazaTrader'e
Код

public override void StopExport()
{
	lock (_stopExportLock)
	{
		_streamManager._stopStreamLock.Reset();
		if (!IsExportRunning)
			return;

		StopStream();
		base.StopExport();

		_streamManager._stopStreamLock.WaitOne();
		System.Diagnostics.Trace.WriteLine("Export stopped");
	}
}

В PlazaStreamManager'e
Код
internal readonly AutoResetEvent _stopStreamLock = new AutoResetEvent(false);

_streamsToRemove.SyncDo(c =>
{
     foreach (var stream in _streamsToRemove)
     {
          try
          {
               stream.Close();
          }
          catch (COMException e)
          {
               System.Diagnostics.Trace.WriteLine("stream.Close() - COMException " + e.ErrorCode.ToString());
               Error.SafeInvoke(new PlazaException("Ошибка закрытия потока репликации.", e));
          }
     }

     _streamsToRemove.Clear();
     _stopStreamLock.Set();
});




Спасибо. Залил это решение.
В 4.0.2 не попало.
Необходимо протестировать из исходников.
Спасибо:
< 1 2 

Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy