| 130 | } |
| 131 | |
| 132 | tensorflow::Status CreateRemoteContexts( |
| 133 | const std::vector<string>& remote_workers, tensorflow::uint64 context_id, |
| 134 | int keep_alive_secs, const tensorflow::ServerDef& server_def, |
| 135 | tensorflow::eager::EagerClientCache* remote_eager_workers, bool async, |
| 136 | const tensorflow::eager::CreateContextRequest& base_request) { |
| 137 | for (int i = 0; i < remote_workers.size(); i++) { |
| 138 | const string& remote_worker = remote_workers[i]; |
| 139 | |
| 140 | tensorflow::eager::CreateContextRequest request(base_request); |
| 141 | tensorflow::eager::CreateContextResponse response; |
| 142 | request.set_context_id(context_id); |
| 143 | tensorflow::DeviceNameUtils::ParsedName parsed_name; |
| 144 | if (!tensorflow::DeviceNameUtils::ParseFullName(remote_worker, |
| 145 | &parsed_name)) { |
| 146 | return tensorflow::errors::InvalidArgument( |
| 147 | "Unable to parse ", remote_worker, " as a device name"); |
| 148 | } |
| 149 | *request.mutable_server_def() = server_def; |
| 150 | request.mutable_server_def()->set_job_name(parsed_name.job); |
| 151 | request.mutable_server_def()->set_task_index(parsed_name.task); |
| 152 | request.set_async(async); |
| 153 | request.set_keep_alive_secs(keep_alive_secs); |
| 154 | tensorflow::eager::EagerClient* eager_client; |
| 155 | TF_RETURN_IF_ERROR( |
| 156 | remote_eager_workers->GetClient(remote_worker, &eager_client)); |
| 157 | if (eager_client == nullptr) { |
| 158 | return tensorflow::errors::Internal( |
| 159 | "Cannot find a client for the given target:", remote_worker); |
| 160 | } |
| 161 | tensorflow::Notification n; |
| 162 | tensorflow::Status status; |
| 163 | // TODO(nareshmodi) do this in parallel instead of serially. |
| 164 | eager_client->CreateContextAsync( |
| 165 | &request, &response, [&status, &n](const tensorflow::Status& s) { |
| 166 | status = s; |
| 167 | n.Notify(); |
| 168 | }); |
| 169 | n.WaitForNotification(); |
| 170 | TF_RETURN_IF_ERROR(status); |
| 171 | } |
| 172 | return tensorflow::Status::OK(); |
| 173 | } |
| 174 | |
| 175 | tensorflow::Status UpdateTFE_ContextWithServerDef( |
| 176 | int keep_alive_secs, const tensorflow::ServerDef& server_def, |
no test coverage detected