Craig Tiller | af69180 | 2015-06-23 14:57:07 -0700 | [diff] [blame] | 1 | /* |
| 2 | * |
Jan Tattermusch | 7897ae9 | 2017-06-07 22:57:36 +0200 | [diff] [blame] | 3 | * Copyright 2015 gRPC authors. |
Craig Tiller | af69180 | 2015-06-23 14:57:07 -0700 | [diff] [blame] | 4 | * |
Jan Tattermusch | 7897ae9 | 2017-06-07 22:57:36 +0200 | [diff] [blame] | 5 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 6 | * you may not use this file except in compliance with the License. |
| 7 | * You may obtain a copy of the License at |
Craig Tiller | af69180 | 2015-06-23 14:57:07 -0700 | [diff] [blame] | 8 | * |
Jan Tattermusch | 7897ae9 | 2017-06-07 22:57:36 +0200 | [diff] [blame] | 9 | * http://www.apache.org/licenses/LICENSE-2.0 |
Craig Tiller | af69180 | 2015-06-23 14:57:07 -0700 | [diff] [blame] | 10 | * |
Jan Tattermusch | 7897ae9 | 2017-06-07 22:57:36 +0200 | [diff] [blame] | 11 | * Unless required by applicable law or agreed to in writing, software |
| 12 | * distributed under the License is distributed on an "AS IS" BASIS, |
| 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 14 | * See the License for the specific language governing permissions and |
| 15 | * limitations under the License. |
Craig Tiller | af69180 | 2015-06-23 14:57:07 -0700 | [diff] [blame] | 16 | * |
| 17 | */ |
| 18 | |
Craig Tiller | 9eb0fde | 2017-03-31 16:59:30 -0700 | [diff] [blame] | 19 | #include "src/core/ext/filters/client_channel/resolver.h" |
Craig Tiller | 0bfad14 | 2017-02-17 16:01:08 -0800 | [diff] [blame] | 20 | #include "src/core/lib/iomgr/combiner.h" |
Craig Tiller | 7c0b4d7 | 2015-06-25 14:44:44 -0700 | [diff] [blame] | 21 | |
ncteisen | a135485 | 2017-06-08 16:25:53 -0700 | [diff] [blame] | 22 | #ifndef NDEBUG |
ncteisen | 7712c7c | 2017-07-12 23:11:27 -0700 | [diff] [blame] | 23 | grpc_tracer_flag grpc_trace_resolver_refcount = |
| 24 | GRPC_TRACER_INITIALIZER(false, "resolver_refcount"); |
ncteisen | a135485 | 2017-06-08 16:25:53 -0700 | [diff] [blame] | 25 | #endif |
ncteisen | 9c43fc0 | 2017-06-08 16:06:23 -0700 | [diff] [blame] | 26 | |
Craig Tiller | baa14a9 | 2017-11-03 09:09:36 -0700 | [diff] [blame] | 27 | void grpc_resolver_init(grpc_resolver* resolver, |
| 28 | const grpc_resolver_vtable* vtable, |
| 29 | grpc_combiner* combiner) { |
Craig Tiller | 9846503 | 2015-06-29 14:36:42 -0700 | [diff] [blame] | 30 | resolver->vtable = vtable; |
Craig Tiller | 0bfad14 | 2017-02-17 16:01:08 -0800 | [diff] [blame] | 31 | resolver->combiner = GRPC_COMBINER_REF(combiner, "resolver"); |
Craig Tiller | a82950e | 2015-09-22 12:33:20 -0700 | [diff] [blame] | 32 | gpr_ref_init(&resolver->refs, 1); |
Craig Tiller | 7c0b4d7 | 2015-06-25 14:44:44 -0700 | [diff] [blame] | 33 | } |
| 34 | |
ncteisen | 9c43fc0 | 2017-06-08 16:06:23 -0700 | [diff] [blame] | 35 | #ifndef NDEBUG |
Craig Tiller | baa14a9 | 2017-11-03 09:09:36 -0700 | [diff] [blame] | 36 | void grpc_resolver_ref(grpc_resolver* resolver, const char* file, int line, |
| 37 | const char* reason) { |
ncteisen | 9c43fc0 | 2017-06-08 16:06:23 -0700 | [diff] [blame] | 38 | if (GRPC_TRACER_ON(grpc_trace_resolver_refcount)) { |
ncteisen | 973863d | 2017-06-12 10:28:50 -0700 | [diff] [blame] | 39 | gpr_atm old_refs = gpr_atm_no_barrier_load(&resolver->refs.count); |
ncteisen | 3bc2558 | 2017-06-09 10:35:35 -0700 | [diff] [blame] | 40 | gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG, |
| 41 | "RESOLVER:%p ref %" PRIdPTR " -> %" PRIdPTR " %s", resolver, |
| 42 | old_refs, old_refs + 1, reason); |
ncteisen | 9c43fc0 | 2017-06-08 16:06:23 -0700 | [diff] [blame] | 43 | } |
Craig Tiller | 9846503 | 2015-06-29 14:36:42 -0700 | [diff] [blame] | 44 | #else |
Craig Tiller | baa14a9 | 2017-11-03 09:09:36 -0700 | [diff] [blame] | 45 | void grpc_resolver_ref(grpc_resolver* resolver) { |
Craig Tiller | 9846503 | 2015-06-29 14:36:42 -0700 | [diff] [blame] | 46 | #endif |
Craig Tiller | a82950e | 2015-09-22 12:33:20 -0700 | [diff] [blame] | 47 | gpr_ref(&resolver->refs); |
Craig Tiller | 9846503 | 2015-06-29 14:36:42 -0700 | [diff] [blame] | 48 | } |
| 49 | |
ncteisen | 9c43fc0 | 2017-06-08 16:06:23 -0700 | [diff] [blame] | 50 | #ifndef NDEBUG |
Craig Tiller | baa14a9 | 2017-11-03 09:09:36 -0700 | [diff] [blame] | 51 | void grpc_resolver_unref(grpc_exec_ctx* exec_ctx, grpc_resolver* resolver, |
| 52 | const char* file, int line, const char* reason) { |
ncteisen | 9c43fc0 | 2017-06-08 16:06:23 -0700 | [diff] [blame] | 53 | if (GRPC_TRACER_ON(grpc_trace_resolver_refcount)) { |
ncteisen | 973863d | 2017-06-12 10:28:50 -0700 | [diff] [blame] | 54 | gpr_atm old_refs = gpr_atm_no_barrier_load(&resolver->refs.count); |
ncteisen | 3bc2558 | 2017-06-09 10:35:35 -0700 | [diff] [blame] | 55 | gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG, |
| 56 | "RESOLVER:%p unref %" PRIdPTR " -> %" PRIdPTR " %s", resolver, |
| 57 | old_refs, old_refs - 1, reason); |
ncteisen | 9c43fc0 | 2017-06-08 16:06:23 -0700 | [diff] [blame] | 58 | } |
Craig Tiller | 9846503 | 2015-06-29 14:36:42 -0700 | [diff] [blame] | 59 | #else |
Craig Tiller | baa14a9 | 2017-11-03 09:09:36 -0700 | [diff] [blame] | 60 | void grpc_resolver_unref(grpc_exec_ctx* exec_ctx, grpc_resolver* resolver) { |
Craig Tiller | 9846503 | 2015-06-29 14:36:42 -0700 | [diff] [blame] | 61 | #endif |
Craig Tiller | a82950e | 2015-09-22 12:33:20 -0700 | [diff] [blame] | 62 | if (gpr_unref(&resolver->refs)) { |
Craig Tiller | baa14a9 | 2017-11-03 09:09:36 -0700 | [diff] [blame] | 63 | grpc_combiner* combiner = resolver->combiner; |
Craig Tiller | a82950e | 2015-09-22 12:33:20 -0700 | [diff] [blame] | 64 | resolver->vtable->destroy(exec_ctx, resolver); |
Craig Tiller | 0bfad14 | 2017-02-17 16:01:08 -0800 | [diff] [blame] | 65 | GRPC_COMBINER_UNREF(exec_ctx, combiner, "resolver"); |
Craig Tiller | a82950e | 2015-09-22 12:33:20 -0700 | [diff] [blame] | 66 | } |
Craig Tiller | 7c0b4d7 | 2015-06-25 14:44:44 -0700 | [diff] [blame] | 67 | } |
| 68 | |
Craig Tiller | baa14a9 | 2017-11-03 09:09:36 -0700 | [diff] [blame] | 69 | void grpc_resolver_shutdown_locked(grpc_exec_ctx* exec_ctx, |
| 70 | grpc_resolver* resolver) { |
Craig Tiller | 972470b | 2017-02-09 15:05:36 -0800 | [diff] [blame] | 71 | resolver->vtable->shutdown_locked(exec_ctx, resolver); |
Craig Tiller | 7c0b4d7 | 2015-06-25 14:44:44 -0700 | [diff] [blame] | 72 | } |
| 73 | |
Craig Tiller | baa14a9 | 2017-11-03 09:09:36 -0700 | [diff] [blame] | 74 | void grpc_resolver_channel_saw_error_locked(grpc_exec_ctx* exec_ctx, |
| 75 | grpc_resolver* resolver) { |
Craig Tiller | 972470b | 2017-02-09 15:05:36 -0800 | [diff] [blame] | 76 | resolver->vtable->channel_saw_error_locked(exec_ctx, resolver); |
Craig Tiller | 7c0b4d7 | 2015-06-25 14:44:44 -0700 | [diff] [blame] | 77 | } |
| 78 | |
Craig Tiller | baa14a9 | 2017-11-03 09:09:36 -0700 | [diff] [blame] | 79 | void grpc_resolver_next_locked(grpc_exec_ctx* exec_ctx, grpc_resolver* resolver, |
| 80 | grpc_channel_args** result, |
| 81 | grpc_closure* on_complete) { |
Craig Tiller | 972470b | 2017-02-09 15:05:36 -0800 | [diff] [blame] | 82 | resolver->vtable->next_locked(exec_ctx, resolver, result, on_complete); |
Craig Tiller | 7c0b4d7 | 2015-06-25 14:44:44 -0700 | [diff] [blame] | 83 | } |