[ 
https://issues.apache.org/jira/browse/CASSANDRA-7299?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14039167#comment-14039167
 ] 

Robert Stupp commented on CASSANDRA-7299:
-----------------------------------------

[~alexander_radzin] You're posting in the wrong JIRA. What you describe belongs 
to the Java driver (client) and not Cassandra (server). The JIRA you're looking 
for is at https://datastax-oss.atlassian.net/browse/JAVA

> Cluster.Builder throws UnknownHostException when adding not existing host
> -------------------------------------------------------------------------
>
>                 Key: CASSANDRA-7299
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-7299
>             Project: Cassandra
>          Issue Type: Bug
>          Components: API
>            Reporter: Alexander Radzin
>            Priority: Trivial
>
> Connection to Cassandra cluster from client side is typically done using 
> {{Cluster.Builder}} class that allows to configure the connection and then 
> build cluster by invocation of method {{build()}}. Not all contact points 
> must be available at creation time. If some of them start after the 
> connection has been established they client continue its work using the newly 
> connected endpoints.
> However if specific hostname is not available at the moment when builder is 
> being created  {{UnknownHostException}} is thrown. 
> IMHO Typically applications tend to create builder on start-up when reading 
> configuration parameters and then connect to Cassandra. For example in Spring 
> based applications this happens during context creation.
> This issue prevents the application to start. 
> This does not happen when using IP address even if it is not available at the 
> moment. 
> The problem is that {{Builder.addContactPoint()}} invokes 
> {{InetAddress.getByName()}} when creating the builder. 
> {noformat}
>         public Builder addContactPoint(String address) {
>             try {
>                 this.addresses.add(InetAddress.getByName(address));
>                 return this;
>             } catch (UnknownHostException e) {
>                 throw new IllegalArgumentException(e.getMessage());
>             }
>         }
> {noformat}
> IMHO it should do this only when building the cluster.
> My current work around is to extend {{Cluster.Builder}} (fortunately it is 
> public and not final) and store addresses in their textual for transforming 
> the to instances of {{InetAddress}} only when {{build()}} is called. This is 
> however not full solution because the {{Cluster}} itself also requires list 
> of {{InetAddress}}.
> The point here is  that we can create builder and cluster with unavailable 
> contact points if string representation of IP address is supplied but cannot 
> use symbolic computer name. This is because {{InetAddress.getByName()}} 
> throws {{UnknownHostException}} only if host identified by name is not 
> available:
> {quote}
> If a literal IP address is supplied, only the validity of the address format 
> is checked.
> {quote}
> (from Javadoc of {{InetAddress.getByName()}}.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to