| 105 | } |
| 106 | |
| 107 | THandleRef NNeh::Request(const TMessage& msg, IOnRecv* fallback) { |
| 108 | TServiceStatRef ss; |
| 109 | |
| 110 | if (TServiceStat::Disabled()) { |
| 111 | return ProtocolForMessage(msg)->ScheduleRequest(msg, fallback, ss); |
| 112 | } |
| 113 | |
| 114 | ss = GetServiceStat(msg.Addr); |
| 115 | TServiceStat::EStatus es = ss->GetStatus(); |
| 116 | |
| 117 | if (es == TServiceStat::Ok) { |
| 118 | return ProtocolForMessage(msg)->ScheduleRequest(msg, fallback, ss); |
| 119 | } |
| 120 | |
| 121 | if (es == TServiceStat::ReTry) { |
| 122 | //send empty data request for validating service (update TServiceStat info) |
| 123 | TMessage validator; |
| 124 | |
| 125 | validator.Addr = msg.Addr; |
| 126 | |
| 127 | ProtocolForMessage(msg)->ScheduleRequest(validator, nullptr, ss); |
| 128 | } |
| 129 | |
| 130 | TNotifyHandleRef h(new TNotifyHandle(fallback, msg)); |
| 131 | h->NotifyError(new TError(svcFail)); |
| 132 | return h.Get(); |
| 133 | } |
| 134 | |
| 135 | THandleRef NNeh::Request(const TString& req, IOnRecv* fallback) { |
| 136 | return Request(TMessage::FromString(req), fallback); |
no test coverage detected