universome / aladdin

A betting arbitrage bot
3 stars 0 forks source link

Переделал глобальную таблицу #164

Closed loyd closed 7 years ago

loyd commented 7 years ago
  1. Пофиксил баг обновления сильно изменившихся офферов в bookie, скорее всего именно из-за этого были фейлы при удалении некоторых старых офферов (+ часть протухших при ставке тоже из-за этого), когда не находился нужный маркет.
  2. Теперь глобальная таблица представляет собой хеш-таблицу, где в каждой ячейке хранится массив маркетов. Это позволяет форсировать порядок маркетов и избежать перестановок, т.к. по факту является цепочечным вариантом.
  3. Кроме того, каждая ячейка теперь защищается мьютексом на основе parking lot (кратко: мьютекс некоторое время крутит спинлок, потом сваливается в поточный park/unpark, пасаны думают заменить стандартные на эти), что позволяет избавиться от необходимости полной блокировки.
  4. Теперь каждый обработчик watch-а гемблера работает с таблицей, проверка осталась в отдельном потоке (в одном, тут смысла нет параллелить сейчас).
  5. Из-за неблокируемости, часть таблицы может измениться при обходе в сервере, но гарантируется целостность для отдельных маркетов.
  6. Заменил все стандартные Mutex-ы и RwLock-и на их адаптивные аналоги, убрал проверки из-за poisoning-а и упростил барьер.
  7. Bookie больше не использует matcher::compare_offer, теперь он сравнивает заголовки (округлённая дата + игра + тип + кол-во исходов).
  8. Больше никакого HashableOffer и unsafe.
  9. Добавил время старта процесса (на самом деле время старта сервера) на страницу.

Close #159. Close #98.

loyd commented 7 years ago

Посмотрю ещё разок на наличие дидлоков как протрезвею.