fix(sugar): не глотать отмену в fallback-ах autofill + ValidationException для Flags - #86
Merged
Merged
Conversation
…ption для Flags Замечания CodeRabbit к релизному PR #76. - FetchCounterpartySignerCount и FetchLoan оборачивают вызов клиента широким catch — это верно для случая, ради которого он существует (аккаунт контрагента или объект Loan ещё не созданы, дальше отработает preclaim), но туда же уходил OperationCanceledException от токена вызывающего. Autofill продолжал работу и записывал комиссию, посчитанную по fallback — один подписант, отсутствующий заём, — для запроса, который вызывающий уже отменил. Добавлен фильтр when (!cancellationToken.IsCancellationRequested): отмена вызывающего всплывает, а таймаут внутри клиента, который этот токен не отменяет, по-прежнему уходит в fallback - MPTokenIssuanceSet: Flags разбирался через Convert.ToUInt32, бросающий FormatException/InvalidCastException на нечисловом значении, тогда как соседняя проверка ImmutableFlags и остальные валидаторы сообщают ValidationException — её и ловят вызывающие Тесты: отменённый токен обязан бросить и не оставить Fee (LoanSet и LoanPay), нечитаемый объект Loan обязан по-прежнему уходить в fallback, нечисловой Flags — давать ValidationException. Первые два падают, если убрать фильтры.
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (5)
📝 WalkthroughWalkthroughAutofill now propagates caller cancellation during signer-list and loan lookups. Other lookup failures still use fallback fees. ChangesAutofill and transaction validation
Estimated code review effort: 2 (Simple) | ~10 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Два замечания CodeRabbit к релизному PR #76, оставшиеся неразобранными. Оба проверены по коду, оба валидны.
Отмена уходила в fallback autofill
FetchCounterpartySignerCountиFetchLoanоборачивают вызов клиента широкимcatch. Для случая, ради которого он существует, это верно: аккаунта контрагента или объектаLoanможет ещё не быть, и rippled сам сообщит об этом в preclaim. Но в тот же catch попадалOperationCanceledException, поднятый из токена вызывающего, — и вместо остановки autofill продолжал работу и записывал комиссию, посчитанную по запасному значению (один подписант, отсутствующий заём), для запроса, который вызывающий уже отменил.Фильтр пропускает наверх отмену, запрошенную вызывающим, и оставляет прежнее поведение для всего остального — в том числе для таймаута внутри клиента, который этот токен не отменяет и потому по-прежнему уходит в fallback.
FlagsвMPTokenIssuanceSetсообщал не тем типомConvert.ToUInt32(flags)бросаетFormatException/InvalidCastExceptionна нечисловом значении, тогда как проверкаImmutableFlagsдвумя строками ниже — и остальные валидаторы — сообщаютValidationException. Вызывающий, который ловитValidationException, две первые не поймает. Заменено наCommon.TryGetUInt32с явным сообщением.Тесты
..._LoanSet_CancellationIsNotSwallowedByTheSignerFallbackFee..._LoanPay_CancellationIsNotSwallowedByTheLoanFallbackLoan..._LoanPay_FailedLookupStillFallsBackWhenNotCancelledTestUMPTokenIssuanceSet_PreflightRulesFlagsдаётValidationExceptionПервые два падают, если убрать фильтры — проверено откатом: 2 из 29 в классе. Мок
FeeTestClientтеперь уважает токен черезThrowIfCancellationRequested, как это делает настоящий клиент.Что отклонено и почему
TestUChangeServerFailure.cs:101,158— гонка свободного порта. Зазор описан верно, но предложенные способы не подходят. Удержать listener доStartMockнельзя: тесту нужен именно закрытый порт — это сценарий «сервер поднимется позже», и так задокументировано вGetFreePort. Внутрипроцессные коллизии уже сняты черезClaimedPorts, а межпроцессная гонка не приводит к молчаливому зависанию: на строках 121 и 175 стоитAssert.IsTrue(TestUtils.IsPortStillFree(secondPort), "…rerun"), то есть быстрый отказ с понятной причиной.connection.cs:2548— keepalive-порог 30s не выведен изInactivityTimeout. Фактически верно: приInactivityTimeoutменьше 30 секунд ветка полноценного ping-запроса недостижима. На дефолтах поведение прежнее, сам CodeRabbit пометил как Trivial / low value, и это чистая читаемость. Трогатьconnection.cs— файл, вокруг которого крутились четыре последних фикса переподключения, — ради этого перед релизом не стоит; вернёмся отдельно.Проверка
930 юнит-тестов зелёные.
Summary by CodeRabbit
Bug Fixes
Tests