Reported by Felipe Cardeneti: - Create a 2-node Scylla cluster w/ Ec2MultiRegionSnitch - Check system.peers table Scylla (uses public address) ``` cqlsh> select peer,data_center,host_id,preferred_ip,rack,rpc_address,schema_version from system.peers; peer | data_center | host_id | preferred_ip | rack | rpc_address | schema_version ---------------+-------------+--------------------------------------+---------------+------+---------------+-------------------------------------- 18.216.98.219 | us-east-2 | d9443741-a12e-4bbb-91ce-9931cece589c | 172.31.43.122 | 2c | 18.216.98.219 | 95c3fca5-c463-3aba-98c6-1c0b3fac5b58 (1 rows) ``` Cassandra (uses local address): ``` cqlsh> SELECT peer,data_center,host_id,preferred_ip,rack,rpc_address,schema_version from system.peers; peer | data_center | host_id | preferred_ip | rack | rpc_address | schema_version ---------------+-------------+--------------------------------------+---------------+------------+---------------+-------------------------------------- 52.15.104.255 | us-east-2 | 42c0b717-775f-4998-a420-0388fe8b4e70 | 172.31.42.126 | us-east-2c | 172.31.42.126 | 2207c2a9-f598-3971-986b-2926e09e239d (1 rows) ``` Config diff: ``` cassandra.yaml:rpc_address: 0.0.0.0 cassandra.yaml:broadcast_rpc_address: 172.31.42.126 /etc/scylla/scylla.yaml:broadcast_rpc_address: 172.31.42.126 /etc/scylla/scylla.yaml:rpc_address: 0.0.0.0 ``` After this patch, if broadcast_rpc_address is unset, Ec2MultiRegionSnitch will use the public ip address to set broadcast_rpc_address. If broadcast_rpc_address is set, Ec2MultiRegionSnitch will not modify it. Fixes #10236 Closes #10519
30 lines
794 B
C++
30 lines
794 B
C++
/*
|
|
*
|
|
* Modified by ScyllaDB
|
|
* Copyright (C) 2015-present ScyllaDB
|
|
*/
|
|
|
|
/*
|
|
* SPDX-License-Identifier: (AGPL-3.0-or-later and Apache-2.0)
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "locator/ec2_snitch.hh"
|
|
|
|
namespace locator {
|
|
class ec2_multi_region_snitch : public ec2_snitch {
|
|
public:
|
|
ec2_multi_region_snitch(const snitch_config&);
|
|
virtual std::list<std::pair<gms::application_state, gms::versioned_value>> get_app_states() const override;
|
|
virtual future<> start() override;
|
|
virtual void set_local_private_addr(const sstring& addr_str) override;
|
|
virtual sstring get_name() const override {
|
|
return "org.apache.cassandra.locator.Ec2MultiRegionSnitch";
|
|
}
|
|
private:
|
|
sstring _local_private_address;
|
|
bool _broadcast_rpc_address_specified_by_user;
|
|
};
|
|
} // namespace locator
|