Hash slotname, if it exceeds 63 characters in streams

This commit is contained in:
Johannes Knauft 2024-11-27 02:36:17 +01:00
parent c206eb38a8
commit 8b03db1c9c
2 changed files with 30 additions and 1 deletions

View File

@ -2,6 +2,7 @@ package cluster
import (
"context"
"crypto/sha1"
"encoding/json"
"fmt"
"reflect"
@ -288,7 +289,11 @@ func getOutboxTable(tableName string, idColumn *string) zalandov1.EventStreamTab
}
func getSlotName(dbName, appId string) string {
return fmt.Sprintf("%s_%s_%s", constants.EventStreamSourceSlotPrefix, dbName, strings.Replace(appId, "-", "_", -1))
name := fmt.Sprintf("%s_%s_%s", constants.EventStreamSourceSlotPrefix, dbName, strings.Replace(appId, "-", "_", -1))
if len(name) > 63 {
name = fmt.Sprintf("%s_%s", constants.EventStreamSourceSlotPrefix, sha1.Sum([]byte(name)))
}
return name
}
func (c *Cluster) getStreamConnection(database, user, appId string) zalandov1.Connection {

View File

@ -752,3 +752,27 @@ func patchPostgresqlStreams(t *testing.T, cluster *Cluster, pgSpec *acidv1.Postg
return streams
}
func TestSlotNameWithinMaxLength(t *testing.T) {
dbName := "testdb"
appId := "test-app"
expected := constants.EventStreamSourceSlotPrefix + "_testdb_test_app"
result := getSlotName(dbName, appId)
assert.Equal(t, expected, result)
}
func TestSlotNameExceedsMaxLength(t *testing.T) {
dbName := "testdb"
appId := "this-is-a-very-long-application-id-that-will-exceed-the-maximum-length"
expected := constants.EventStreamSourceSlotPrefix + "_5a300d179c894b672b35bac212eab875d4c4145a"
result := getSlotName(dbName, appId)
assert.Equal(t, expected, result)
}
func TestSlotNameWithHyphens(t *testing.T) {
dbName := "testdb"
appId := "test-app-with-hyphens"
expected := constants.EventStreamSourceSlotPrefix + "_testdb_test_app_with_hyphens"
result := getSlotName(dbName, appId)
assert.Equal(t, expected, result)
}