Skip to content

Commit 7488b1a

Browse files
committed
added database type into resolver's
1 parent d7c7a5d commit 7488b1a

File tree

5 files changed

+16
-4
lines changed

5 files changed

+16
-4
lines changed

.DS_Store

2 KB
Binary file not shown.

cmd/proxy/internal/core/types.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ type RoutingMetadata map[string]string
1313
// BackendResolver defines how to find a backend address based on metadata.
1414
// It is purely a lookup mechanism and knows nothing about the network.
1515
type BackendResolver interface {
16-
Resolve(ctx context.Context, metadata RoutingMetadata) (string, error)
16+
Resolve(ctx context.Context, metadata RoutingMetadata, databaseType DatabaseType) (string, error)
1717
}
1818

1919
// ConnectionHandler defines the interface for handling a client connection.
@@ -41,3 +41,11 @@ type TLSProvider interface {
4141
GetCertificate(ctx context.Context) (*tls.Certificate, error)
4242
Store(ctx context.Context, certPEM, keyPEM []byte) error
4343
}
44+
45+
type DatabaseType string
46+
47+
const (
48+
DatabaseTypePostgresql DatabaseType = "postgresql"
49+
DatabaseTypeMysql DatabaseType = "mysql"
50+
DatabaseTypeScylla DatabaseType = "scylla"
51+
)

cmd/proxy/internal/discovery/kubernetes/resolver.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ func NewK8sResolver(clientset *kubernetes.Clientset) *K8sResolver {
3030
}
3131
}
3232

33-
func (r *K8sResolver) Resolve(ctx context.Context, metadata core.RoutingMetadata) (string, error) {
33+
func (r *K8sResolver) Resolve(ctx context.Context, metadata core.RoutingMetadata, databaseType core.DatabaseType) (string, error) {
3434
deploymentID, ok := metadata["deployment_id"]
3535
if !ok {
3636
return "", fmt.Errorf("metadata missing 'deployment_id' (check connection string format: user.deployment_id[.pool])")
@@ -49,6 +49,10 @@ func (r *K8sResolver) Resolve(ctx context.Context, metadata core.RoutingMetadata
4949
continue
5050
}
5151

52+
if labels["xdatabase-proxy-database-type"] != string(databaseType) {
53+
continue
54+
}
55+
5256
if labels["xdatabase-proxy-deployment-id"] == deploymentID &&
5357
labels["xdatabase-proxy-pooled"] == pooled {
5458

cmd/proxy/internal/discovery/memory/resolver.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ func NewResolver(mappingStr string) (*Resolver, error) {
3737
return &Resolver{backends: backends}, nil
3838
}
3939

40-
func (r *Resolver) Resolve(ctx context.Context, metadata core.RoutingMetadata) (string, error) {
40+
func (r *Resolver) Resolve(ctx context.Context, metadata core.RoutingMetadata, databaseType core.DatabaseType) (string, error) {
4141
deploymentID, ok := metadata["deployment_id"]
4242
if !ok {
4343
return "", fmt.Errorf("metadata missing 'deployment_id'")

cmd/proxy/internal/proxy/postgresql/proxy.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ func (p *PostgresProxy) HandleConnection(clientConn net.Conn) {
7676
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
7777
defer cancel()
7878

79-
backendAddr, err := p.Resolver.Resolve(ctx, metadata)
79+
backendAddr, err := p.Resolver.Resolve(ctx, metadata, core.DatabaseTypeMysql)
8080
if err != nil {
8181
logger.Error("Resolution failed", "error", err, "remote_addr", clientConn.RemoteAddr())
8282
_ = p.sendErrorResponse(clientConn, &ErrorResponse{

0 commit comments

Comments
 (0)