Skip to content

Commit 2448999

Browse files
committed
Add tags support to gateway backends
1 parent 322a16b commit 2448999

18 files changed

Lines changed: 1480 additions & 860 deletions

gateway-ha/src/main/java/io/trino/gateway/ha/config/ProxyBackendConfiguration.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,17 @@
1616
import com.fasterxml.jackson.annotation.JsonProperty;
1717
import com.fasterxml.jackson.annotation.JsonSetter;
1818

19+
import java.util.Collections;
20+
import java.util.List;
21+
1922
public class ProxyBackendConfiguration
2023
{
2124
private boolean active = true;
2225
private String routingGroup = "adhoc";
2326
private String externalUrl;
2427
private String name;
2528
private String proxyTo;
29+
private List<String> tags = Collections.emptyList();
2630

2731
@JsonProperty
2832
public String getName()
@@ -86,4 +90,16 @@ public void setRoutingGroup(String routingGroup)
8690
{
8791
this.routingGroup = routingGroup;
8892
}
93+
94+
@JsonProperty
95+
public List<String> getTags()
96+
{
97+
return this.tags;
98+
}
99+
100+
@JsonSetter
101+
public void setTags(List<String> tags)
102+
{
103+
this.tags = tags != null ? tags : Collections.emptyList();
104+
}
89105
}

gateway-ha/src/main/java/io/trino/gateway/ha/persistence/dao/GatewayBackend.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
*/
1414
package io.trino.gateway.ha.persistence.dao;
1515

16+
import jakarta.annotation.Nullable;
1617
import org.jdbi.v3.core.mapper.reflect.ColumnName;
1718

1819
import static java.util.Objects.requireNonNull;
@@ -22,7 +23,8 @@ public record GatewayBackend(
2223
@ColumnName("routing_group") String routingGroup,
2324
@ColumnName("backend_url") String backendUrl,
2425
@ColumnName("external_url") String externalUrl,
25-
@ColumnName("active") boolean active)
26+
@ColumnName("active") boolean active,
27+
@ColumnName("tags") @Nullable String tags)
2628
{
2729
public GatewayBackend
2830
{

gateway-ha/src/main/java/io/trino/gateway/ha/persistence/dao/GatewayBackendDao.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,17 +31,17 @@ public interface GatewayBackendDao
3131
GatewayBackend findFirstByName(String name);
3232

3333
@SqlUpdate("""
34-
INSERT INTO gateway_backend (name, routing_group, backend_url, external_url, active)
35-
VALUES (:name, :routingGroup, :backendUrl, :externalUrl, :active)
34+
INSERT INTO gateway_backend (name, routing_group, backend_url, external_url, active, tags)
35+
VALUES (:name, :routingGroup, :backendUrl, :externalUrl, :active, :tags)
3636
""")
37-
void create(String name, String routingGroup, String backendUrl, String externalUrl, boolean active);
37+
void create(String name, String routingGroup, String backendUrl, String externalUrl, boolean active, String tags);
3838

3939
@SqlUpdate("""
4040
UPDATE gateway_backend
41-
SET routing_group = :routingGroup, backend_url = :backendUrl, external_url = :externalUrl, active = :active
41+
SET routing_group = :routingGroup, backend_url = :backendUrl, external_url = :externalUrl, active = :active, tags = :tags
4242
WHERE name = :name
4343
""")
44-
void update(String name, String routingGroup, String backendUrl, String externalUrl, boolean active);
44+
void update(String name, String routingGroup, String backendUrl, String externalUrl, boolean active, String tags);
4545

4646
@SqlUpdate("""
4747
UPDATE gateway_backend

gateway-ha/src/main/java/io/trino/gateway/ha/resource/GatewayWebAppResource.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ public Response getAllBackends()
121121
backendResponse.setStatus(backendState.trinoStatus().toString());
122122
backendResponse.setRoutingGroup(b.getRoutingGroup());
123123
backendResponse.setExternalUrl(b.getExternalUrl());
124+
backendResponse.setTags(b.getTags());
124125
return backendResponse;
125126
}).toList();
126127
return Response.ok(Result.ok(data)).build();

gateway-ha/src/main/java/io/trino/gateway/ha/router/HaGatewayManager.java

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import com.github.benmanes.caffeine.cache.LoadingCache;
1818
import com.github.benmanes.caffeine.cache.Ticker;
1919
import com.google.common.annotations.VisibleForTesting;
20+
import com.google.common.base.Splitter;
2021
import com.google.common.collect.ImmutableList;
2122
import com.google.inject.Inject;
2223
import io.airlift.log.Logger;
@@ -200,7 +201,7 @@ public ProxyBackendConfiguration addBackend(ProxyBackendConfiguration backend)
200201
validateBackendConfiguration(backend);
201202
String backendProxyTo = removeTrailingSlash(backend.getProxyTo());
202203
String backendExternalUrl = removeTrailingSlash(backend.getExternalUrl());
203-
dao.create(backend.getName(), backend.getRoutingGroup(), backendProxyTo, backendExternalUrl, backend.isActive());
204+
dao.create(backend.getName(), backend.getRoutingGroup(), backendProxyTo, backendExternalUrl, backend.isActive(), tagsToString(backend.getTags()));
204205
invalidateBackendCache();
205206
return backend;
206207
}
@@ -213,10 +214,10 @@ public ProxyBackendConfiguration updateBackend(ProxyBackendConfiguration backend
213214
String backendExternalUrl = removeTrailingSlash(backend.getExternalUrl());
214215
GatewayBackend model = dao.findFirstByName(backend.getName());
215216
if (model == null) {
216-
dao.create(backend.getName(), backend.getRoutingGroup(), backendProxyTo, backendExternalUrl, backend.isActive());
217+
dao.create(backend.getName(), backend.getRoutingGroup(), backendProxyTo, backendExternalUrl, backend.isActive(), tagsToString(backend.getTags()));
217218
}
218219
else {
219-
dao.update(backend.getName(), backend.getRoutingGroup(), backendProxyTo, backendExternalUrl, backend.isActive());
220+
dao.update(backend.getName(), backend.getRoutingGroup(), backendProxyTo, backendExternalUrl, backend.isActive(), tagsToString(backend.getTags()));
220221
logActivationStatusChange(backend.getName(), backend.isActive(), model.active());
221222
}
222223
invalidateBackendCache();
@@ -247,11 +248,28 @@ private static List<ProxyBackendConfiguration> upcast(List<GatewayBackend> gatew
247248
backendConfig.setProxyTo(model.backendUrl());
248249
backendConfig.setExternalUrl(model.externalUrl());
249250
backendConfig.setName(model.name());
251+
backendConfig.setTags(tagsFromString(model.tags()));
250252
proxyBackendConfigurations.add(backendConfig);
251253
}
252254
return proxyBackendConfigurations;
253255
}
254256

257+
static String tagsToString(List<String> tags)
258+
{
259+
if (tags == null || tags.isEmpty()) {
260+
return null;
261+
}
262+
return String.join(",", tags);
263+
}
264+
265+
static List<String> tagsFromString(String tags)
266+
{
267+
if (tags == null || tags.isBlank()) {
268+
return List.of();
269+
}
270+
return Splitter.on(',').trimResults().omitEmptyStrings().splitToList(tags);
271+
}
272+
255273
public static String removeTrailingSlash(String url)
256274
{
257275
return url.replaceAll("/$", "");

gateway-ha/src/main/resources/gateway-ha-persistence-mysql.sql

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ name VARCHAR(256) PRIMARY KEY,
33
routing_group VARCHAR (256),
44
backend_url VARCHAR (256),
55
external_url VARCHAR (256),
6-
active BOOLEAN
6+
active BOOLEAN,
7+
tags TEXT NULL
78
);
89

910
CREATE TABLE IF NOT EXISTS query_history (

gateway-ha/src/main/resources/gateway-ha-persistence-postgres.sql

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ name VARCHAR(256) PRIMARY KEY,
33
routing_group VARCHAR (256),
44
backend_url VARCHAR (256),
55
external_url VARCHAR (256),
6-
active BOOLEAN
6+
active BOOLEAN,
7+
tags TEXT NULL
78
);
89

910
CREATE TABLE IF NOT EXISTS query_history (
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
ALTER TABLE gateway_backend
2+
ADD COLUMN tags TEXT NULL;
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ALTER TABLE gateway_backend ADD (tags CLOB NULL);
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
ALTER TABLE gateway_backend
2+
ADD COLUMN tags TEXT NULL;

0 commit comments

Comments
 (0)