Skip to content

revert woody wflow logic - #86

Merged
karle0wne merged 2 commits into
masterfrom
fix-d3k
Aug 13, 2026
Merged

revert woody wflow logic#86
karle0wne merged 2 commits into
masterfrom
fix-d3k

Conversation

@karle0wne

@karle0wne karle0wne commented Aug 13, 2026

Copy link
Copy Markdown
Contributor

сейчас сервис работает нормально , но в логах теперь нет метаданных из jwt которые ранее попадали туда из контекста трейса вуди, это произошло потому что потеряли часть логики вуди хттп хедера при миграции на сб4. в целом и так можно жить, но с wflow удобнее корректно стратовать вуди трейс контекст

проверка регрессии

Да, после повторной проверки причина однозначна: при миграции я перенёс только видимую часть woody-http-bridge, а его ключевое неявное поведение потерял.

Что работало раньше:

  1. woody-http-bridge через Spring Boot autoconfiguration автоматически регистрировал WoodyTracingFilter с order -50. В коде Wachter этого фильтра явно не было — он появлялся благодаря зависимости и настройке woody-http-bridge.tracing.

  2. Фильтр обрабатывал входящий /wachter:

    • читал входящие woody.*/x-woody-*;
    • читал данные пользователя из JWT;
    • формировал woody.meta.user-identity.*;
    • создавал TraceData;
    • переносил woody.meta.* в TraceData.activeSpan.customMetadata;
    • запускал всю дальнейшую обработку внутри WFlow.
  3. При запуске WFlow библиотека Woody вызывала MDCUtils.putTraceData(...). Woody 3.0.0 преобразовывал custom metadata:

user-identity.email

в MDC-поле:

rpc.server.metadata.user-identity.email

А логгер уже записывал MDC в структурированный JSON, который забирал OpenSearch.

  1. Исходящий запрос создавался не из JWT заново. TraceContextExtractor читал текущий TraceContext, включая custom metadata, и отправлял её downstream как woody.meta.*.

То есть существовало единое состояние:

JWT / входящие headers
        ↓
TraceData.customMetadata
        ↓
        ├── Woody MDC → rpc.server.metadata.* → OpenSearch
        └── outgoing woody.meta.* → downstream

Что я сделал при миграции неправильно:

  • удалил woody-http-bridge;
  • удалил его autoconfiguration и вместе с ней весь входящий WoodyTracingFilter;
  • заменил TraceContextExtractor собственным TraceHeaderNormalizer;
  • перенёс JWT → woody.meta.*, но вызываю это только при подготовке исходящего запроса в WachterClient.java;
  • не создал TraceData;
  • не перенёс metadata в customMetadata;
  • не обернул обработку /wachter в WFlow.

Текущая цепочка поэтому выглядит так:

JWT
 ↓
TraceHeaderNormalizer
 ↓
исходящие woody.meta.* headers

[TraceHeaderNormalizer.java] действительно извлекает JWT, но возвращает только HttpHeaders. С Woody TraceContext, custom metadata и MDC этот класс вообще не работает.

Именно поэтому в экспортированном логе одновременно наблюдаются два факта:

  • в сообщении Send request ... headers присутствуют woody.meta.user-identity.*;
  • структурированные rpc.server.metadata.user-identity.* пусты.

Это не проблема JWT и не проблема OpenSearch. Значения успешно извлечены, но существуют только как исходящие HTTP-заголовки и никогда не попадают в локальный Woody MDC.

Почему тесты пропустили регрессию:

  • тест нормализатора проверяет JWT → исходящие woody.meta.*;
  • интеграционный тест проверяет те же заголовки на WireMock;
  • тест Java Agent проверяет только W3C traceparent: сохранение trace ID и создание нового span ID;
  • ни один тест не проверяет MDC.get("rpc.server.metadata.user-identity.email") во время реальной обработки запроса.

Более того, старые тесты, создававшие TraceContext, при миграции были упрощены, потому что новый клиент больше не требовал контекст. Это было принято за успешное отделение от OTEL, хотя фактически исчез и необходимый Woody-контекст.

OTEL здесь оказался отвлекающим фактором. В bridge в одних классах были смешаны:

  • ручная OTEL-интеграция, которую действительно следовало удалить;
  • Woody TraceData/WFlow/MDC, которые следовало перенести;
  • обработка ошибок, которую необязательно копировать.

Я ошибочно удалил первые две части вместе. Агент корректно заменил первую, но он не заменяет и не должен заменять Woody custom metadata/MDC.

Итог: Spring Boot 4 сам по себе эту регрессию не создал, Woody 3.0.0 по-прежнему поддерживает WFlow и rpc.server.metadata.*, а деплой OTEL работает. Регрессия появилась непосредственно из-за неполного переноса поведения woody-http-bridge в Wachter.

@karle0wne
karle0wne merged commit 789c035 into master Aug 13, 2026
4 checks passed
@karle0wne
karle0wne deleted the fix-d3k branch August 13, 2026 12:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants