Hash slotname, if it exceeds 63 characters in streams
This commit is contained in:
		
							parent
							
								
									c206eb38a8
								
							
						
					
					
						commit
						8b03db1c9c
					
				|  | @ -2,6 +2,7 @@ package cluster | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"context" | 	"context" | ||||||
|  | 	"crypto/sha1" | ||||||
| 	"encoding/json" | 	"encoding/json" | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"reflect" | 	"reflect" | ||||||
|  | @ -288,7 +289,11 @@ func getOutboxTable(tableName string, idColumn *string) zalandov1.EventStreamTab | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func getSlotName(dbName, appId string) string { | 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 { | func (c *Cluster) getStreamConnection(database, user, appId string) zalandov1.Connection { | ||||||
|  |  | ||||||
|  | @ -752,3 +752,27 @@ func patchPostgresqlStreams(t *testing.T, cluster *Cluster, pgSpec *acidv1.Postg | ||||||
| 
 | 
 | ||||||
| 	return streams | 	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) | ||||||
|  | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue