Welcome
Sign in to start your session
Login
Login
[app info]
Brief app info: ENV: [DEV] commitId: 8204bdc1c3bc4401c4b003b97dde17f5eb39bfe4 branch: develop build date: 2026-10-12T12:19:13Z build version: 2026.08.06.1-SNAPSHOT commit message: #38824 Free spins: read the SGS error envelope, stop re-sending a timed-out grant as a duplicate, cap the retries The MG-service answers every failure of POST /promo/free-spins as HTTP 200 with an error envelope that FreeSpinResponse dropped, so a refusal surfaced as an empty SGSFreeSpinAssignmentException. On prod the refusal was Alea's "casinoBonusId already exists": the first POST had been granted but its answer took longer than the 10 s read timeout, @Retryable re-sent the same casinoPromotionId, and the retry daemon then repeated the duplicate 99 more times while the bonus sat in ERROR. - FreeSpinResponse carries code/message/inboundServerResponse; SGSFreeSpinAssignmentException carries a Cause (REJECTED, TEMPORARY, TIMEOUT, ALREADY_ASSIGNED) and the casinoPromotionId, with the provider's codes in the message, the log and last_error_message. - createPlayerPromo retries only 5xx and connection failures: a 4xx is final and a read timeout becomes Cause.TIMEOUT whose cause is the socket exception, since Spring Retry walks the cause chain. The promo client's read timeout is SGS_PROMO_READ_TIMEOUT_SEC, default 30 s. A start time already reached is not sent; the log names the bonus, not the player's login; a removal without an offer id is a no-op. - The retry daemon re-sends with a 2, 4, 8 ... minute delay capped at 4 h and 10 attempts in all, computed from updated_at. "Already exists" activates the bonus without an offer id and notes that on it; a refusal of the request, an expired bonus or exhausted attempts end the row as the new FAILED status with the reason on the bonus. The row JSON uses one private mapper for both directions. - Tests: SGSUniversalGameServiceFreeSpinsTest, MarketingDaemonServiceImplFreeRoundsRetryTest, and the envelope, 4xx, already-exists and read-timeout cases in the contract and integration tests. UPTIME: 0d 2h 31m 19s Git log: 28087... | 2026-10-09T13:48:42+03:00 | Rodion | #38558 Remove the dead Customer.io event-descri... 7f9cc... | 2026-10-08T13:26:37+03:00 | Rodion | #38810 Чистить брошенные тестовые контейнеры по... 89de3... | 2026-10-08T12:46:12+03:00 | Rodion | #38795 Антифрод рефералки: поправить счётчики в... 01912... | 2026-10-08T11:51:08+03:00 | Rodion | #38795 Антифрод рефералки: отклонять только при... 54fcd... | 2026-10-07T16:07:11+02:00 | nikita | #36924 c227d... | 2026-10-07T15:57:18+02:00 | nikita | #38800 dc4da... | 2026-10-07T16:01:43+03:00 | Rodion | #38190 Кривой RM_STATIC_KEYS больше не роняет с... 4b0c8... | 2026-10-06T19:31:27+03:00 | Rodion | #38617 Руководство оператора: точнее про антифр... b3c62... | 2026-10-06T19:03:10+03:00 | Rodion | #38792 Карточка допуска: сброшенный снимок боль... d15ac... | 2026-10-06T16:45:09+02:00 | nikita | #38794
copy to clipboard