Skip to content

Commit 25338e4

Browse files
committed
Move server D2 announcement from router to server
The router was announcing the server's D2 URI on behalf of the server, which is architecturally wrong. Each component should announce itself. - Add D2 self-announcement to VeniceServer.run() gated by server.d2.announce.enabled - Remove server D2 announcement hack from RouterServer.main() - Move server D2 config from router.properties to server.properties - Add cluster.to.server.d2 to controller.properties for discovery response
1 parent 1a1bf32 commit 25338e4

File tree

5 files changed

+26
-23
lines changed

5 files changed

+26
-23
lines changed

docker/venice-controller/single-dc-configs/controller.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ ssl.to.kakfa=false
1010
controller.parent.mode=false
1111
controller.system.schema.cluster.name=venice-cluster0
1212
cluster.to.d2=venice-cluster0:venice-discovery
13+
cluster.to.server.d2=venice-cluster0:venice-server-d2
1314
delay.to.rebalance.ms=0
1415
offline.job.start.timeout.ms=60000
1516
topic.cleanup.sleep.interval.between.topic.list.fetch.ms=30000

docker/venice-router/single-dc-configs/router.properties

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@ router.max.outgoing.connection.per.route=2
1515
router.http.client.pool.size=2
1616
cluster.to.d2=venice-cluster0:venice-discovery
1717
cluster.to.server.d2=venice-cluster0:venice-server-d2
18-
server.d2.announce.host=venice-server
19-
server.d2.announce.port=54093
2018
kafka.bootstrap.servers=kafka:9092
2119
router.storage.node.client.type=APACHE_HTTP_ASYNC_CLIENT
2220
router.io.worker.count=4

docker/venice-server/single-dc-configs/server.properties

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ kafka.read.cycle.delay.ms=50
1414
disk.full.threshold=0.99
1515
server.partition.graceful.drop.time.in.seconds=0
1616
system.schema.cluster.name=venice-cluster0
17+
server.d2.announce.enabled=true
18+
server.d2.announce.host=venice-server
19+
server.d2.service.name=venice-server-d2
1720
data.base.path=/opt/venice/rocksdb
1821
server.ingestion.isolation.application.port=54094
1922
persistence.type=ROCKS_DB

services/venice-router/src/main/java/com/linkedin/venice/router/RouterServer.java

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -274,25 +274,6 @@ public static void run(String routerConfigFilePath, boolean runForever) throws E
274274
d2Servers.addAll(D2ConfigUtils.getD2Servers(zkAddress, discoveryClusterName, localUri));
275275
}
276276

277-
Map<String, String> clusterToServerD2 = props.getMap(ConfigKeys.CLUSTER_TO_SERVER_D2, Collections.emptyMap());
278-
String serverAnnounceHost = props.getString("server.d2.announce.host", "");
279-
int serverAnnouncePort = props.getInt("server.d2.announce.port", 0);
280-
for (Map.Entry<String, String> entry: clusterToServerD2.entrySet()) {
281-
String d2ServiceName = entry.getValue();
282-
String d2ClusterName = d2ServiceName + "_d2_cluster";
283-
D2ConfigUtils.setupD2Config(zkAddress, false, d2ClusterName, d2ServiceName);
284-
if (!serverAnnounceHost.isEmpty() && serverAnnouncePort > 0) {
285-
String serverUri = "http://" + serverAnnounceHost + ":" + serverAnnouncePort;
286-
d2Servers.addAll(D2ConfigUtils.getD2Servers(zkAddress, d2ClusterName, serverUri));
287-
LOGGER.info("Server D2 announcement for service {} at URI: {}", d2ServiceName, serverUri);
288-
} else {
289-
LOGGER.warn(
290-
"server.d2.announce.host/port not set; skipping D2 URI announcement for server service {}. "
291-
+ "D2 config will be written to ZK but no URI will be announced from the router.",
292-
d2ServiceName);
293-
}
294-
}
295-
296277
LOGGER.info("D2 announcement enabled with {} announcers for router URI: {}", d2Servers.size(), localUri);
297278
}
298279

services/venice-server/src/main/java/com/linkedin/venice/server/VeniceServer.java

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import com.linkedin.davinci.storage.StorageEngineRepository;
3131
import com.linkedin.davinci.storage.StorageMetadataService;
3232
import com.linkedin.davinci.storage.StorageService;
33+
import com.linkedin.venice.ConfigKeys;
3334
import com.linkedin.venice.acl.DynamicAccessController;
3435
import com.linkedin.venice.acl.StaticAccessController;
3536
import com.linkedin.venice.cleaner.BackupVersionOptimizationService;
@@ -38,6 +39,7 @@
3839
import com.linkedin.venice.client.store.ClientConfig;
3940
import com.linkedin.venice.client.store.ClientFactory;
4041
import com.linkedin.venice.common.VeniceSystemStoreUtils;
42+
import com.linkedin.venice.d2.D2ConfigUtils;
4143
import com.linkedin.venice.exceptions.VeniceException;
4244
import com.linkedin.venice.helix.AllowlistAccessor;
4345
import com.linkedin.venice.helix.HelixCustomizedViewOfflinePushRepository;
@@ -71,6 +73,7 @@
7173
import com.linkedin.venice.system.store.ControllerClientBackedSystemSchemaInitializer;
7274
import com.linkedin.venice.utils.CollectionUtils;
7375
import com.linkedin.venice.utils.Utils;
76+
import com.linkedin.venice.utils.VeniceProperties;
7477
import com.linkedin.venice.utils.lazy.Lazy;
7578
import io.tehuti.metrics.MetricsRepository;
7679
import java.util.ArrayList;
@@ -854,8 +857,25 @@ public static void run(String configDirectory, boolean joinThread) throws Except
854857
}
855858

856859
public static void run(VeniceConfigLoader veniceConfigService, boolean joinThread) throws Exception {
857-
VeniceServerContext serverContext =
858-
new VeniceServerContext.Builder().setVeniceConfigLoader(veniceConfigService).build();
860+
List<ServiceDiscoveryAnnouncer> d2Servers = new ArrayList<>();
861+
VeniceProperties props = veniceConfigService.getCombinedProperties();
862+
863+
if (props.getBoolean("server.d2.announce.enabled", false)) {
864+
String zkAddress = props.getString(ConfigKeys.ZOOKEEPER_ADDRESS);
865+
int port = props.getInt(ConfigKeys.LISTENER_PORT);
866+
String announceHost = props.getString("server.d2.announce.host", "localhost");
867+
String localUri = "http://" + announceHost + ":" + port;
868+
869+
String d2ServiceName = props.getString("server.d2.service.name", "venice-server-d2");
870+
String d2ClusterName = d2ServiceName + "_d2_cluster";
871+
D2ConfigUtils.setupD2Config(zkAddress, false, d2ClusterName, d2ServiceName);
872+
d2Servers.addAll(D2ConfigUtils.getD2Servers(zkAddress, d2ClusterName, localUri));
873+
LOGGER.info("Server D2 announcement enabled for service {} at URI: {}", d2ServiceName, localUri);
874+
}
875+
876+
VeniceServerContext serverContext = new VeniceServerContext.Builder().setVeniceConfigLoader(veniceConfigService)
877+
.setServiceDiscoveryAnnouncers(d2Servers)
878+
.build();
859879
final VeniceServer server = new VeniceServer(serverContext);
860880
if (!server.isStarted()) {
861881
server.start();

0 commit comments

Comments
 (0)