InnovaCo / hyper-facade

Other
1 stars 0 forks source link

Некорректное применение фильтров для событий #71

Closed maqdev closed 8 years ago

maqdev commented 8 years ago

На текущий момент поддержка событий реализована некорректно на разных уровнях:

  1. При подписи на ресурс /a, могут приходить события с URI /b (ниже описан сценарий). В этом случае начнут применяться фильтры, которые висят на /a
  2. Рерайтинг выполняется /b -> /a, что в корне неверно, идет утеря URI
  3. Не спроектировано, как в RAML указать события и повесить на них фильтры

Сценарий, когда при подписи на /a приходят события с другим URI возможен например с револтом. При подписи на ресурс /v3/app-statuses?page.from= в случае револта рерайтится в /revault/content/services/status-monitor/app-statuses и начинают приходить события с uri /revault/content/services/status-monitor/app-statuses/{appId} которые должны обратно рерайтится в /app-statuses/{appId} На текущий момент, из-за проблем 1-2 они приходят на фронт в таком виде: https://www.dropbox.com/s/v3denlvstyotl3l/Screenshot%202016-04-25%2021.37.10.png?dl=0

Решения:

  1. События в RAML указывать отдельно от команд, которые им соответствуют. На текущий момент RAML не поддерживает кастомные методы. В связи с этим два пути:

    1.1. доработать парсер RAML, см. также https://github.com/raml-org/raml-spec/issues/192 1.2. соглашение URI, например /${events}/abc специфицирует отдельно события для ресурса /abc

  2. Применять фильтры для событий в соответствии с их описанием в RAML, но передавать туда FacadeRequestContext подписчика.
  3. Рерайтинг для событий должен происходить в обратном направлении
  4. Фильтры для событий применяются при рерайтинге для каждого stage, как и в случае request

Что мы должны получить:

  1. Возможность вешать отдельно фильтры на события, например повесив private на событие feed:deleteоно перестанет приходить на фронт и это не зависит от того, висит лиprivate` на delete для этого ресурса
  2. Корректный рерайт URI событий, в примере выше, для револта должны при подписи на /v3/app-statuses?page.from= приходить события с uri /app-statuses/1
maqdev commented 8 years ago

Опубликованое событие в hyperbus:

{"uri":{"pattern":"/revault/content/{path:*}","args":{"path":"services/status-monitor/app-statuses/9"}},"headers":{"method":["feed:patch"],"revision":["45958"],"contentType":["app-env-status"],"messageId":["7iYvR--JFUG4i5j5tBoIiPD0S1XzY6"],"correlationId":["1"]},"body":{"appId":"9","environments":{"live":{"overriddenStatus":null,"status":false,"servers":{"QA Gardarika":{"lastDetectedAt":1461613087430,"detectedStatus":false}}}},"_links":{}}}
maqdev commented 8 years ago
INF 2016-04-26 02:04:02,097 rt.kafkatransport.TopicSubscription +1 handler on consumer #4b08bfd8@cpb3-q.qa.inn.ru-10105 on topic hyperbus2 -> RequestMatcher(Some(Uri(Specific(/revault/content/{path:*})#path -> RegexMatcher(services/status-monitor/app-statuses/.*))),Map(method -> RegexMatcher(^feed:.*$)))
INF 2016-04-26 02:04:03,332 rbus.transport.api.TransportManager New `onEvent` subscription on RequestMatcher(Some(Uri(Specific(/revault/content/{path:*})#path -> RegexMatcher(services/status-monitor/app-statuses/.*))),Map(method -> RegexMatcher(^feed:.*$))): #61f2e995. TransportSubscription(eu.inn.hyperbus.transport.KafkaServerTransport@40f8f5a8,KafkaTransportSubscription(TopicSubscriptionKey(hyperbus2,List(),cpb3-q.qa.inn.ru-10105),2))
INF 2016-04-26 02:04:03,332 rt.kafkatransport.TopicSubscription Starting consumer #4b08bfd8@cpb3-q.qa.inn.ru-10105 on topic hyperbus2 -> List(RequestMatcher(Some(Uri(Specific(/revault/content/{path:*})#path -> RegexMatcher(services/status-monitor/app-statuses/.*))),Map(method -> RegexMatcher(^feed:.*$))))
TRA 2016-04-26 02:04:03,359 eu.inn.hyperbus.Hyperbus            hyperbus <~ eu.inn.hyperbus.model.DynamicRequest[eu.inn.hyperbus.model.DynamicBodyContainer]:{"uri":{"pattern":"/revault/content/{path:*}","args":{"path":"services/status-monitor/app-statuses"}},"headers":{"messageId":["100500"],"method":["get"]},"body":{"page.from":null}}
TRA 2016-04-26 02:04:03,470 eu.inn.hyperbus.Hyperbus            hyperbus ~(R)~> eu.inn.hyperbus.model.Ok[eu.inn.hyperbus.model.DynamicBodyContainer]:{"status":200,"headers":{"revision":["46342"],"messageId":["7iZCl-10Ihn8RQphlhLoMp-xTun47y"],"correlationId":["100500"]},"body":{"_embedded":{"els":[{"appId":"1","environments":{"live":{"status":false,"servers":{"QA World":{"lastDetectedAt":1459873734242,"detectedStatus":false}}}},"_links":{},"id":"1"},{"appId":"1006","environments":{"live":{"status":false,"servers":{"QA Phoenix":{"lastDetectedAt":1459873734081,"detectedStatus":false}}}},"_links":{},"id":"1006"},{"appId":"17","environments":{"live":{"status":false,"servers":{"QA Москва":{"lastDetectedAt":1459873734243,"detectedStatus":false}}}},"_links":{},"id":"17"},{"appId":"19","environments":{"live":{"status":false,"servers":{"QA gw101":{"lastDetectedAt":1459873734202,"detectedStatus":false}}}},"_links":{},"id":"19"},{"appId":"2","environments":{"live":{"status":false,"servers":{"QA Jupiter":{"lastDetectedAt":1459873734244,"detectedStatus":false}}}},"_links":{},"id":"2"},{"appId":"33","environments":{"live":{"status":false,"servers":{"QA Fehyshar":{"lastDetectedAt":1459873734232,"detectedStatus":false}}}},"_links":{},"id":"33"},{"appId":"6","environments":{"live":{"status":false,"servers":{"QA Franz":{"lastDetectedAt":1459873734242,"detectedStatus":false}}}},"_links":{},"id":"6"},{"appId":"604","environments":{"live":{"status":false,"servers":{"testGameSuccess":{"lastDetectedAt":1461571423743,"detectedStatus":false}}}},"_links":{},"id":"604"},{"appId":"611","environments":{"live":{"overriddenStatus":false,"status":false,"servers":{"alwaysOff":{"lastDetectedAt":1459873724228,"detectedStatus":true}}}},"_links":{},"id":"611"},{"appId":"612","environments":{"live":{"overriddenStatus":true,"status":true,"servers":{"alwaysOn":{"lastDetectedAt":1459981760970,"detectedStatus":false}}}},"_links":{},"id":"612"},{"appId":"8","environments":{"live":{"status":false,"servers":{"QA 01":{"lastDetectedAt":1459873734052,"detectedStatus":false}}}},"_links":{},"id":"8"},{"appId":"9","environments":{"live":{"status":true,"servers":{"QA Gardarika":{"lastDetectedAt":1461625427826,"detectedStatus":true}}}},"_links":{},"id":"9"}]}}}
TRA 2016-04-26 02:04:03,478 facade.events.FeedSubscriptionActor Processing resource state eu.inn.hyperbus.model.Ok[eu.inn.hyperbus.model.DynamicBodyContainer]:{"status":200,"headers":{"revision":["46342"],"messageId":["7iZCl-10Ihn8RQphlhLoMp-xTun47y"],"correlationId":["100500"]},"body":{"_embedded":{"els":[{"appId":"1","environments":{"live":{"status":false,"servers":{"QA World":{"lastDetectedAt":1459873734242,"detectedStatus":false}}}},"_links":{},"id":"1"},{"appId":"1006","environments":{"live":{"status":false,"servers":{"QA Phoenix":{"lastDetectedAt":1459873734081,"detectedStatus":false}}}},"_links":{},"id":"1006"},{"appId":"17","environments":{"live":{"status":false,"servers":{"QA Москва":{"lastDetectedAt":1459873734243,"detectedStatus":false}}}},"_links":{},"id":"17"},{"appId":"19","environments":{"live":{"status":false,"servers":{"QA gw101":{"lastDetectedAt":1459873734202,"detectedStatus":false}}}},"_links":{},"id":"19"},{"appId":"2","environments":{"live":{"status":false,"servers":{"QA Jupiter":{"lastDetectedAt":1459873734244,"detectedStatus":false}}}},"_links":{},"id":"2"},{"appId":"33","environments":{"live":{"status":false,"servers":{"QA Fehyshar":{"lastDetectedAt":1459873734232,"detectedStatus":false}}}},"_links":{},"id":"33"},{"appId":"6","environments":{"live":{"status":false,"servers":{"QA Franz":{"lastDetectedAt":1459873734242,"detectedStatus":false}}}},"_links":{},"id":"6"},{"appId":"604","environments":{"live":{"status":false,"servers":{"testGameSuccess":{"lastDetectedAt":1461571423743,"detectedStatus":false}}}},"_links":{},"id":"604"},{"appId":"611","environments":{"live":{"overriddenStatus":false,"status":false,"servers":{"alwaysOff":{"lastDetectedAt":1459873724228,"detectedStatus":true}}}},"_links":{},"id":"611"},{"appId":"612","environments":{"live":{"overriddenStatus":true,"status":true,"servers":{"alwaysOn":{"lastDetectedAt":1459981760970,"detectedStatus":false}}}},"_links":{},"id":"612"},{"appId":"8","environments":{"live":{"status":false,"servers":{"QA 01":{"lastDetectedAt":1459873734052,"detectedStatus":false}}}},"_links":{},"id":"8"},{"appId":"9","environments":{"live":{"status":true,"servers":{"QA Gardarika":{"lastDetectedAt":1461625427826,"detectedStatus":true}}}},"_links":{},"id":"9"}]}}} for /v3/app-statuses?page.from=
DEB 2016-04-26 02:04:03,509 facade.events.FeedSubscriptionActor Reliable subscription started for FacadeRequestContext(/127.0.0.1,http://api.4gametest.com/v3/,/v3/app-statuses?page.from=,subscribe,Map(Hyperbus-Message-Id -> List(100500), X-Forwarded-Host -> List(api.4gametest.com), Origin -> List(chrome-extension://hgmloofddffdnphfgcellkdfbfbjeloo), Remote-Ip-Port -> List(127.0.0.1:48198), Upgrade -> List(websocket), X-Forwarded-For -> List(10.33.54.188, 10.33.54.188), Connection -> List(upgrade), X-Scheme -> List(http), Cache-Control -> List(no-cache), Sec-WebSocket-Extensions -> List(permessage-deflate; client_max_window_bits), X-Forwarded-Proto -> List(https), Pragma -> List(no-cache), X-Real-IP -> List(10.33.54.188), Sec-WebSocket-Key -> List(Vz9UIv7GPf3y3cC1w3o7mg==), Accept-Language -> List(ru, en-US;q=0.8, en;q=0.6), Accept-Encoding -> List(gzip, deflate, sdch), User-Agent -> List(Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.86 Safari/537.36), Host -> List(api.4gametest.com), Sec-WebSocket-Version -> List(13), Remote-Address -> List(127.0.0.1)),Some(PreparedRequestContext(Uri(Specific(/app-statuses)),get,Map(messageId -> List(100500))))) with revision 46342
TRA 2016-04-26 02:04:03,639 rt.kafkatransport.TopicSubscription Consumer 4b08bfd8@cpb3-q.qa.inn.ru-10105 got message from kafka hyperbus2/43119: {"uri":{"pattern":"/revault/content/{path:*}","args":{"path":"services/status-monitor/app-statuses/9"}},"headers":{"messageId":["7iZCj--JQ8rgloK1si6TEKslN9w9uW"],"method":["feed:patch"],"contentType":["app-env-status"],"revision":["46342"]},"body":{"appId":"9","environments":{"live":{"overriddenStatus":null,"status":true,"servers":{"QA Gardarika":{"lastDetectedAt":1461625427826,"detectedStatus":true}}}},"_links":{}}}
TRA 2016-04-26 02:04:03,658 eu.inn.hyperbus.Hyperbus            hyperbus |> eu.inn.hyperbus.model.DynamicRequest[eu.inn.hyperbus.model.DynamicBodyContainer]:{"uri":{"pattern":"/revault/content/{path:*}","args":{"path":"services/status-monitor/app-statuses/9"}},"headers":{"messageId":["7iZCj--JQ8rgloK1si6TEKslN9w9uW"],"method":["feed:patch"],"contentType":["app-env-status"],"revision":["46342"]},"body":{"appId":"9","environments":{"live":{"overriddenStatus":null,"status":true,"servers":{"QA Gardarika":{"lastDetectedAt":1461625427826,"detectedStatus":true}}}},"_links":{}}}
DEB 2016-04-26 02:04:03,660 .facade.events.SubscriptionsManager Event received (Some(cpb3-q.qa.inn.ru-10105)): eu.inn.hyperbus.model.DynamicRequest[eu.inn.hyperbus.model.DynamicBodyContainer]:{"uri":{"pattern":"/revault/content/{path:*}","args":{"path":"services/status-monitor/app-statuses/9"}},"headers":{"messageId":["7iZCj--JQ8rgloK1si6TEKslN9w9uW"],"method":["feed:patch"],"contentType":["app-env-status"],"revision":["46342"]},"body":{"appId":"9","environments":{"live":{"overriddenStatus":null,"status":true,"servers":{"QA Gardarika":{"lastDetectedAt":1461625427826,"detectedStatus":true}}}},"_links":{}}}
DEB 2016-04-26 02:04:03,664 .facade.events.SubscriptionsManager Event #(7iZCj--JQ8rgloK1si6TEKslN9w9uW) forwarded to Actor[akka://facade/user/simple-service-actor/wrkr-2/Subscr-100500#-324045534]/100500
TRA 2016-04-26 02:04:03,665 facade.events.FeedSubscriptionActor Processing reliable event #46342 eu.inn.hyperbus.model.DynamicRequest[eu.inn.hyperbus.model.DynamicBodyContainer]:{"uri":{"pattern":"/revault/content/{path:*}","args":{"path":"services/status-monitor/app-statuses/9"}},"headers":{"method":["feed:patch"],"revision":["46342"],"contentType":["app-env-status"],"messageId":["7iZCj--JQ8rgloK1si6TEKslN9w9uW"],"correlationId":["100500"]},"body":{"appId":"9","environments":{"live":{"overriddenStatus":null,"status":true,"servers":{"QA Gardarika":{"lastDetectedAt":1461625427826,"detectedStatus":true}}}},"_links":{}}} for /v3/app-statuses?page.from=
TRA 2016-04-26 02:04:15,538 rt.kafkatransport.TopicSubscription Consumer 4b08bfd8@cpb3-q.qa.inn.ru-10105 got message from kafka hyperbus2/25119: {"uri":{"pattern":"/revault/content/{path:*}","args":{"path":"services/status-monitor/app-statuses/9"}},"headers":{"messageId":["7iZCm--R4GguA2yTmPqm2xcm5yqzAo"],"method":["feed:patch"],"contentType":["app-env-status"],"revision":["46343"]},"body":{"appId":"9","environments":{"live":{"overriddenStatus":null,"status":false,"servers":{"QA Gardarika":{"lastDetectedAt":1461625455435,"detectedStatus":false}}}},"_links":{}}}
TRA 2016-04-26 02:04:15,541 eu.inn.hyperbus.Hyperbus            hyperbus |> eu.inn.hyperbus.model.DynamicRequest[eu.inn.hyperbus.model.DynamicBodyContainer]:{"uri":{"pattern":"/revault/content/{path:*}","args":{"path":"services/status-monitor/app-statuses/9"}},"headers":{"messageId":["7iZCm--R4GguA2yTmPqm2xcm5yqzAo"],"method":["feed:patch"],"contentType":["app-env-status"],"revision":["46343"]},"body":{"appId":"9","environments":{"live":{"overriddenStatus":null,"status":false,"servers":{"QA Gardarika":{"lastDetectedAt":1461625455435,"detectedStatus":false}}}},"_links":{}}}
DEB 2016-04-26 02:04:15,542 .facade.events.SubscriptionsManager Event received (Some(cpb3-q.qa.inn.ru-10105)): eu.inn.hyperbus.model.DynamicRequest[eu.inn.hyperbus.model.DynamicBodyContainer]:{"uri":{"pattern":"/revault/content/{path:*}","args":{"path":"services/status-monitor/app-statuses/9"}},"headers":{"messageId":["7iZCm--R4GguA2yTmPqm2xcm5yqzAo"],"method":["feed:patch"],"contentType":["app-env-status"],"revision":["46343"]},"body":{"appId":"9","environments":{"live":{"overriddenStatus":null,"status":false,"servers":{"QA Gardarika":{"lastDetectedAt":1461625455435,"detectedStatus":false}}}},"_links":{}}}
DEB 2016-04-26 02:04:15,543 .facade.events.SubscriptionsManager Event #(7iZCm--R4GguA2yTmPqm2xcm5yqzAo) forwarded to Actor[akka://facade/user/simple-service-actor/wrkr-2/Subscr-100500#-324045534]/100500
TRA 2016-04-26 02:04:15,543 facade.events.FeedSubscriptionActor Processing reliable event #46343 eu.inn.hyperbus.model.DynamicRequest[eu.inn.hyperbus.model.DynamicBodyContainer]:{"uri":{"pattern":"/revault/content/{path:*}","args":{"path":"services/status-monitor/app-statuses/9"}},"headers":{"method":["feed:patch"],"revision":["46343"],"contentType":["app-env-status"],"messageId":["7iZCm--R4GguA2yTmPqm2xcm5yqzAo"],"correlationId":["100500"]},"body":{"appId":"9","environments":{"live":{"overriddenStatus":null,"status":false,"servers":{"QA Gardarika":{"lastDetectedAt":1461625455435,"detectedStatus":false}}}},"_links":{}}} for /v3/app-statuses?page.from=