com.linecorp.armeria.xds.ClusterRoot Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of armeria-xds Show documentation
Show all versions of armeria-xds Show documentation
Asynchronous HTTP/2 RPC/REST client/server library built on top of Java 8, Netty, Thrift and gRPC (armeria-xds)
The newest version!
/*
* Copyright 2023 LINE Corporation
*
* LINE Corporation licenses this file to you under the Apache License,
* version 2.0 (the "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at:
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
package com.linecorp.armeria.xds;
import static com.linecorp.armeria.xds.StaticResourceUtils.staticCluster;
import com.linecorp.armeria.common.annotation.UnstableApi;
import io.envoyproxy.envoy.config.cluster.v3.Cluster;
import io.envoyproxy.envoy.config.core.v3.ConfigSource;
/**
* A root node representing a {@link Cluster}.
* Users may query the latest value of this resource or add a watcher to be notified of changes.
* Note that it is important to close this resource to avoid leaking connections to the control plane server.
*/
@UnstableApi
public final class ClusterRoot extends AbstractRoot {
private final ClusterResourceNode node;
ClusterRoot(XdsBootstrapImpl xdsBootstrap, ConfigSourceMapper configSourceMapper, String resourceName) {
super(xdsBootstrap.eventLoop());
final Cluster cluster = xdsBootstrap.bootstrapClusters().cluster(resourceName);
if (cluster != null) {
node = staticCluster(xdsBootstrap, resourceName, this, cluster);
} else {
final ConfigSource configSource = configSourceMapper.cdsConfigSource(null, resourceName);
node = new ClusterResourceNode(configSource, resourceName, xdsBootstrap,
null, this, ResourceNodeType.DYNAMIC);
xdsBootstrap.subscribe(node);
}
}
@Override
public void close() {
if (!eventLoop().inEventLoop()) {
eventLoop().execute(this::close);
return;
}
node.close();
super.close();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy