You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Benjamin Lerer (Jira)" <ji...@apache.org> on 2022/01/18 09:13:00 UTC
[jira] [Commented] (CASSANDRA-17263) sstableloader ignores the storage port option
[ https://issues.apache.org/jira/browse/CASSANDRA-17263?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17477690#comment-17477690 ]
Benjamin Lerer commented on CASSANDRA-17263:
--------------------------------------------
[~taiga-elephant] Would you be interested in providing a patch ?
> sstableloader ignores the storage port option
> ---------------------------------------------
>
> Key: CASSANDRA-17263
> URL: https://issues.apache.org/jira/browse/CASSANDRA-17263
> Project: Cassandra
> Issue Type: Bug
> Components: Legacy/Tools
> Reporter: Oleg Zhovtanyuk
> Priority: Normal
>
> sstableloader silently ignores the storage port option and connects to the storage port of the server.
> E.g.
> {code:java}
> sstableloader -v -d 192.168.1.24 -p 32181 -sp 32182 -u USER -pw PASSWORD backups/test-workspace/test-table-9150b730742911ec9d011fb0ef4f5206 {code}
> Here sstableloader will ignore the storage port 32182 and try to connect to port 7000, if the server reports itself listening on port 7000.
>
> This seems natural (server listens on port 7000 so just use it), but it does not work, when Cassandra runs in a Docker container with ports mapped - a normal cases for orchestrators (Kubernetes, Mesos).
> E.g.
> {code:java}
> docker run -it \
> -p 32181:9042 \
> -p 32182:7000 \
> cassandra:4.0.1{code}
> Here the storage port will be 7000 _inside_ the container (and Cassandra server exposes it), but _outside_ the container the port is 32182.
>
> The code ({*}NativeSSTableLoaderClient{*} - [link|https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/utils/NativeSSTableLoaderClient.java#L83]):
> {code:java}
> Set<Host> endpoints = metadata.getReplicas(Metadata.quote(keyspace), tokenRange);
> ...
> for (Host endpoint : endpoints)
> {
> int broadcastPort = endpoint.getBroadcastSocketAddress().getPort();
> // use port from broadcast address if set.
> int portToUse = broadcastPort != 0 ? broadcastPort : storagePort;
> ... {code}
> It effectively ignores the {*}storagePort{*}, taken from CLI option. I believe, CLI option should have a priority here - let the user to decide what he wants.
--
This message was sent by Atlassian Jira
(v8.20.1#820001)
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org