Robert May created IGNITE-14776:
-----------------------------------
Summary: ClientFailoverSocket sets logger to late, resulting in
null loggers downstream.
Key: IGNITE-14776
URL: https://issues.apache.org/jira/browse/IGNITE-14776
Project: Ignite
Issue Type: Bug
Components: clients, platforms
Affects Versions: 2.10
Reporter: Robert May
Because the logger is set last inside of the
{code:c#}ClientFailoverSocket{code} class, if there are issues with the
{code:c#}GetIpEndpoints{code} call, an argument exception can occur when a
debug message is logged inside of {code:c#}GetIps{code} when the ip address
can't be parsed. In my case, this occurred with a DNS failure.
Stack Trace:
{code:c#}
System.ArgumentNullException: Value cannot be null. (Parameter 'logger')
at Apache.Ignite.Core.Impl.Common.IgniteArgumentCheck.NotNull(Object arg,
String argName)
at Apache.Ignite.Core.Log.LoggerExtensions.Log(ILogger logger, LogLevel level,
Exception ex, String message)
at Apache.Ignite.Core.Log.LoggerExtensions.Debug(ILogger logger, Exception ex,
String message)
at Apache.Ignite.Core.Impl.Client.ClientFailoverSocket.GetIps(String host,
Boolean suppressExceptions)
at
Apache.Ignite.Core.Impl.Client.ClientFailoverSocket.<GetIpEndPoints>d__11.MoveNext()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at
Apache.Ignite.Core.Impl.Client.ClientFailoverSocket..ctor(IgniteClientConfiguration
config, Marshaller marsh, TransactionsClient transactions)
at Apache.Ignite.Core.Impl.Client.IgniteClient..ctor(IgniteClientConfiguration
clientConfiguration)
at Apache.Ignite.Core.Ignition.StartClient(IgniteClientConfiguration
clientConfiguration)
{code}
Here's the constructor code:
{code:c#}
Debug.Assert(config != null);
Debug.Assert(marsh != null);
Debug.Assert(transactions != null);
_config = config;
_marsh = marsh;
_transactions = transactions;
#pragma warning disable 618 // Type or member is obsolete
if (config.Host == null && (config.Endpoints == null ||
config.Endpoints.Count == 0))
{
throw new IgniteClientException("Invalid
IgniteClientConfiguration: Host is null, " +
"Endpoints is null or empty.
Nowhere to connect.");
}
#pragma warning restore 618
_endPoints = GetIpEndPoints(config).ToList();
if (_endPoints.Count == 0)
{
throw new IgniteClientException("Failed to resolve all
specified hosts.");
}
_logger = (_config.Logger ??
NoopLogger.Instance).GetLogger(GetType());
ConnectDefaultSocket();
OnFirstConnection();
{code}
Note how the _logger variable isn't set until the very end of the constructor.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)