blob: 96947ccfaed5c762a114bd27ba78b3cbfbc8b487 [file] [log] [blame]
%%------------------------------------------------------------------------------
%% Licensed to the Apache Software Foundation (ASF) under one or more
%% contributor license agreements. See the NOTICE file distributed with
%% this work for additional information regarding copyright ownership.
%% The ASF licenses this file to You under the Apache License, Version 2.0
%% (the "License"); you may not use this file except in compliance with
%% the License. You may obtain a copy of the License at
%%
%% http://www.apache.org/licenses/LICENSE-2.0
%%
%% Unless required by applicable law or agreed to in writing, software
%% distributed under the License is distributed on an "AS IS" BASIS,
%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
%% See the License for the specific language governing permissions and
%% limitations under the License.
%%------------------------------------------------------------------------------
-module(dubbo_protocol_dubbo).
-include("dubboerl.hrl").
-include("dubbo.hrl").
%% API
-export([refer/2]).
refer(Url, Acc) ->
{ok, UrlInfo} = dubbo_common_fun:parse_url(Url),
case UrlInfo#dubbo_url.scheme of
<<"dubbo">> ->
{ok,Invoker} = do_refer(UrlInfo),
{ok, Invoker};
_ ->
{skip, Acc}
end.
do_refer(UrlInfo) ->
case dubbo_node_config_util:parse_provider_info(UrlInfo) of
{ok, ProviderConfig} ->
%% OldHostList = dubbo_provider_consumer_reg_table:get_interface_provider_node(ProviderConfig#provider_config.interface),
case getClients(ProviderConfig) of
{ok, ConnectionInfoList} ->
dubbo_provider_consumer_reg_table:update_node_conections(ProviderConfig#provider_config.interface,ConnectionInfoList),
HostFlag = dubbo_provider_consumer_reg_table:get_host_flag(ProviderConfig),
{ok,#dubbo_invoker{host_flag = HostFlag,handle = ?MODULE}};
{error, Reason} ->
{error, Reason}
end;
{error, R1} ->
logger:error("parse provider info error reason ~p", [R1]),
{error, R1}
end.
getClients(ProviderConfig) ->
%% @todo if connections parameter > 1, need new spec transport
case new_transport(ProviderConfig) of
{ok, ConnectionInfoList} ->
%% ConnectionList = start_provider_process(HostFlag, 30, ProviderConfig),
{ok, ConnectionInfoList};
{error, Reason} ->
{error, Reason}
end.
%%ok = update_connection_info(ProviderConfig#provider_config.interface, HostFlag, ConnectionList, true),
new_transport(ProviderConfig) ->
HostFlag = get_host_flag(ProviderConfig),
case dubbo_provider_consumer_reg_table:get_host_connections(ProviderConfig#provider_config) of
[] ->
case dubbo_exchanger:connect(ProviderConfig, ?MODULE) of
{ok, ConnectionInfo} ->
{ok, [ConnectionInfo]};
{error, Reason} ->
logger:warning("start client fail ~p ~p", [Reason, HostFlag]),
{error, Reason}
end;
ConnectionInfoList ->
{ok, ConnectionInfoList}
end.