diff --git a/pkg/cluster/streams.go b/pkg/cluster/streams.go index bf9be3fb4..847f52d77 100644 --- a/pkg/cluster/streams.go +++ b/pkg/cluster/streams.go @@ -2,6 +2,7 @@ package cluster import ( "context" + "crypto/sha1" "encoding/json" "fmt" "reflect" @@ -330,7 +331,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_%x", constants.EventStreamSourceSlotPrefix, sha1.Sum([]byte(name))) + } + return name } func (c *Cluster) getStreamConnection(database, user, appId string) zalandov1.Connection { diff --git a/pkg/cluster/streams_test.go b/pkg/cluster/streams_test.go index 934f2bfd4..1a58c9926 100644 --- a/pkg/cluster/streams_test.go +++ b/pkg/cluster/streams_test.go @@ -889,3 +889,27 @@ func TestDeleteStreams(t *testing.T) { assert.NoError(t, err) assert.Equalf(t, 0, len(streams.Items), "unexpected number of streams found: got %d, but expected none", len(streams.Items)) } + +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) +}