diff --git a/appservice/storage/cosmosdb/appservice_events_table.go b/appservice/storage/cosmosdb/appservice_events_table.go index 846fb75b6..3ddff1504 100644 --- a/appservice/storage/cosmosdb/appservice_events_table.go +++ b/appservice/storage/cosmosdb/appservice_events_table.go @@ -59,6 +59,7 @@ type EventNumberCosmosData struct { type EventCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -125,7 +126,7 @@ func (s *eventsStatements) prepare(db *Database, writer sqlutil.Writer) (err err func queryEvent(s *eventsStatements, ctx context.Context, qry string, params map[string]interface{}) ([]EventCosmosData, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []EventCosmosData var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -146,7 +147,7 @@ func queryEvent(s *eventsStatements, ctx context.Context, qry string, params map func queryEventEventNumber(s *eventsStatements, ctx context.Context, qry string, params map[string]interface{}) ([]EventNumberCosmosData, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []EventNumberCosmosData var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -345,8 +346,8 @@ func (s *eventsStatements) insertEvent( var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) docId := fmt.Sprintf("%d", idSeq) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) // appServiceID, // eventJSON, @@ -360,6 +361,7 @@ func (s *eventsStatements) insertEvent( dbData := &EventCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), diff --git a/dendrite-config-cosmosdb.yaml b/dendrite-config-cosmosdb.yaml index 855c19afb..6c1fa7e9d 100644 --- a/dendrite-config-cosmosdb.yaml +++ b/dendrite-config-cosmosdb.yaml @@ -90,7 +90,7 @@ global: # Naffka database options. Not required when using Kafka. naffka_database: - connection_string: "cosmosdb:AccountEndpoint=https://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==;DatabaseName=safezone_local;ContainerName=test.criticalarc.com;" + connection_string: "cosmosdb:AccountEndpoint=https://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==;DatabaseName=safezone_local;ContainerName=test.criticalarc.com;TenantName=test.criticalarc.com;" max_open_conns: 10 max_idle_conns: 2 conn_max_lifetime: -1 @@ -122,7 +122,7 @@ app_service_api: listen: http://localhost:7777 connect: http://localhost:7777 database: - connection_string: "cosmosdb:AccountEndpoint=https://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==;DatabaseName=safezone_local;ContainerName=test.criticalarc.com;" + connection_string: "cosmosdb:AccountEndpoint=https://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==;DatabaseName=safezone_local;ContainerName=test.criticalarc.com;TenantName=test.criticalarc.com;" max_open_conns: 10 max_idle_conns: 2 conn_max_lifetime: -1 @@ -202,7 +202,7 @@ federation_sender: listen: http://localhost:7775 connect: http://localhost:7775 database: - connection_string: "cosmosdb:AccountEndpoint=https://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==;DatabaseName=safezone_local;ContainerName=test.criticalarc.com;" + connection_string: "cosmosdb:AccountEndpoint=https://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==;DatabaseName=safezone_local;ContainerName=test.criticalarc.com;TenantName=test.criticalarc.com;" max_open_conns: 10 max_idle_conns: 2 conn_max_lifetime: -1 @@ -228,7 +228,7 @@ key_server: listen: http://localhost:7779 connect: http://localhost:7779 database: - connection_string: "cosmosdb:AccountEndpoint=https://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==;DatabaseName=safezone_local;ContainerName=test.criticalarc.com;" + connection_string: "cosmosdb:AccountEndpoint=https://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==;DatabaseName=safezone_local;ContainerName=test.criticalarc.com;TenantName=test.criticalarc.com;" max_open_conns: 10 max_idle_conns: 2 conn_max_lifetime: -1 @@ -241,7 +241,7 @@ media_api: external_api: listen: http://[::]:8074 database: - connection_string: "cosmosdb:AccountEndpoint=https://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==;DatabaseName=safezone_local;ContainerName=test.criticalarc.com;" + connection_string: "cosmosdb:AccountEndpoint=https://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==;DatabaseName=safezone_local;ContainerName=test.criticalarc.com;TenantName=test.criticalarc.com;" max_open_conns: 5 max_idle_conns: 2 conn_max_lifetime: -1 @@ -291,7 +291,7 @@ room_server: listen: http://localhost:7770 connect: http://localhost:7770 database: - connection_string: "cosmosdb:AccountEndpoint=https://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==;DatabaseName=safezone_local;ContainerName=test.criticalarc.com;" + connection_string: "cosmosdb:AccountEndpoint=https://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==;DatabaseName=safezone_local;ContainerName=test.criticalarc.com;TenantName=test.criticalarc.com;" max_open_conns: 10 max_idle_conns: 2 conn_max_lifetime: -1 @@ -302,7 +302,7 @@ signing_key_server: listen: http://localhost:7780 connect: http://localhost:7780 database: - connection_string: "cosmosdb:AccountEndpoint=https://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==;DatabaseName=safezone_local;ContainerName=test.criticalarc.com;" + connection_string: "cosmosdb:AccountEndpoint=https://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==;DatabaseName=safezone_local;ContainerName=test.criticalarc.com;TenantName=test.criticalarc.com;" max_open_conns: 10 max_idle_conns: 2 conn_max_lifetime: -1 @@ -331,7 +331,7 @@ sync_api: external_api: listen: http://[::]:8073 database: - connection_string: "cosmosdb:AccountEndpoint=https://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==;DatabaseName=safezone_local;ContainerName=test.criticalarc.com;" + connection_string: "cosmosdb:AccountEndpoint=https://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==;DatabaseName=safezone_local;ContainerName=test.criticalarc.com;TenantName=test.criticalarc.com;" max_open_conns: 10 max_idle_conns: 2 conn_max_lifetime: -1 @@ -354,12 +354,12 @@ user_api: listen: http://localhost:7781 connect: http://localhost:7781 account_database: - connection_string: "cosmosdb:AccountEndpoint=https://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==;DatabaseName=safezone_local;ContainerName=test.criticalarc.com;" + connection_string: "cosmosdb:AccountEndpoint=https://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==;DatabaseName=safezone_local;ContainerName=test.criticalarc.com;TenantName=test.criticalarc.com;" max_open_conns: 10 max_idle_conns: 2 conn_max_lifetime: -1 device_database: - connection_string: "cosmosdb:AccountEndpoint=https://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==;DatabaseName=safezone_local;ContainerName=test.criticalarc.com;" + connection_string: "cosmosdb:AccountEndpoint=https://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==;DatabaseName=safezone_local;ContainerName=test.criticalarc.com;TenantName=test.criticalarc.com;" max_open_conns: 10 max_idle_conns: 2 conn_max_lifetime: -1 diff --git a/federationsender/storage/cosmosdb/blacklist_table.go b/federationsender/storage/cosmosdb/blacklist_table.go index 71c1475c3..532b53b8a 100644 --- a/federationsender/storage/cosmosdb/blacklist_table.go +++ b/federationsender/storage/cosmosdb/blacklist_table.go @@ -40,6 +40,7 @@ type BlacklistCosmos struct { type BlacklistCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -118,8 +119,8 @@ func (s *blacklistStatements) InsertBlacklist( var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) // UNIQUE (server_name) docId := fmt.Sprintf("%s", serverName) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) data := BlacklistCosmos{ ServerName: string(serverName), @@ -127,6 +128,7 @@ func (s *blacklistStatements) InsertBlacklist( dbData := &BlacklistCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), @@ -159,8 +161,8 @@ func (s *blacklistStatements) SelectBlacklist( var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) // UNIQUE (server_name) docId := fmt.Sprintf("%s", serverName) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) // res, err := stmt.QueryContext(ctx, serverName) res, err := getBlacklist(s, ctx, pk, cosmosDocId) if err != nil { @@ -183,8 +185,8 @@ func (s *blacklistStatements) DeleteBlacklist( var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) // UNIQUE (server_name) docId := fmt.Sprintf("%s", serverName) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) // _, err := stmt.ExecContext(ctx, serverName) res, err := getBlacklist(s, ctx, pk, cosmosDocId) if(res != nil) { diff --git a/federationsender/storage/cosmosdb/inbound_peeks_table.go b/federationsender/storage/cosmosdb/inbound_peeks_table.go index ba4e7af6b..fd8bc911f 100644 --- a/federationsender/storage/cosmosdb/inbound_peeks_table.go +++ b/federationsender/storage/cosmosdb/inbound_peeks_table.go @@ -50,6 +50,7 @@ type InboundPeekCosmos struct { type InboundPeekCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -94,7 +95,7 @@ type inboundPeeksStatements struct { func queryInboundPeek(s *inboundPeeksStatements, ctx context.Context, qry string, params map[string]interface{}) ([]InboundPeekCosmosData, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []InboundPeekCosmosData var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -179,8 +180,8 @@ func (s *inboundPeeksStatements) InsertInboundPeek( var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) // UNIQUE (room_id, server_name, peek_id) docId := fmt.Sprintf("%s_%s_%s", roomID, serverName, peekID) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) data := InboundPeekCosmos{ RoomID: roomID, @@ -193,6 +194,7 @@ func (s *inboundPeeksStatements) InsertInboundPeek( dbData := &InboundPeekCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), @@ -222,8 +224,8 @@ func (s *inboundPeeksStatements) RenewInboundPeek( var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) // UNIQUE (room_id, server_name, peek_id) docId := fmt.Sprintf("%s_%s_%s", roomID, serverName, peekID) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) // _, err = sqlutil.TxStmt(txn, s.renewInboundPeekStmt).ExecContext(ctx, nowMilli, renewalInterval, roomID, serverName, peekID) res, err := getInboundPeek(s, ctx, pk, cosmosDocId) @@ -252,8 +254,8 @@ func (s *inboundPeeksStatements) SelectInboundPeek( var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) // UNIQUE (room_id, server_name, peek_id) docId := fmt.Sprintf("%s_%s_%s", roomID, serverName, peekID) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) // row := sqlutil.TxStmt(txn, s.selectInboundPeeksStmt).QueryRowContext(ctx, roomID) row, err := getInboundPeek(s, ctx, pk, cosmosDocId) diff --git a/federationsender/storage/cosmosdb/joined_hosts_table.go b/federationsender/storage/cosmosdb/joined_hosts_table.go index 10315f30e..2b385f90a 100644 --- a/federationsender/storage/cosmosdb/joined_hosts_table.go +++ b/federationsender/storage/cosmosdb/joined_hosts_table.go @@ -55,6 +55,7 @@ type JoinedHostCosmos struct { type JoinedHostCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -103,7 +104,7 @@ type joinedHostsStatements struct { func queryJoinedHostDistinct(s *joinedHostsStatements, ctx context.Context, qry string, params map[string]interface{}) ([]JoinedHostCosmos, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []JoinedHostCosmos var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -124,7 +125,7 @@ func queryJoinedHostDistinct(s *joinedHostsStatements, ctx context.Context, qry func queryJoinedHost(s *joinedHostsStatements, ctx context.Context, qry string, params map[string]interface{}) ([]JoinedHostCosmosData, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []JoinedHostCosmosData var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -186,8 +187,8 @@ func (s *joinedHostsStatements) InsertJoinedHosts( // CREATE UNIQUE INDEX IF NOT EXISTS federatonsender_joined_hosts_event_id_idx // ON federationsender_joined_hosts (event_id); docId := fmt.Sprintf("%s", eventID) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) data := JoinedHostCosmos{ EventID: eventID, @@ -197,6 +198,7 @@ func (s *joinedHostsStatements) InsertJoinedHosts( dbData := &JoinedHostCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), diff --git a/federationsender/storage/cosmosdb/outbound_peeks_table.go b/federationsender/storage/cosmosdb/outbound_peeks_table.go index 61a5d4c29..5d1948c9f 100644 --- a/federationsender/storage/cosmosdb/outbound_peeks_table.go +++ b/federationsender/storage/cosmosdb/outbound_peeks_table.go @@ -50,6 +50,7 @@ type OutboundPeekCosmos struct { type OutboundPeekCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -91,7 +92,7 @@ type outboundPeeksStatements struct { func queryOutboundPeek(s *outboundPeeksStatements, ctx context.Context, qry string, params map[string]interface{}) ([]OutboundPeekCosmosData, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []OutboundPeekCosmosData var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -175,8 +176,8 @@ func (s *outboundPeeksStatements) InsertOutboundPeek( var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) // UNIQUE (room_id, server_name, peek_id) docId := fmt.Sprintf("%s_%s_%s", roomID, serverName, peekID) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) data := OutboundPeekCosmos{ RoomID: roomID, @@ -189,6 +190,7 @@ func (s *outboundPeeksStatements) InsertOutboundPeek( dbData := &OutboundPeekCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), @@ -217,8 +219,8 @@ func (s *outboundPeeksStatements) RenewOutboundPeek( var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) // UNIQUE (room_id, server_name, peek_id) docId := fmt.Sprintf("%s_%s_%s", roomID, serverName, peekID) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) // _, err = sqlutil.TxStmt(txn, s.renewOutboundPeekStmt).ExecContext(ctx, nowMilli, renewalInterval, roomID, serverName, peekID) res, err := getOutboundPeek(s, ctx, pk, cosmosDocId) @@ -247,8 +249,8 @@ func (s *outboundPeeksStatements) SelectOutboundPeek( var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) // UNIQUE (room_id, server_name, peek_id) docId := fmt.Sprintf("%s_%s_%s", roomID, serverName, peekID) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) // row := sqlutil.TxStmt(txn, s.selectOutboundPeeksStmt).QueryRowContext(ctx, roomID) row, err := getOutboundPeek(s, ctx, pk, cosmosDocId) diff --git a/federationsender/storage/cosmosdb/queue_edus_table.go b/federationsender/storage/cosmosdb/queue_edus_table.go index 79c99f897..0f4935c65 100644 --- a/federationsender/storage/cosmosdb/queue_edus_table.go +++ b/federationsender/storage/cosmosdb/queue_edus_table.go @@ -52,6 +52,7 @@ type QueueEDUCosmosNumber struct { type QueueEDUCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -103,7 +104,7 @@ type queueEDUsStatements struct { func queryQueueEDUC(s *queueEDUsStatements, ctx context.Context, qry string, params map[string]interface{}) ([]QueueEDUCosmosData, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []QueueEDUCosmosData var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -124,7 +125,7 @@ func queryQueueEDUC(s *queueEDUsStatements, ctx context.Context, qry string, par func queryQueueEDUCDistinct(s *queueEDUsStatements, ctx context.Context, qry string, params map[string]interface{}) ([]QueueEDUCosmos, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []QueueEDUCosmos var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -145,7 +146,7 @@ func queryQueueEDUCDistinct(s *queueEDUsStatements, ctx context.Context, qry str func queryQueueEDUCNumber(s *queueEDUsStatements, ctx context.Context, qry string, params map[string]interface{}) ([]QueueEDUCosmosNumber, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []QueueEDUCosmosNumber var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -207,8 +208,8 @@ func (s *queueEDUsStatements) InsertQueueEDU( // CREATE UNIQUE INDEX IF NOT EXISTS federationsender_queue_edus_json_nid_idx // ON federationsender_queue_edus (json_nid, server_name); docId := fmt.Sprintf("%d_%s", nid, eduType) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) data := QueueEDUCosmos{ EDUType: eduType, @@ -218,6 +219,7 @@ func (s *queueEDUsStatements) InsertQueueEDU( dbData := &QueueEDUCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), diff --git a/federationsender/storage/cosmosdb/queue_json_table.go b/federationsender/storage/cosmosdb/queue_json_table.go index 8441e8e84..a7faada2b 100644 --- a/federationsender/storage/cosmosdb/queue_json_table.go +++ b/federationsender/storage/cosmosdb/queue_json_table.go @@ -44,6 +44,7 @@ type QueueJSONCosmos struct { type QueueJSONCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -75,7 +76,7 @@ type queueJSONStatements struct { func queryQueueJSON(s *queueJSONStatements, ctx context.Context, qry string, params map[string]interface{}) ([]QueueJSONCosmosData, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []QueueJSONCosmosData var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -130,8 +131,8 @@ func (s *queueJSONStatements) InsertQueueJSON( var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) // json_nid INTEGER PRIMARY KEY AUTOINCREMENT, docId := fmt.Sprintf("%d", idSeq) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) //Convert to byte jsonData := []byte(json) @@ -143,6 +144,7 @@ func (s *queueJSONStatements) InsertQueueJSON( dbData := &QueueJSONCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), diff --git a/federationsender/storage/cosmosdb/queue_pdus_table.go b/federationsender/storage/cosmosdb/queue_pdus_table.go index e7ddb6a32..04deb41e3 100644 --- a/federationsender/storage/cosmosdb/queue_pdus_table.go +++ b/federationsender/storage/cosmosdb/queue_pdus_table.go @@ -53,6 +53,7 @@ type QueuePDUCosmosNumber struct { type QueuePDUCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -115,7 +116,7 @@ type queuePDUsStatements struct { func queryQueuePDU(s *queuePDUsStatements, ctx context.Context, qry string, params map[string]interface{}) ([]QueuePDUCosmosData, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []QueuePDUCosmosData var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -136,7 +137,7 @@ func queryQueuePDU(s *queuePDUsStatements, ctx context.Context, qry string, para func queryQueuePDUDistinct(s *queuePDUsStatements, ctx context.Context, qry string, params map[string]interface{}) ([]QueuePDUCosmos, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []QueuePDUCosmos var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -157,7 +158,7 @@ func queryQueuePDUDistinct(s *queuePDUsStatements, ctx context.Context, qry stri func queryQueuePDUNumber(s *queuePDUsStatements, ctx context.Context, qry string, params map[string]interface{}) ([]QueuePDUCosmosNumber, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []QueuePDUCosmosNumber var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -219,8 +220,8 @@ func (s *queuePDUsStatements) InsertQueuePDU( // CREATE UNIQUE INDEX IF NOT EXISTS federationsender_queue_pdus_pdus_json_nid_idx // ON federationsender_queue_pdus (json_nid, server_name); docId := fmt.Sprintf("%d_%s", nid, serverName) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) data := QueuePDUCosmos{ JSONNID: nid, @@ -230,6 +231,7 @@ func (s *queuePDUsStatements) InsertQueuePDU( dbData := &QueuePDUCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), diff --git a/internal/cosmosdbapi/cosmosconfig.go b/internal/cosmosdbapi/cosmosconfig.go index b6b715303..9096e02df 100644 --- a/internal/cosmosdbapi/cosmosconfig.go +++ b/internal/cosmosdbapi/cosmosconfig.go @@ -3,4 +3,5 @@ package cosmosdbapi type CosmosConfig struct { DatabaseName string ContainerName string + TenantName string } diff --git a/internal/cosmosdbutil/connection.go b/internal/cosmosdbutil/connection.go index 5767201b5..3b7bb8db2 100644 --- a/internal/cosmosdbutil/connection.go +++ b/internal/cosmosdbutil/connection.go @@ -11,6 +11,7 @@ const accountEndpointName = "AccountEndpoint" const accountKeyName = "AccountKey" const databaseName = "DatabaseName" const containerName = "ContainerName" +const tenantName = "TenantName" func getConnectionString(d *config.DataSource) config.DataSource { var connString string @@ -43,8 +44,10 @@ func GetCosmosConfig(d *config.DataSource) cosmosdbapi.CosmosConfig { connMap := getConnectionProperties(string(connString)) database := connMap[databaseName] container := connMap[containerName] + tenant := connMap[tenantName] return cosmosdbapi.CosmosConfig{ DatabaseName: database, ContainerName: container, + TenantName: tenant, } } diff --git a/internal/cosmosdbutil/document_seq.go b/internal/cosmosdbutil/document_seq.go index ecce50a3f..e39630811 100644 --- a/internal/cosmosdbutil/document_seq.go +++ b/internal/cosmosdbutil/document_seq.go @@ -10,6 +10,7 @@ import ( type SequenceCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -44,6 +45,7 @@ func GetNextSequence( dbData = SequenceCosmosData{} dbData.Id = cosmosDocId dbData.Pk = pk + dbData.Tn = config.TenantName dbData.Cn = dbCollectionName dbData.Value = initial var optionsCreate = cosmosdbapi.GetCreateDocumentOptions(dbData.Pk) diff --git a/internal/cosmosdbutil/partition_offset_table.go b/internal/cosmosdbutil/partition_offset_table.go index 32ec22b32..7bdea4b18 100644 --- a/internal/cosmosdbutil/partition_offset_table.go +++ b/internal/cosmosdbutil/partition_offset_table.go @@ -56,6 +56,7 @@ type PartitionOffsetCosmos struct { type PartitionOffsetCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -188,7 +189,7 @@ func (s *PartitionOffsetStatements) upsertPartitionOffset( dbCollectionName := getCollectionName(*s) // UNIQUE (topic, partition) docId := fmt.Sprintf("%s_%d", topic, partition) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.CosmosConfig.ContainerName, dbCollectionName, docId) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.CosmosConfig.TenantName, dbCollectionName, docId) pk := cosmosdbapi.GetPartitionKey(s.db.CosmosConfig.ContainerName, dbCollectionName) data := PartitionOffsetCosmos{ @@ -199,6 +200,7 @@ func (s *PartitionOffsetStatements) upsertPartitionOffset( dbData := &PartitionOffsetCosmosData{ Id: cosmosDocId, + Tn: s.db.CosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, // nowMilli := time.Now().UnixNano() / int64(time.Millisecond) diff --git a/internal/naffka/naffkacosmosdb/naffka_topics_table.go b/internal/naffka/naffkacosmosdb/naffka_topics_table.go index 980b553d7..cd5d598ac 100644 --- a/internal/naffka/naffkacosmosdb/naffka_topics_table.go +++ b/internal/naffka/naffkacosmosdb/naffka_topics_table.go @@ -40,6 +40,7 @@ type TopicCosmosNumber struct { type TopicCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -57,6 +58,7 @@ type MessageCosmos struct { type MessageCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -233,6 +235,7 @@ func (t *topicsStatements) InsertTopic( dbData := &TopicCosmosData{ Id: cosmosDocId, + Tn: t.DB.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), @@ -364,6 +367,7 @@ func (t *topicsStatements) InsertTopics( dbData := &MessageCosmosData{ Id: cosmosDocId, + Tn: t.DB.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), diff --git a/keyserver/storage/cosmosdb/device_keys_table.go b/keyserver/storage/cosmosdb/device_keys_table.go index ae653d2f7..903d83b8d 100644 --- a/keyserver/storage/cosmosdb/device_keys_table.go +++ b/keyserver/storage/cosmosdb/device_keys_table.go @@ -57,6 +57,7 @@ type DeviceKeyCosmosNumber struct { type DeviceKeyCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -80,14 +81,14 @@ const selectBatchDeviceKeysSQL = "" + // "SELECT MAX(stream_id) FROM keyserver_device_keys WHERE user_id=$1" const selectMaxStreamForUserSQL = "" + - "select max(c.mx_keyserver_device_key.stream_id) as number from c where c._cn = @x1 " + - "and c.mx_keyserver_device_key.user_id = @x2 " + "select max(c.mx_keyserver_device_key.stream_id) as number from c where c._sid = @x1 and c._cn = @x2 " + + "and c.mx_keyserver_device_key.user_id = @x3 " // "SELECT COUNT(*) FROM keyserver_device_keys WHERE user_id=$1 AND stream_id IN ($2)" const countStreamIDsForUserSQL = "" + - "select count(c._ts) as number from c where c._cn = @x1 " + - "and c.mx_keyserver_device_key.user_id = @x2 " + - "and ARRAY_CONTAINS(@x3, c.mx_keyserver_device_key.stream_id) " + "select count(c._ts) as number from c where c._sid = @x1 and c._cn = @x2 " + + "and c.mx_keyserver_device_key.user_id = @x3 " + + "and ARRAY_CONTAINS(@x4, c.mx_keyserver_device_key.stream_id) " const selectAllDeviceKeysSQL = "" + "select * from c where c._cn = @x1 " + @@ -98,7 +99,7 @@ const selectAllDeviceKeysSQL = "" + func queryDeviceKey(s *deviceKeysStatements, ctx context.Context, qry string, params map[string]interface{}) ([]DeviceKeyCosmosData, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []DeviceKeyCosmosData var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -122,7 +123,7 @@ func queryDeviceKeyNumber(s *deviceKeysStatements, ctx context.Context, qry stri var optionsQry = cosmosdbapi.GetQueryAllPartitionsDocumentsOptions() var query = cosmosdbapi.GetQuery(qry, params) - var _, err = cosmosdbapi.GetClient(s.db.connection).QueryDocuments( + var _, _ = cosmosdbapi.GetClient(s.db.connection).QueryDocuments( ctx, s.db.cosmosConfig.DatabaseName, s.db.cosmosConfig.ContainerName, @@ -130,9 +131,10 @@ func queryDeviceKeyNumber(s *deviceKeysStatements, ctx context.Context, qry stri &response, optionsQry) - if err != nil { - return nil, err - } + //WHen there is no data these GroupBy queries return errors + // if err != nil { + // return nil, err + // } if len(response) == 0 { return nil, cosmosdbutil.ErrNoRows @@ -301,8 +303,8 @@ func (s *deviceKeysStatements) SelectDeviceKeysJSON(ctx context.Context, keys [] var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) // UNIQUE (user_id, device_id) docId := fmt.Sprintf("%s_%s", key.UserID, key.DeviceID) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) response, err := getDeviceKey(s, ctx, pk, cosmosDocId) @@ -333,12 +335,13 @@ func (s *deviceKeysStatements) SelectMaxStreamIDForUser(ctx context.Context, txn var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) params := map[string]interface{}{ - "@x1": dbCollectionName, - "@x2": userID, + "@x1": s.db.cosmosConfig.TenantName, + "@x2": dbCollectionName, + "@x3": userID, } // err = sqlutil.TxStmt(txn, s.selectMaxStreamForUserStmt).QueryRowContext(ctx, userID).Scan(&nullStream) - response, err := queryDeviceKeyNumber(s, ctx, countStreamIDsForUserSQL, params) + response, err := queryDeviceKeyNumber(s, ctx, selectMaxStreamForUserSQL, params) if err != nil { if err == cosmosdbutil.ErrNoRows { @@ -370,9 +373,10 @@ func (s *deviceKeysStatements) CountStreamIDsForUser(ctx context.Context, userID var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) params := map[string]interface{}{ - "@x1": dbCollectionName, - "@x2": userID, - "@x3": iStreamIDs, + "@x1": s.db.cosmosConfig.TenantName, + "@x2": dbCollectionName, + "@x3": userID, + "@x4": iStreamIDs, } // query := strings.Replace(countStreamIDsForUserSQL, "($2)", sqlutil.QueryVariadicOffset(len(streamIDs), 1), 1) @@ -401,16 +405,17 @@ func (s *deviceKeysStatements) InsertDeviceKeys(ctx context.Context, txn *sql.Tx // " ON CONFLICT (user_id, device_id)" + // " DO UPDATE SET key_json = $4, stream_id = $5, display_name = $6" var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) for _, key := range keys { now := time.Now().Unix() // UNIQUE (user_id, device_id) docId := fmt.Sprintf("%s_%s", key.UserID, key.DeviceID) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) dbData := &DeviceKeyCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: now, diff --git a/keyserver/storage/cosmosdb/key_changes_table.go b/keyserver/storage/cosmosdb/key_changes_table.go index 6cc2faac8..981b17c7c 100644 --- a/keyserver/storage/cosmosdb/key_changes_table.go +++ b/keyserver/storage/cosmosdb/key_changes_table.go @@ -50,6 +50,7 @@ type KeyChangeUserMaxCosmosData struct { type KeyChangeCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -70,10 +71,10 @@ type KeyChangeCosmosData struct { // "SELECT user_id, MAX(offset) FROM keyserver_key_changes WHERE partition = $1 AND offset > $2 AND offset <= $3 GROUP BY user_id" const selectKeyChangesSQL = "" + "select c.mx_keyserver_key_change.user_id as user_id, max(c.mx_keyserver_key_change._offset) as max_offset " + - "from c where c._cn = @x1 " + - "and c.mx_keyserver_key_change.partition = @x2 " + - "and c.mx_keyserver_key_change._offset > @x3 " + - "and c.mx_keyserver_key_change._offset < @x4 " + + "from c where c._sid = @x1 and c._cn = @x2 " + + "and c.mx_keyserver_key_change.partition = @x3 " + + "and c.mx_keyserver_key_change._offset > @x4 " + + "and c.mx_keyserver_key_change._offset < @x5 " + "group by c.mx_keyserver_key_change.user_id " type keyChangesStatements struct { @@ -121,10 +122,10 @@ func (s *keyChangesStatements) InsertKeyChange(ctx context.Context, partition in // " DO UPDATE SET user_id = $3" var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) // UNIQUE (partition, offset) docId := fmt.Sprintf("%d_%d", partition, offset) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) data := KeyChangeCosmos{ Offset: offset, @@ -134,6 +135,7 @@ func (s *keyChangesStatements) InsertKeyChange(ctx context.Context, partition in dbData := KeyChangeCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), @@ -165,10 +167,11 @@ func (s *keyChangesStatements) SelectKeyChanges( var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) params := map[string]interface{}{ - "@x1": dbCollectionName, - "@x2": partition, - "@x3": fromOffset, - "@x4": toOffset, + "@x1": s.db.cosmosConfig.TenantName, + "@x2": dbCollectionName, + "@x3": partition, + "@x4": fromOffset, + "@x5": toOffset, } response, err := queryKeyChangeUserMax(s, ctx, s.selectKeyChangesStmt, params) diff --git a/keyserver/storage/cosmosdb/one_time_keys_table.go b/keyserver/storage/cosmosdb/one_time_keys_table.go index b6a89d194..78ad5c347 100644 --- a/keyserver/storage/cosmosdb/one_time_keys_table.go +++ b/keyserver/storage/cosmosdb/one_time_keys_table.go @@ -61,6 +61,7 @@ type OneTimeKeyAlgoNumberCosmosData struct { type OneTimeKeyCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -111,7 +112,7 @@ func queryOneTimeKey(s *oneTimeKeysStatements, ctx context.Context, qry string, var response []OneTimeKeyCosmosData var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) var query = cosmosdbapi.GetQuery(qry, params) var _, err = cosmosdbapi.GetClient(s.db.connection).QueryDocuments( @@ -133,7 +134,7 @@ func queryOneTimeKeyAlgoCount(s *oneTimeKeysStatements, ctx context.Context, qry var response []OneTimeKeyAlgoNumberCosmosData var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) // var optionsQry = cosmosdbapi.GetQueryAllPartitionsDocumentsOptions() var query = cosmosdbapi.GetQuery(qry, params) @@ -273,7 +274,7 @@ func (s *oneTimeKeysStatements) InsertOneTimeKeys( } var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) for keyIDWithAlgo, keyJSON := range keys.KeyJSON { @@ -286,7 +287,7 @@ func (s *oneTimeKeysStatements) InsertOneTimeKeys( // UNIQUE (user_id, device_id, key_id, algorithm) docId := fmt.Sprintf("%s_%s_%s_%s", keys.UserID, keys.DeviceID, keyID, algo) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) data := OneTimeKeyCosmos{ Algorithm: algo, @@ -298,6 +299,7 @@ func (s *oneTimeKeysStatements) InsertOneTimeKeys( dbData := &OneTimeKeyCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: now, diff --git a/keyserver/storage/cosmosdb/stale_device_lists.go b/keyserver/storage/cosmosdb/stale_device_lists.go index ea84709c3..5d7a0b521 100644 --- a/keyserver/storage/cosmosdb/stale_device_lists.go +++ b/keyserver/storage/cosmosdb/stale_device_lists.go @@ -46,6 +46,7 @@ type StaleDeviceListCosmos struct { type StaleDeviceListCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -60,9 +61,9 @@ type StaleDeviceListCosmosData struct { // "SELECT user_id FROM keyserver_stale_device_lists WHERE is_stale = $1 AND domain = $2" const selectStaleDeviceListsWithDomainsSQL = "" + - "select * from c where c._cn = @x1 " + - "and c.mx_keyserver_stale_device_list.is_stale = @x2 " + - "and c.mx_keyserver_stale_device_list.domain = @x3 " + "select * from c where c._sid = @x1 and c._cn = @x2 " + + "and c.mx_keyserver_stale_device_list.is_stale = @x3 " + + "and c.mx_keyserver_stale_device_list.domain = @x4 " // "SELECT user_id FROM keyserver_stale_device_lists WHERE is_stale = $1" const selectStaleDeviceListsSQL = "" + @@ -120,10 +121,10 @@ func (s *staleDeviceListsStatements) InsertStaleDeviceList(ctx context.Context, } var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) // user_id TEXT PRIMARY KEY NOT NULL, docId := userID - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) data := StaleDeviceListCosmos{ Domain: string(domain), @@ -133,6 +134,7 @@ func (s *staleDeviceListsStatements) InsertStaleDeviceList(ctx context.Context, dbData := StaleDeviceListCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), @@ -159,8 +161,9 @@ func (s *staleDeviceListsStatements) SelectUserIDsWithStaleDeviceLists(ctx conte // "SELECT user_id FROM keyserver_stale_device_lists WHERE is_stale = $1" // rows, err := s.selectStaleDeviceListsStmt.QueryContext(ctx, true) params := map[string]interface{}{ - "@x1": dbCollectionName, - "@x2": true, + "@x1": s.db.cosmosConfig.TenantName, + "@x2": dbCollectionName, + "@x3": true, } rows, err := queryStaleDeviceList(s, ctx, s.selectStaleDeviceListsWithDomainsStmt, params) diff --git a/mediaapi/storage/cosmosdb/media_repository_table.go b/mediaapi/storage/cosmosdb/media_repository_table.go index 1a012479a..8e9f4e0d3 100644 --- a/mediaapi/storage/cosmosdb/media_repository_table.go +++ b/mediaapi/storage/cosmosdb/media_repository_table.go @@ -68,6 +68,7 @@ type MediaRepositoryCosmos struct { type MediaRepositoryCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -100,7 +101,7 @@ type mediaStatements struct { func queryMediaRepository(s *mediaStatements, ctx context.Context, qry string, params map[string]interface{}) ([]MediaRepositoryCosmosData, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []MediaRepositoryCosmosData var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -157,8 +158,8 @@ func (s *mediaStatements) insertMedia( var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) // CREATE UNIQUE INDEX IF NOT EXISTS mediaapi_media_repository_index ON mediaapi_media_repository (media_id, media_origin); docId := fmt.Sprintf("%s_%s", mediaMetadata.MediaID, mediaMetadata.Origin) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) data := MediaRepositoryCosmos{ MediaID: string(mediaMetadata.MediaID), @@ -173,6 +174,7 @@ func (s *mediaStatements) insertMedia( dbData := &MediaRepositoryCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), @@ -217,8 +219,8 @@ func (s *mediaStatements) selectMedia( var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) // CREATE UNIQUE INDEX IF NOT EXISTS mediaapi_media_repository_index ON mediaapi_media_repository (media_id, media_origin); docId := fmt.Sprintf("%s_%s", mediaMetadata.MediaID, mediaMetadata.Origin) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) // err := s.selectMediaStmt.QueryRowContext( // ctx, mediaMetadata.MediaID, mediaMetadata.Origin, diff --git a/mediaapi/storage/cosmosdb/thumbnail_table.go b/mediaapi/storage/cosmosdb/thumbnail_table.go index ce4e2a5d1..ff7e0c7c8 100644 --- a/mediaapi/storage/cosmosdb/thumbnail_table.go +++ b/mediaapi/storage/cosmosdb/thumbnail_table.go @@ -57,6 +57,7 @@ type ThumbnailCosmos struct { type ThumbnailCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -91,7 +92,7 @@ type thumbnailStatements struct { func queryThumbnail(s *thumbnailStatements, ctx context.Context, qry string, params map[string]interface{}) ([]ThumbnailCosmosData, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []ThumbnailCosmosData var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -155,8 +156,8 @@ func (s *thumbnailStatements) insertThumbnail( thumbnailMetadata.ThumbnailSize.Height, thumbnailMetadata.ThumbnailSize.ResizeMethod, ) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) // _, err := stmt.ExecContext( // ctx, @@ -183,6 +184,7 @@ func (s *thumbnailStatements) insertThumbnail( dbData := &ThumbnailCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), @@ -230,8 +232,8 @@ func (s *thumbnailStatements) selectThumbnail( height, resizeMethod, ) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) // row := sqlutil.TxStmt(txn, s.selectOutboundPeeksStmt).QueryRowContext(ctx, roomID) row, err := getThumbnail(s, ctx, pk, cosmosDocId) diff --git a/roomserver/storage/cosmosdb/event_json_table.go b/roomserver/storage/cosmosdb/event_json_table.go index d7585be56..266bde003 100644 --- a/roomserver/storage/cosmosdb/event_json_table.go +++ b/roomserver/storage/cosmosdb/event_json_table.go @@ -42,6 +42,7 @@ type EventJSONCosmos struct { type EventJSONCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -72,7 +73,7 @@ type eventJSONStatements struct { func queryEventJSON(s *eventJSONStatements, ctx context.Context, qry string, params map[string]interface{}) ([]EventJSONCosmosData, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []EventJSONCosmosData var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -117,8 +118,8 @@ func (s *eventJSONStatements) InsertEventJSON( var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) docId := fmt.Sprintf("%d", eventNID) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) data := EventJSONCosmos{ EventNID: int64(eventNID), @@ -127,6 +128,7 @@ func (s *eventJSONStatements) InsertEventJSON( var dbData = EventJSONCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), diff --git a/roomserver/storage/cosmosdb/event_state_keys_table.go b/roomserver/storage/cosmosdb/event_state_keys_table.go index 35129f865..7b35cb61e 100644 --- a/roomserver/storage/cosmosdb/event_state_keys_table.go +++ b/roomserver/storage/cosmosdb/event_state_keys_table.go @@ -46,6 +46,7 @@ type EventStateKeysCosmos struct { type EventStateKeysCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -91,7 +92,7 @@ type eventStateKeyStatements struct { func queryEventStateKeys(s *eventStateKeyStatements, ctx context.Context, qry string, params map[string]interface{}) ([]EventStateKeysCosmosData, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []EventStateKeysCosmosData var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -152,8 +153,8 @@ func ensureEventStateKeys(s *eventStateKeyStatements, ctx context.Context) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) // event_state_key TEXT NOT NULL UNIQUE docId := "" - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) data := EventStateKeysCosmos{ EventStateKey: "", @@ -163,6 +164,7 @@ func ensureEventStateKeys(s *eventStateKeyStatements, ctx context.Context) { // event_state_key_nid INTEGER PRIMARY KEY AUTOINCREMENT, dbData := EventStateKeysCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), @@ -201,8 +203,8 @@ func (s *eventStateKeyStatements) InsertEventStateKeyNID( var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) // event_state_key TEXT NOT NULL UNIQUE docId := eventStateKey - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) existing, _ := getEventStateKeys(s, ctx, pk, cosmosDocId) @@ -222,6 +224,7 @@ func (s *eventStateKeyStatements) InsertEventStateKeyNID( // event_state_key_nid INTEGER PRIMARY KEY AUTOINCREMENT, dbData = EventStateKeysCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), diff --git a/roomserver/storage/cosmosdb/event_types_table.go b/roomserver/storage/cosmosdb/event_types_table.go index 72ed99419..69f7792c9 100644 --- a/roomserver/storage/cosmosdb/event_types_table.go +++ b/roomserver/storage/cosmosdb/event_types_table.go @@ -46,6 +46,7 @@ import ( type EventTypeCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -119,7 +120,7 @@ func NewCosmosDBEventTypesTable(db *Database) (tables.EventTypes, error) { func queryEventTypes(s *eventTypeStatements, ctx context.Context, qry string, params map[string]interface{}) ([]EventTypeCosmosData, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []EventTypeCosmosData var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -167,11 +168,12 @@ func insertEventTypeCore(s *eventTypeStatements, ctx context.Context, eventType var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) //Unique on eventType - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, eventType.EventType) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, eventType.EventType) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var dbData = EventTypeCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), @@ -248,8 +250,8 @@ func ensureEventTypes(s *eventTypeStatements, ctx context.Context) error { func selectEventTypeCore(s *eventTypeStatements, ctx context.Context, eventType string) (*EventTypeCosmos, error) { var response EventTypeCosmosData var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, eventType) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, eventType) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) err := cosmosdbapi.GetDocumentOrNil( s.db.connection, s.db.cosmosConfig, diff --git a/roomserver/storage/cosmosdb/events_table.go b/roomserver/storage/cosmosdb/events_table.go index 22ae446aa..a5837030f 100644 --- a/roomserver/storage/cosmosdb/events_table.go +++ b/roomserver/storage/cosmosdb/events_table.go @@ -67,6 +67,7 @@ type EventCosmosMaxDepth struct { type EventCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -143,8 +144,8 @@ const bulkSelectEventNIDSQL = "" + // "SELECT COALESCE(MAX(depth) + 1, 0) FROM roomserver_events WHERE event_nid IN ($1)" const selectMaxEventDepthSQL = "" + "select sub.maxinner != null ? sub.maxinner + 1 : 0 as maxdepth from " + - "(select MAX(c.mx_roomserver_event.depth) maxinner from c where c._cn = @x1 " + - " and ARRAY_CONTAINS(@x2, c.mx_roomserver_event.event_nid)) sub" + "(select MAX(c.mx_roomserver_event.depth) maxinner from c where c._sid = @x1 and c._cn = @x2 " + + " and ARRAY_CONTAINS(@x3, c.mx_roomserver_event.event_nid)) sub" // "SELECT event_nid, room_nid FROM roomserver_events WHERE event_nid IN ($1)" const selectRoomNIDsForEventNIDsSQL = "" + @@ -205,7 +206,7 @@ func mapFromEventNIDArray(eventNIDs []types.EventNID) []int64 { func queryEvent(s *eventStatements, ctx context.Context, qry string, params map[string]interface{}) ([]EventCosmosData, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []EventCosmosData var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -341,8 +342,8 @@ func (s *eventStatements) InsertEvent( // event_id TEXT NOT NULL UNIQUE, var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) docId := eventID - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) dbData, errGet := getEvent(s, ctx, pk, cosmosDocId) @@ -368,6 +369,7 @@ func (s *eventStatements) InsertEvent( dbData = &EventCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), @@ -425,9 +427,9 @@ func (s *eventStatements) SelectEvent( // "SELECT event_nid, state_snapshot_nid FROM roomserver_events WHERE event_id = $1" var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) docId := eventID - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) var response, err = getEvent(s, ctx, pk, cosmosDocId) if err != nil { return 0, 0, err @@ -783,8 +785,9 @@ func (s *eventStatements) SelectMaxEventDepth(ctx context.Context, txn *sql.Tx, var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) var response []EventCosmosMaxDepth params := map[string]interface{}{ - "@x1": dbCollectionName, - "@x2": eventNIDs, + "@x1": s.db.cosmosConfig.TenantName, + "@x2": dbCollectionName, + "@x3": eventNIDs, } var optionsQry = cosmosdbapi.GetQueryAllPartitionsDocumentsOptions() diff --git a/roomserver/storage/cosmosdb/invite_table.go b/roomserver/storage/cosmosdb/invite_table.go index 584ec2bed..bdda430f4 100644 --- a/roomserver/storage/cosmosdb/invite_table.go +++ b/roomserver/storage/cosmosdb/invite_table.go @@ -53,6 +53,7 @@ type InviteCosmos struct { type InviteCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -100,7 +101,7 @@ type inviteStatements struct { func queryInvite(s *inviteStatements, ctx context.Context, qry string, params map[string]interface{}) ([]InviteCosmosData, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []InviteCosmosData var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -186,11 +187,12 @@ func (s *inviteStatements) InsertInviteEvent( // invite_event_id TEXT PRIMARY KEY, docId := inviteEventID - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var dbData = InviteCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), diff --git a/roomserver/storage/cosmosdb/membership_table.go b/roomserver/storage/cosmosdb/membership_table.go index d922f02a5..24005fa50 100644 --- a/roomserver/storage/cosmosdb/membership_table.go +++ b/roomserver/storage/cosmosdb/membership_table.go @@ -54,6 +54,7 @@ type MembershipCosmos struct { type MembershipCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -177,7 +178,7 @@ type membershipStatements struct { func queryMembership(s *membershipStatements, ctx context.Context, qry string, params map[string]interface{}) ([]MembershipCosmosData, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []MembershipCosmosData var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -262,8 +263,8 @@ func (s *membershipStatements) InsertMembership( // UNIQUE (room_nid, target_nid) docId := fmt.Sprintf("%d_%d", roomNID, targetUserNID) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) data := MembershipCosmos{ EventNID: 0, @@ -277,6 +278,7 @@ func (s *membershipStatements) InsertMembership( var dbData = MembershipCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), @@ -305,8 +307,8 @@ func (s *membershipStatements) SelectMembershipForUpdate( var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) docId := fmt.Sprintf("%d_%d", roomNID, targetUserNID) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) response, err := getMembership(s, ctx, pk, cosmosDocId) if response != nil { membership = tables.MembershipState(response.Membership.MembershipNID) @@ -324,8 +326,8 @@ func (s *membershipStatements) SelectMembershipFromRoomAndTarget( var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) docId := fmt.Sprintf("%d_%d", roomNID, targetUserNID) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) response, err := getMembership(s, ctx, pk, cosmosDocId) if response != nil { eventNID = types.EventNID(response.Membership.EventNID) @@ -412,8 +414,8 @@ func (s *membershipStatements) UpdateMembership( var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) docId := fmt.Sprintf("%d_%d", roomNID, targetUserNID) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) dbData, err := getMembership(s, ctx, pk, cosmosDocId) if err != nil { @@ -467,7 +469,7 @@ func (s *membershipStatements) SelectJoinedUsersSetForRooms(ctx context.Context, "@x1": dbCollectionName, "@x2": roomNIDs, } - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []MembershipJoinedCountCosmosData var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -506,7 +508,7 @@ func (s *membershipStatements) SelectKnownUsers(ctx context.Context, userID type "@x4": limit, } - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var responseDistinctRoom []MembershipCosmos var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -600,8 +602,8 @@ func (s *membershipStatements) UpdateForgetMembership( var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) docId := fmt.Sprintf("%d_%d", roomNID, targetUserNID) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) dbData, err := getMembership(s, ctx, pk, cosmosDocId) if err != nil { diff --git a/roomserver/storage/cosmosdb/previous_events_table.go b/roomserver/storage/cosmosdb/previous_events_table.go index 0e92cf99e..a9fd1340d 100644 --- a/roomserver/storage/cosmosdb/previous_events_table.go +++ b/roomserver/storage/cosmosdb/previous_events_table.go @@ -53,6 +53,7 @@ type PreviousEventCosmos struct { type PreviousEventCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -136,8 +137,8 @@ func (s *previousEventStatements) InsertPreviousEvent( // TODO: Check value // docId := fmt.Sprintf("%s_%s", previousEventID, previousEventReferenceSHA256) docId := previousEventID - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) // SELECT 1 FROM roomserver_previous_events // WHERE previous_event_id = $1 AND previous_reference_sha256 = $2 @@ -160,6 +161,7 @@ func (s *previousEventStatements) InsertPreviousEvent( dbData = PreviousEventCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), @@ -208,8 +210,8 @@ func (s *previousEventStatements) SelectPreviousEventExists( // TODO: Check value // docId := fmt.Sprintf("%s_%s", previousEventID, previousEventReferenceSHA256) docId := eventID - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, string(docId)) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, string(docId)) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) // SELECT 1 FROM roomserver_previous_events // WHERE previous_event_id = $1 AND previous_reference_sha256 = $2 diff --git a/roomserver/storage/cosmosdb/published_table.go b/roomserver/storage/cosmosdb/published_table.go index 731044d2e..8aebc3976 100644 --- a/roomserver/storage/cosmosdb/published_table.go +++ b/roomserver/storage/cosmosdb/published_table.go @@ -43,6 +43,7 @@ type PublishCosmos struct { type PublishCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -71,7 +72,7 @@ type publishedStatements struct { func queryPublish(s *publishedStatements, ctx context.Context, qry string, params map[string]interface{}) ([]PublishCosmosData, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []PublishCosmosData var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -133,8 +134,8 @@ func (s *publishedStatements) UpsertRoomPublished( var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) // room_id TEXT NOT NULL PRIMARY KEY, docId := roomID - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) data := PublishCosmos{ RoomID: roomID, @@ -143,6 +144,7 @@ func (s *publishedStatements) UpsertRoomPublished( var dbData = PublishCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), @@ -169,8 +171,8 @@ func (s *publishedStatements) SelectPublishedFromRoomID( var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) // room_id TEXT NOT NULL PRIMARY KEY, docId := roomID - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) response, err := getPublish(s, ctx, pk, cosmosDocId) if err != nil { diff --git a/roomserver/storage/cosmosdb/redactions_table.go b/roomserver/storage/cosmosdb/redactions_table.go index 1037ad1a1..59e7a1d06 100644 --- a/roomserver/storage/cosmosdb/redactions_table.go +++ b/roomserver/storage/cosmosdb/redactions_table.go @@ -47,6 +47,7 @@ type RedactionCosmos struct { type RedactionCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -81,7 +82,7 @@ type redactionStatements struct { func queryRedaction(s *redactionStatements, ctx context.Context, qry string, params map[string]interface{}) ([]RedactionCosmosData, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []RedactionCosmosData var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -154,8 +155,8 @@ func (s *redactionStatements) InsertRedaction( var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) // redaction_event_id TEXT PRIMARY KEY, docId := info.RedactionEventID - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) data := RedactionCosmos{ RedactionEventID: info.RedactionEventID, @@ -165,6 +166,7 @@ func (s *redactionStatements) InsertRedaction( var dbData = RedactionCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), @@ -199,8 +201,8 @@ func (s *redactionStatements) SelectRedactionInfoByRedactionEventID( var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) // redaction_event_id TEXT PRIMARY KEY, docId := redactionEventID - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) response, err := getRedaction(s, ctx, pk, cosmosDocId) if err != nil { @@ -263,8 +265,8 @@ func (s *redactionStatements) MarkRedactionValidated( var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) // redaction_event_id TEXT PRIMARY KEY, docId := redactionEventID - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) response, err := getRedaction(s, ctx, pk, cosmosDocId) if err != nil { diff --git a/roomserver/storage/cosmosdb/room_aliases_table.go b/roomserver/storage/cosmosdb/room_aliases_table.go index 800e40f87..65e084e7b 100644 --- a/roomserver/storage/cosmosdb/room_aliases_table.go +++ b/roomserver/storage/cosmosdb/room_aliases_table.go @@ -43,6 +43,7 @@ type RoomAliasCosmos struct { type RoomAliasCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -82,7 +83,7 @@ type roomAliasesStatements struct { func queryRoomAlias(s *roomAliasesStatements, ctx context.Context, qry string, params map[string]interface{}) ([]RoomAliasCosmosData, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []RoomAliasCosmosData var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -152,11 +153,12 @@ func (s *roomAliasesStatements) InsertRoomAlias( // alias TEXT NOT NULL PRIMARY KEY, docId := alias - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var dbData = RoomAliasCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), @@ -184,8 +186,8 @@ func (s *roomAliasesStatements) SelectRoomIDFromAlias( // alias TEXT NOT NULL PRIMARY KEY, docId := alias - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) response, err := getRoomAlias(s, ctx, pk, cosmosDocId) if err != nil { @@ -235,8 +237,8 @@ func (s *roomAliasesStatements) SelectCreatorIDFromAlias( // alias TEXT NOT NULL PRIMARY KEY, docId := alias - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) response, err := getRoomAlias(s, ctx, pk, cosmosDocId) if err != nil { @@ -258,8 +260,8 @@ func (s *roomAliasesStatements) DeleteRoomAlias( var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) docId := alias - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var options = cosmosdbapi.GetDeleteDocumentOptions(pk) var _, err = cosmosdbapi.GetClient(s.db.connection).DeleteDocument( ctx, diff --git a/roomserver/storage/cosmosdb/rooms_table.go b/roomserver/storage/cosmosdb/rooms_table.go index a9f50e7dc..bfb672561 100644 --- a/roomserver/storage/cosmosdb/rooms_table.go +++ b/roomserver/storage/cosmosdb/rooms_table.go @@ -44,6 +44,7 @@ import ( type RoomCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -146,7 +147,7 @@ func mapToRoomEventNIDArray(eventNIDs []int64) []types.EventNID { func queryRoom(s *roomStatements, ctx context.Context, qry string, params map[string]interface{}) ([]RoomCosmosData, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []RoomCosmosData var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -224,8 +225,8 @@ func (s *roomStatements) SelectRoomInfo(ctx context.Context, roomID string) (*ty var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) // room_id TEXT NOT NULL UNIQUE, docId := roomID - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) room, err := getRoom(s, ctx, pk, cosmosDocId) if err != nil { @@ -253,8 +254,8 @@ func (s *roomStatements) InsertRoomNID( // ON CONFLICT DO NOTHING; // room_id TEXT NOT NULL UNIQUE, docId := roomID - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) dbData, errGet := getRoom(s, ctx, pk, cosmosDocId) @@ -273,6 +274,7 @@ func (s *roomStatements) InsertRoomNID( dbData = &RoomCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), @@ -307,8 +309,8 @@ func (s *roomStatements) SelectRoomNID( var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) // room_id TEXT NOT NULL UNIQUE, docId := roomID - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) room, err := getRoom(s, ctx, pk, cosmosDocId) if err != nil { diff --git a/roomserver/storage/cosmosdb/state_block_table.go b/roomserver/storage/cosmosdb/state_block_table.go index f8cb9f317..b70e93e7e 100644 --- a/roomserver/storage/cosmosdb/state_block_table.go +++ b/roomserver/storage/cosmosdb/state_block_table.go @@ -53,6 +53,7 @@ type StateBlockCosmosMaxNID struct { type StateBlockCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -67,7 +68,7 @@ type StateBlockCosmosData struct { const selectNextStateBlockNIDSQL = "" + "select sub.maxinner != null ? sub.maxinner + 1 : 1 as maxstateblocknid " + "from " + - "(select MAX(c.mx_roomserver_state_block.state_block_nid) maxinner from c where c._cn = @x1) as sub" + "(select MAX(c.mx_roomserver_state_block.state_block_nid) maxinner from c where c._sid = @x1 and c._cn = @x2) as sub" // Bulk state lookup by numeric state block ID. // Sort by the state_block_nid, event_type_nid, event_state_key_nid @@ -120,7 +121,7 @@ type stateBlockStatements struct { func queryStateBlock(s *stateBlockStatements, ctx context.Context, qry string, params map[string]interface{}) ([]StateBlockCosmosData, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []StateBlockCosmosData var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -169,11 +170,12 @@ func inertStateBlockCore(s *stateBlockStatements, ctx context.Context, stateBloc // UNIQUE (state_block_nid, event_type_nid, event_state_key_nid) docId := fmt.Sprintf("%d_%d_%d", data.StateBlockNID, data.EventTypeNID, data.EventStateKeyNID) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var dbData = StateBlockCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), @@ -196,7 +198,8 @@ func getNextStateBlockNID(s *stateBlockStatements, ctx context.Context) (int64, var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) var stateBlockNext []StateBlockCosmosMaxNID params := map[string]interface{}{ - "@x1": dbCollectionName, + "@x1": s.db.cosmosConfig.TenantName, + "@x2": dbCollectionName, } var optionsQry = cosmosdbapi.GetQueryAllPartitionsDocumentsOptions() diff --git a/roomserver/storage/cosmosdb/state_snapshot_table.go b/roomserver/storage/cosmosdb/state_snapshot_table.go index 48dd89a51..61ee0e8ba 100644 --- a/roomserver/storage/cosmosdb/state_snapshot_table.go +++ b/roomserver/storage/cosmosdb/state_snapshot_table.go @@ -43,6 +43,7 @@ type StateSnapshotCosmos struct { type StateSnapshotCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -120,11 +121,12 @@ func (s *stateSnapshotStatements) InsertState( // state_snapshot_nid INTEGER PRIMARY KEY AUTOINCREMENT, docId := fmt.Sprintf("%d", stateSnapshotNIDSeq) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var dbData = StateSnapshotCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), @@ -154,7 +156,7 @@ func (s *stateSnapshotStatements) BulkSelectStateBlockNIDs( // "SELECT state_snapshot_nid, state_block_nids FROM roomserver_state_snapshots" + // " WHERE state_snapshot_nid IN ($1) ORDER BY state_snapshot_nid ASC" var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []StateSnapshotCosmosData params := map[string]interface{}{ "@x1": dbCollectionName, diff --git a/roomserver/storage/cosmosdb/transactions_table.go b/roomserver/storage/cosmosdb/transactions_table.go index 3c3f20973..08d99789e 100644 --- a/roomserver/storage/cosmosdb/transactions_table.go +++ b/roomserver/storage/cosmosdb/transactions_table.go @@ -46,6 +46,7 @@ type TransactionCosmos struct { type TransactionCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -119,11 +120,12 @@ func (s *transactionStatements) InsertTransaction( // PRIMARY KEY (transaction_id, session_id, user_id) docId := fmt.Sprintf("%s_%d_%s", transactionID, sessionID, userID) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var dbData = TransactionCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), @@ -154,8 +156,8 @@ func (s *transactionStatements) SelectTransactionEventID( var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) // PRIMARY KEY (transaction_id, session_id, user_id) docId := fmt.Sprintf("%s_%d_%s", transactionID, sessionID, userID) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) response, err := getTransaction(s, ctx, pk, cosmosDocId) diff --git a/signingkeyserver/storage/cosmosdb/server_key_table.go b/signingkeyserver/storage/cosmosdb/server_key_table.go index 79bb4560c..c2bec1199 100644 --- a/signingkeyserver/storage/cosmosdb/server_key_table.go +++ b/signingkeyserver/storage/cosmosdb/server_key_table.go @@ -64,6 +64,7 @@ type ServerKeyCosmos struct { type ServerKeyCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -94,7 +95,7 @@ type serverKeyStatements struct { func queryServerKey(s *serverKeyStatements, ctx context.Context, qry string, params map[string]interface{}) ([]ServerKeyCosmosData, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []ServerKeyCosmosData var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -204,8 +205,8 @@ func (s *serverKeyStatements) upsertServerKeys( var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) // UNIQUE (server_name, server_key_id) docId := fmt.Sprintf("%s_%s", string(request.ServerName), string(request.KeyID)) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) data := ServerKeyCosmos{ ServerName: string(request.ServerName), @@ -218,6 +219,7 @@ func (s *serverKeyStatements) upsertServerKeys( dbData := &ServerKeyCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), diff --git a/syncapi/storage/cosmosdb/account_data_table.go b/syncapi/storage/cosmosdb/account_data_table.go index 1dc10dcfc..f916497cb 100644 --- a/syncapi/storage/cosmosdb/account_data_table.go +++ b/syncapi/storage/cosmosdb/account_data_table.go @@ -54,6 +54,7 @@ type AccountDataTypeNumberCosmosData struct { type AccountDataTypeCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -90,7 +91,7 @@ type accountDataStatements struct { func queryAccountDataType(s *accountDataStatements, ctx context.Context, qry string, params map[string]interface{}) ([]AccountDataTypeCosmosData, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []AccountDataTypeCosmosData var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -111,7 +112,7 @@ func queryAccountDataType(s *accountDataStatements, ctx context.Context, qry str func queryAccountDataTypeNumber(s *accountDataStatements, ctx context.Context, qry string, params map[string]interface{}) ([]AccountDataTypeNumberCosmosData, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []AccountDataTypeNumberCosmosData var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -159,8 +160,8 @@ func (s *accountDataStatements) InsertAccountData( var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) // UNIQUE (user_id, room_id, type) docId := fmt.Sprintf("%s_%s_%s", userID, roomID, dataType) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) data := AccountDataTypeCosmos{ ID: int64(pos), @@ -171,6 +172,7 @@ func (s *accountDataStatements) InsertAccountData( dbData := &AccountDataTypeCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), diff --git a/syncapi/storage/cosmosdb/backwards_extremities_table.go b/syncapi/storage/cosmosdb/backwards_extremities_table.go index df5ad830d..86fa79716 100644 --- a/syncapi/storage/cosmosdb/backwards_extremities_table.go +++ b/syncapi/storage/cosmosdb/backwards_extremities_table.go @@ -47,6 +47,7 @@ type BackwardExtremityCosmos struct { type BackwardExtremityCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -85,7 +86,7 @@ type backwardExtremitiesStatements struct { func queryBackwardExtremity(s *backwardExtremitiesStatements, ctx context.Context, qry string, params map[string]interface{}) ([]BackwardExtremityCosmosData, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []BackwardExtremityCosmosData var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -143,8 +144,8 @@ func (s *backwardExtremitiesStatements) InsertsBackwardExtremity( var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) // PRIMARY KEY(room_id, event_id, prev_event_id) docId := fmt.Sprintf("%s_%s_%s", roomID, eventID, prevEventID) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) data := BackwardExtremityCosmos{ EventID: eventID, @@ -154,6 +155,7 @@ func (s *backwardExtremitiesStatements) InsertsBackwardExtremity( dbData := &BackwardExtremityCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), diff --git a/syncapi/storage/cosmosdb/current_room_state_table.go b/syncapi/storage/cosmosdb/current_room_state_table.go index 2cba5a078..2ea5ee040 100644 --- a/syncapi/storage/cosmosdb/current_room_state_table.go +++ b/syncapi/storage/cosmosdb/current_room_state_table.go @@ -68,6 +68,7 @@ type CurrentRoomStateCosmos struct { type CurrentRoomStateCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -139,7 +140,7 @@ type currentRoomStateStatements struct { func queryCurrentRoomState(s *currentRoomStateStatements, ctx context.Context, qry string, params map[string]interface{}) ([]CurrentRoomStateCosmosData, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []CurrentRoomStateCosmosData var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -160,7 +161,7 @@ func queryCurrentRoomState(s *currentRoomStateStatements, ctx context.Context, q func queryCurrentRoomStateDistinct(s *currentRoomStateStatements, ctx context.Context, qry string, params map[string]interface{}) ([]CurrentRoomStateCosmos, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []CurrentRoomStateCosmos var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -415,8 +416,8 @@ func (s *currentRoomStateStatements) UpsertRoomState( var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) // " ON CONFLICT (room_id, type, state_key)" + docId := fmt.Sprintf("%s_%s_%s", event.RoomID(), event.Type(), *event.StateKey()) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) membershipData := "" if membership != nil { @@ -437,6 +438,7 @@ func (s *currentRoomStateStatements) UpsertRoomState( dbData := &CurrentRoomStateCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), @@ -570,10 +572,10 @@ func (s *currentRoomStateStatements) SelectStateEvent( var res []byte var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) // " ON CONFLICT (room_id, type, state_key)" + docId := fmt.Sprintf("%s_%s_%s", roomID, evType, stateKey) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) var response, err = getEvent(s, ctx, pk, cosmosDocId) // err := stmt.QueryRowContext(ctx, roomID, evType, stateKey).Scan(&res) diff --git a/syncapi/storage/cosmosdb/filter_table.go b/syncapi/storage/cosmosdb/filter_table.go index f73d03587..5d67a3992 100644 --- a/syncapi/storage/cosmosdb/filter_table.go +++ b/syncapi/storage/cosmosdb/filter_table.go @@ -51,6 +51,7 @@ type FilterCosmos struct { type FilterCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -79,7 +80,7 @@ type filterStatements struct { func queryFilter(s *filterStatements, ctx context.Context, qry string, params map[string]interface{}) ([]FilterCosmosData, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []FilterCosmosData var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -142,8 +143,8 @@ func (s *filterStatements) SelectFilter( var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) // UNIQUE (id, localpart) docId := fmt.Sprintf("%s_%s", localpart, filterID) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response, err = getFilter(s, ctx, pk, cosmosDocId) if err != nil { @@ -230,11 +231,12 @@ func (s *filterStatements) InsertFilter( // UNIQUE (id, localpart) docId := fmt.Sprintf("%s_%d", localpart, seqID) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var dbData = FilterCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), diff --git a/syncapi/storage/cosmosdb/invites_table.go b/syncapi/storage/cosmosdb/invites_table.go index 6b173d590..656a5f878 100644 --- a/syncapi/storage/cosmosdb/invites_table.go +++ b/syncapi/storage/cosmosdb/invites_table.go @@ -60,6 +60,7 @@ type InviteEventCosmosMaxNumber struct { type InviteEventCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -102,7 +103,7 @@ type inviteEventsStatements struct { func queryInviteEvent(s *inviteEventsStatements, ctx context.Context, qry string, params map[string]interface{}) ([]InviteEventCosmosData, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []InviteEventCosmosData var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -123,7 +124,7 @@ func queryInviteEvent(s *inviteEventsStatements, ctx context.Context, qry string func queryInviteEventMaxNumber(s *inviteEventsStatements, ctx context.Context, qry string, params map[string]interface{}) ([]InviteEventCosmosMaxNumber, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []InviteEventCosmosMaxNumber var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -221,13 +222,14 @@ func (s *inviteEventsStatements) InsertInviteEvent( } var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) // id INTEGER PRIMARY KEY, docId := fmt.Sprintf("%d", streamPos) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) var dbData = InviteEventCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), diff --git a/syncapi/storage/cosmosdb/memberships_table.go b/syncapi/storage/cosmosdb/memberships_table.go index 104c3c365..f7ff07432 100644 --- a/syncapi/storage/cosmosdb/memberships_table.go +++ b/syncapi/storage/cosmosdb/memberships_table.go @@ -64,6 +64,7 @@ type MembershipCosmos struct { type MembershipCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -95,7 +96,7 @@ type membershipsStatements struct { func queryMembership(s *membershipsStatements, ctx context.Context, qry string, params map[string]interface{}) ([]MembershipCosmosData, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []MembershipCosmosData var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -156,13 +157,14 @@ func (s *membershipsStatements) UpsertMembership( } var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) // UNIQUE (room_id, user_id, membership) docId := fmt.Sprintf("%s_%s_%s", event.RoomID(), *event.StateKey(), membership) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) var dbData = MembershipCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), diff --git a/syncapi/storage/cosmosdb/output_room_events_table.go b/syncapi/storage/cosmosdb/output_room_events_table.go index 2bd294bba..88bd61d19 100644 --- a/syncapi/storage/cosmosdb/output_room_events_table.go +++ b/syncapi/storage/cosmosdb/output_room_events_table.go @@ -75,6 +75,7 @@ type OutputRoomEventCosmosMaxNumber struct { type OutputRoomEventCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -159,7 +160,7 @@ type outputRoomEventsStatements struct { func queryOutputRoomEvent(s *outputRoomEventsStatements, ctx context.Context, qry string, params map[string]interface{}) ([]OutputRoomEventCosmosData, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []OutputRoomEventCosmosData var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -180,7 +181,7 @@ func queryOutputRoomEvent(s *outputRoomEventsStatements, ctx context.Context, qr func queryOutputRoomEventNumber(s *outputRoomEventsStatements, ctx context.Context, qry string, params map[string]interface{}) ([]OutputRoomEventCosmosMaxNumber, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []OutputRoomEventCosmosMaxNumber var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -488,13 +489,14 @@ func (s *outputRoomEventsStatements) InsertEvent( } var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) // id INTEGER PRIMARY KEY, docId := fmt.Sprintf("%d", streamPos) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) var dbData = OutputRoomEventCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), diff --git a/syncapi/storage/cosmosdb/output_room_events_topology_table.go b/syncapi/storage/cosmosdb/output_room_events_topology_table.go index 571de39f1..89c4576c9 100644 --- a/syncapi/storage/cosmosdb/output_room_events_topology_table.go +++ b/syncapi/storage/cosmosdb/output_room_events_topology_table.go @@ -50,6 +50,7 @@ type OutputRoomEventTopologyCosmos struct { type OutputRoomEventTopologyCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -133,7 +134,7 @@ type outputRoomEventsTopologyStatements struct { func queryOutputRoomEventTopology(s *outputRoomEventsTopologyStatements, ctx context.Context, qry string, params map[string]interface{}) ([]OutputRoomEventTopologyCosmosData, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []OutputRoomEventTopologyCosmosData var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -194,8 +195,8 @@ func (s *outputRoomEventsTopologyStatements) InsertEventInTopology( var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) // UNIQUE(topological_position, room_id, stream_position) docId := fmt.Sprintf("%d_%s_%d", event.Depth(), event.RoomID(), pos) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) data := OutputRoomEventTopologyCosmos{ EventID: event.EventID(), @@ -206,6 +207,7 @@ func (s *outputRoomEventsTopologyStatements) InsertEventInTopology( dbData := &OutputRoomEventTopologyCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), diff --git a/syncapi/storage/cosmosdb/peeks_table.go b/syncapi/storage/cosmosdb/peeks_table.go index 95c661696..3edb48b8c 100644 --- a/syncapi/storage/cosmosdb/peeks_table.go +++ b/syncapi/storage/cosmosdb/peeks_table.go @@ -60,6 +60,7 @@ type PeekCosmosMaxNumber struct { type PeekCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -122,7 +123,7 @@ type peekStatements struct { func queryPeek(s *peekStatements, ctx context.Context, qry string, params map[string]interface{}) ([]PeekCosmosData, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []PeekCosmosData var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -143,7 +144,7 @@ func queryPeek(s *peekStatements, ctx context.Context, qry string, params map[st func queryPeekMaxNumber(s *peekStatements, ctx context.Context, qry string, params map[string]interface{}) ([]PeekCosmosMaxNumber, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []PeekCosmosMaxNumber var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -204,8 +205,8 @@ func (s *peekStatements) InsertPeek( var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) // UNIQUE(room_id, user_id, device_id) docId := fmt.Sprintf("%d_%s_%d", roomID, userID, deviceID) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) data := PeekCosmos{ ID: int64(streamPos), @@ -216,6 +217,7 @@ func (s *peekStatements) InsertPeek( dbData := &PeekCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, // nowMilli := time.Now().UnixNano() / int64(time.Millisecond) diff --git a/syncapi/storage/cosmosdb/receipt_table.go b/syncapi/storage/cosmosdb/receipt_table.go index 5fb63f2dc..beedfb906 100644 --- a/syncapi/storage/cosmosdb/receipt_table.go +++ b/syncapi/storage/cosmosdb/receipt_table.go @@ -58,6 +58,7 @@ type ReceiptCosmosMaxNumber struct { type ReceiptCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -94,7 +95,7 @@ type receiptStatements struct { func queryReceipt(s *receiptStatements, ctx context.Context, qry string, params map[string]interface{}) ([]ReceiptCosmosData, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []ReceiptCosmosData var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -115,7 +116,7 @@ func queryReceipt(s *receiptStatements, ctx context.Context, qry string, params func queryReceiptNumber(s *receiptStatements, ctx context.Context, qry string, params map[string]interface{}) ([]ReceiptCosmosMaxNumber, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []ReceiptCosmosMaxNumber var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -174,6 +175,7 @@ func (r *receiptStatements) UpsertReceipt(ctx context.Context, txn *sql.Tx, room var dbData = ReceiptCosmosData{ Id: cosmosDocId, + Tn: r.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), diff --git a/syncapi/storage/cosmosdb/send_to_device_table.go b/syncapi/storage/cosmosdb/send_to_device_table.go index 8cc3f24b8..933673e39 100644 --- a/syncapi/storage/cosmosdb/send_to_device_table.go +++ b/syncapi/storage/cosmosdb/send_to_device_table.go @@ -56,6 +56,7 @@ type SendToDeviceCosmosMaxNumber struct { type SendToDeviceCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -99,7 +100,7 @@ type sendToDeviceStatements struct { func querySendToDevice(s *sendToDeviceStatements, ctx context.Context, qry string, params map[string]interface{}) ([]SendToDeviceCosmosData, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []SendToDeviceCosmosData var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -120,7 +121,7 @@ func querySendToDevice(s *sendToDeviceStatements, ctx context.Context, qry strin func querySendToDeviceNumber(s *sendToDeviceStatements, ctx context.Context, qry string, params map[string]interface{}) ([]SendToDeviceCosmosMaxNumber, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []SendToDeviceCosmosMaxNumber var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -178,13 +179,14 @@ func (s *sendToDeviceStatements) InsertSendToDeviceMessage( } var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) // NO CONSTRAINT docId := fmt.Sprintf("%d", pos) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) var dbData = SendToDeviceCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), diff --git a/userapi/storage/accounts/cosmosdb/account_data_table.go b/userapi/storage/accounts/cosmosdb/account_data_table.go index c690d84b3..0e303cea5 100644 --- a/userapi/storage/accounts/cosmosdb/account_data_table.go +++ b/userapi/storage/accounts/cosmosdb/account_data_table.go @@ -42,6 +42,7 @@ import ( type AccountDataCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -73,7 +74,7 @@ func (s *accountDataStatements) prepare(db *Database) (err error) { func queryAccountData(s *accountDataStatements, ctx context.Context, qry string, params map[string]interface{}) ([]AccountDataCosmosData, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []AccountDataCosmosData var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -114,11 +115,12 @@ func (s *accountDataStatements) insertAccountData( } docId := id - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var dbData = AccountDataCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), diff --git a/userapi/storage/accounts/cosmosdb/accounts_table.go b/userapi/storage/accounts/cosmosdb/accounts_table.go index 9e0669442..21aa52423 100644 --- a/userapi/storage/accounts/cosmosdb/accounts_table.go +++ b/userapi/storage/accounts/cosmosdb/accounts_table.go @@ -59,6 +59,7 @@ type AccountCosmos struct { type AccountCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -90,7 +91,7 @@ func (s *accountsStatements) prepare(db *Database, server gomatrixserverlib.Serv func queryAccount(s *accountsStatements, ctx context.Context, qry string, params map[string]interface{}) ([]AccountCosmosData, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []AccountCosmosData var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -182,11 +183,12 @@ func (s *accountsStatements) insertAccount( var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.db.accounts.tableName) docId := result.Localpart - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var dbData = AccountCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), @@ -215,8 +217,8 @@ func (s *accountsStatements) updatePassword( // "UPDATE account_accounts SET password_hash = $1 WHERE localpart = $2" var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.db.accounts.tableName) docId := localpart - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response, exGet = getAccount(s, ctx, pk, cosmosDocId) if exGet != nil { @@ -240,8 +242,8 @@ func (s *accountsStatements) deactivateAccount( var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.db.accounts.tableName) docId := localpart - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response, exGet = getAccount(s, ctx, pk, cosmosDocId) if exGet != nil { @@ -320,7 +322,7 @@ func (s *accountsStatements) selectNewNumericLocalpart( // "SELECT COUNT(localpart) FROM account_accounts" var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.db.accounts.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []AccountCosmosUserCount params := map[string]interface{}{ "@x1": dbCollectionName, diff --git a/userapi/storage/accounts/cosmosdb/openid_table.go b/userapi/storage/accounts/cosmosdb/openid_table.go index c0cb65ec5..c962a61f3 100644 --- a/userapi/storage/accounts/cosmosdb/openid_table.go +++ b/userapi/storage/accounts/cosmosdb/openid_table.go @@ -32,6 +32,7 @@ type OpenIDTokenCosmos struct { type OpenIdTokenCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -64,7 +65,7 @@ func mapToToken(api api.OpenIDToken) OpenIDTokenCosmos { func queryOpenIdToken(s *tokenStatements, ctx context.Context, qry string, params map[string]interface{}) ([]OpenIdTokenCosmosData, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []OpenIdTokenCosmosData var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -109,11 +110,12 @@ func (s *tokenStatements) insertToken( var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.db.openIDTokens.tableName) docId := result.Token - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var dbData = OpenIdTokenCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), diff --git a/userapi/storage/accounts/cosmosdb/profile_table.go b/userapi/storage/accounts/cosmosdb/profile_table.go index eb8d4efc3..28f1b0a22 100644 --- a/userapi/storage/accounts/cosmosdb/profile_table.go +++ b/userapi/storage/accounts/cosmosdb/profile_table.go @@ -48,6 +48,7 @@ type ProfileCosmos struct { type ProfileCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -90,7 +91,7 @@ func (s *profilesStatements) prepare(db *Database) (err error) { func queryProfile(s *profilesStatements, ctx context.Context, qry string, params map[string]interface{}) ([]ProfileCosmosData, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []ProfileCosmosData var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -150,11 +151,12 @@ func (s *profilesStatements) insertProfile( var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.db.profiles.tableName) docId := localpart - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var dbData = ProfileCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), @@ -208,8 +210,8 @@ func (s *profilesStatements) setAvatarURL( // "UPDATE account_profiles SET avatar_url = $1 WHERE localpart = $2" var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.db.profiles.tableName) docId := localpart - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response, exGet = getProfile(s, ctx, pk, cosmosDocId) if exGet != nil { @@ -232,8 +234,8 @@ func (s *profilesStatements) setDisplayName( // "UPDATE account_profiles SET display_name = $1 WHERE localpart = $2" var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.db.profiles.tableName) docId := localpart - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response, exGet = getProfile(s, ctx, pk, cosmosDocId) if exGet != nil { return exGet diff --git a/userapi/storage/accounts/cosmosdb/threepid_table.go b/userapi/storage/accounts/cosmosdb/threepid_table.go index 358b370e6..6e8fabb64 100644 --- a/userapi/storage/accounts/cosmosdb/threepid_table.go +++ b/userapi/storage/accounts/cosmosdb/threepid_table.go @@ -46,6 +46,7 @@ type ThreePIDCosmos struct { type ThreePIDCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -71,7 +72,7 @@ func (s *threepidStatements) prepare(db *Database) (err error) { func queryThreePID(s *threepidStatements, ctx context.Context, qry string, params map[string]interface{}) ([]ThreePIDCosmosData, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []ThreePIDCosmosData var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -159,10 +160,11 @@ func (s *threepidStatements) insertThreePID( var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.db.accounts.tableName) docId := fmt.Sprintf("%s_%s", threepid, medium) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var dbData = ThreePIDCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), @@ -189,8 +191,8 @@ func (s *threepidStatements) deleteThreePID( // "DELETE FROM account_threepid WHERE threepid = $1 AND medium = $2" var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.db.accounts.tableName) docId := fmt.Sprintf("%s_%s", threepid, medium) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var options = cosmosdbapi.GetDeleteDocumentOptions(pk) _, err = cosmosdbapi.GetClient(s.db.connection).DeleteDocument( ctx, diff --git a/userapi/storage/devices/cosmosdb/devices_table.go b/userapi/storage/devices/cosmosdb/devices_table.go index 1581064ae..60e247cbd 100644 --- a/userapi/storage/devices/cosmosdb/devices_table.go +++ b/userapi/storage/devices/cosmosdb/devices_table.go @@ -72,6 +72,7 @@ type DeviceCosmos struct { type DeviceCosmosData struct { Id string `json:"id"` Pk string `json:"_pk"` + Tn string `json:"_sid"` Cn string `json:"_cn"` ETag string `json:"_etag"` Timestamp int64 `json:"_ts"` @@ -124,7 +125,7 @@ func mapTodevice(api api.Device, s *devicesStatements) DeviceCosmos { func queryDevice(s *devicesStatements, ctx context.Context, qry string, params map[string]interface{}) ([]DeviceCosmosData, error) { var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []DeviceCosmosData var optionsQry = cosmosdbapi.GetQueryDocumentsOptions(pk) @@ -196,7 +197,7 @@ func (s *devicesStatements) insertDevice( // "SELECT COUNT(access_token) FROM device_devices" // HACK: Do we need a Cosmos Table for the sequence? var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.db.devices.tableName) - var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + var pk = cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response []DeviceCosmosSessionCount params := map[string]interface{}{ "@x1": dbCollectionName, @@ -234,10 +235,11 @@ func (s *devicesStatements) insertDevice( // UNIQUE (localpart, device_id) // HACK: check for duplicate PK as we are using the UNIQUE key for the DocId docId := fmt.Sprintf("%s_%s", localpart, id) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) var dbData = DeviceCosmosData{ Id: cosmosDocId, + Tn: s.db.cosmosConfig.TenantName, Cn: dbCollectionName, Pk: pk, Timestamp: time.Now().Unix(), @@ -266,8 +268,8 @@ func (s *devicesStatements) deleteDevice( // "DELETE FROM device_devices WHERE device_id = $1 AND localpart = $2" var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.db.devices.tableName) docId := fmt.Sprintf("%s_%s", localpart, id) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var options = cosmosdbapi.GetDeleteDocumentOptions(pk) var _, err = cosmosdbapi.GetClient(s.db.connection).DeleteDocument( ctx, @@ -336,8 +338,8 @@ func (s *devicesStatements) updateDeviceName( // "UPDATE device_devices SET display_name = $1 WHERE localpart = $2 AND device_id = $3" var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.db.devices.tableName) docId := fmt.Sprintf("%s_%s", localpart, deviceID) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response, exGet = getDevice(s, ctx, pk, cosmosDocId) if exGet != nil { return exGet @@ -387,8 +389,8 @@ func (s *devicesStatements) selectDeviceByID( // "SELECT display_name FROM device_devices WHERE localpart = $1 and device_id = $2" var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.db.devices.tableName) docId := fmt.Sprintf("%s_%s", localpart, deviceID) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response, exGet = getDevice(s, ctx, pk, cosmosDocId) if exGet != nil { return nil, exGet @@ -452,8 +454,8 @@ func (s *devicesStatements) updateDeviceLastSeen(ctx context.Context, localpart, // "UPDATE device_devices SET last_seen_ts = $1, ip = $2 WHERE localpart = $3 AND device_id = $4" var dbCollectionName = cosmosdbapi.GetCollectionName(s.db.databaseName, s.db.devices.tableName) docId := fmt.Sprintf("%s_%s", localpart, deviceID) - cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.ContainerName, dbCollectionName, docId) - pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.ContainerName, dbCollectionName) + cosmosDocId := cosmosdbapi.GetDocumentId(s.db.cosmosConfig.TenantName, dbCollectionName, docId) + pk := cosmosdbapi.GetPartitionKey(s.db.cosmosConfig.TenantName, dbCollectionName) var response, exGet = getDevice(s, ctx, pk, cosmosDocId) if exGet != nil { return exGet