blob: 7e84b98cb9fa9ad23a012e22e2e0298943edc049 [file] [log] [blame]
Craig Tilleraf691802015-06-23 14:57:07 -07001/*
2 *
Jan Tattermusch7897ae92017-06-07 22:57:36 +02003 * Copyright 2015 gRPC authors.
Craig Tilleraf691802015-06-23 14:57:07 -07004 *
Jan Tattermusch7897ae92017-06-07 22:57:36 +02005 * 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 Tilleraf691802015-06-23 14:57:07 -07008 *
Jan Tattermusch7897ae92017-06-07 22:57:36 +02009 * http://www.apache.org/licenses/LICENSE-2.0
Craig Tilleraf691802015-06-23 14:57:07 -070010 *
Jan Tattermusch7897ae92017-06-07 22:57:36 +020011 * 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 Tilleraf691802015-06-23 14:57:07 -070016 *
17 */
18
Craig Tiller9eb0fde2017-03-31 16:59:30 -070019#include "src/core/ext/filters/client_channel/resolver.h"
Craig Tiller0bfad142017-02-17 16:01:08 -080020#include "src/core/lib/iomgr/combiner.h"
Craig Tiller7c0b4d72015-06-25 14:44:44 -070021
ncteisena1354852017-06-08 16:25:53 -070022#ifndef NDEBUG
ncteisen7712c7c2017-07-12 23:11:27 -070023grpc_tracer_flag grpc_trace_resolver_refcount =
24 GRPC_TRACER_INITIALIZER(false, "resolver_refcount");
ncteisena1354852017-06-08 16:25:53 -070025#endif
ncteisen9c43fc02017-06-08 16:06:23 -070026
Craig Tillerbaa14a92017-11-03 09:09:36 -070027void grpc_resolver_init(grpc_resolver* resolver,
28 const grpc_resolver_vtable* vtable,
29 grpc_combiner* combiner) {
Craig Tiller98465032015-06-29 14:36:42 -070030 resolver->vtable = vtable;
Craig Tiller0bfad142017-02-17 16:01:08 -080031 resolver->combiner = GRPC_COMBINER_REF(combiner, "resolver");
Craig Tillera82950e2015-09-22 12:33:20 -070032 gpr_ref_init(&resolver->refs, 1);
Craig Tiller7c0b4d72015-06-25 14:44:44 -070033}
34
ncteisen9c43fc02017-06-08 16:06:23 -070035#ifndef NDEBUG
Craig Tillerbaa14a92017-11-03 09:09:36 -070036void grpc_resolver_ref(grpc_resolver* resolver, const char* file, int line,
37 const char* reason) {
ncteisen9c43fc02017-06-08 16:06:23 -070038 if (GRPC_TRACER_ON(grpc_trace_resolver_refcount)) {
ncteisen973863d2017-06-12 10:28:50 -070039 gpr_atm old_refs = gpr_atm_no_barrier_load(&resolver->refs.count);
ncteisen3bc25582017-06-09 10:35:35 -070040 gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG,
41 "RESOLVER:%p ref %" PRIdPTR " -> %" PRIdPTR " %s", resolver,
42 old_refs, old_refs + 1, reason);
ncteisen9c43fc02017-06-08 16:06:23 -070043 }
Craig Tiller98465032015-06-29 14:36:42 -070044#else
Craig Tillerbaa14a92017-11-03 09:09:36 -070045void grpc_resolver_ref(grpc_resolver* resolver) {
Craig Tiller98465032015-06-29 14:36:42 -070046#endif
Craig Tillera82950e2015-09-22 12:33:20 -070047 gpr_ref(&resolver->refs);
Craig Tiller98465032015-06-29 14:36:42 -070048}
49
ncteisen9c43fc02017-06-08 16:06:23 -070050#ifndef NDEBUG
Craig Tillerbaa14a92017-11-03 09:09:36 -070051void grpc_resolver_unref(grpc_exec_ctx* exec_ctx, grpc_resolver* resolver,
52 const char* file, int line, const char* reason) {
ncteisen9c43fc02017-06-08 16:06:23 -070053 if (GRPC_TRACER_ON(grpc_trace_resolver_refcount)) {
ncteisen973863d2017-06-12 10:28:50 -070054 gpr_atm old_refs = gpr_atm_no_barrier_load(&resolver->refs.count);
ncteisen3bc25582017-06-09 10:35:35 -070055 gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG,
56 "RESOLVER:%p unref %" PRIdPTR " -> %" PRIdPTR " %s", resolver,
57 old_refs, old_refs - 1, reason);
ncteisen9c43fc02017-06-08 16:06:23 -070058 }
Craig Tiller98465032015-06-29 14:36:42 -070059#else
Craig Tillerbaa14a92017-11-03 09:09:36 -070060void grpc_resolver_unref(grpc_exec_ctx* exec_ctx, grpc_resolver* resolver) {
Craig Tiller98465032015-06-29 14:36:42 -070061#endif
Craig Tillera82950e2015-09-22 12:33:20 -070062 if (gpr_unref(&resolver->refs)) {
Craig Tillerbaa14a92017-11-03 09:09:36 -070063 grpc_combiner* combiner = resolver->combiner;
Craig Tillera82950e2015-09-22 12:33:20 -070064 resolver->vtable->destroy(exec_ctx, resolver);
Craig Tiller0bfad142017-02-17 16:01:08 -080065 GRPC_COMBINER_UNREF(exec_ctx, combiner, "resolver");
Craig Tillera82950e2015-09-22 12:33:20 -070066 }
Craig Tiller7c0b4d72015-06-25 14:44:44 -070067}
68
Craig Tillerbaa14a92017-11-03 09:09:36 -070069void grpc_resolver_shutdown_locked(grpc_exec_ctx* exec_ctx,
70 grpc_resolver* resolver) {
Craig Tiller972470b2017-02-09 15:05:36 -080071 resolver->vtable->shutdown_locked(exec_ctx, resolver);
Craig Tiller7c0b4d72015-06-25 14:44:44 -070072}
73
Craig Tillerbaa14a92017-11-03 09:09:36 -070074void grpc_resolver_channel_saw_error_locked(grpc_exec_ctx* exec_ctx,
75 grpc_resolver* resolver) {
Craig Tiller972470b2017-02-09 15:05:36 -080076 resolver->vtable->channel_saw_error_locked(exec_ctx, resolver);
Craig Tiller7c0b4d72015-06-25 14:44:44 -070077}
78
Craig Tillerbaa14a92017-11-03 09:09:36 -070079void grpc_resolver_next_locked(grpc_exec_ctx* exec_ctx, grpc_resolver* resolver,
80 grpc_channel_args** result,
81 grpc_closure* on_complete) {
Craig Tiller972470b2017-02-09 15:05:36 -080082 resolver->vtable->next_locked(exec_ctx, resolver, result, on_complete);
Craig Tiller7c0b4d72015-06-25 14:44:44 -070083}