Skip to content

Commit

Permalink
Re-ordering indexes on event store tables to put tenant_id first. Closes
Browse files Browse the repository at this point in the history
  • Loading branch information
jeremydmiller committed Jan 3, 2024
1 parent 9a91c68 commit a393a1a
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 14 deletions.
5 changes: 4 additions & 1 deletion src/Marten.AsyncDaemon.Testing/build_aggregate_projection.cs
Original file line number Diff line number Diff line change
Expand Up @@ -63,9 +63,12 @@ public async Task end_to_end_with_events_already_published()

var shard = theStore.Options.Projections.AllShards().Single();

var waiter = agent.Tracker.WaitForShardState(new ShardState(shard, NumberOfEvents), 60.Seconds());


await agent.StartShard(shard.Name.Identity, CancellationToken.None);

await theStore.WaitForNonStaleProjectionDataAsync(15.Seconds());
await waiter;

await CheckAllExpectedAggregatesAgainstActuals();
}
Expand Down
8 changes: 3 additions & 5 deletions src/Marten/Events/Schema/EventsTable.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,14 +38,14 @@ public EventsTable(EventGraph events): base(new PostgresqlObjectName(events.Data
{
ForeignKeys.Add(new ForeignKey("fkey_mt_events_stream_id_tenant_id")
{
ColumnNames = new[] { "stream_id", TenantIdColumn.Name },
LinkedNames = new[] { "id", TenantIdColumn.Name },
ColumnNames = new[] { TenantIdColumn.Name, "stream_id" },
LinkedNames = new[] { TenantIdColumn.Name, "id" },
LinkedTable = new PostgresqlObjectName(events.DatabaseSchemaName, "mt_streams")
});

Indexes.Add(new IndexDefinition("pk_mt_events_stream_and_version")
{
IsUnique = true, Columns = new[] { "stream_id", TenantIdColumn.Name, "version" }
IsUnique = true, Columns = new[] { TenantIdColumn.Name, "stream_id", "version" }
});
}
else
Expand All @@ -64,8 +64,6 @@ public EventsTable(EventGraph events): base(new PostgresqlObjectName(events.Data
});
}

Indexes.Add(new IndexDefinition("pk_mt_events_id_unique") { Columns = new[] { "id" }, IsUnique = true });

AddColumn<IsArchivedColumn>();
}

Expand Down
12 changes: 6 additions & 6 deletions src/Marten/Events/Schema/StreamsTable.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,17 +22,17 @@ internal class StreamsTable: Table

public StreamsTable(EventGraph events): base(new PostgresqlObjectName(events.DatabaseSchemaName, TableName))
{
var idColumn = events.StreamIdentity == StreamIdentity.AsGuid
? new StreamTableColumn("id", x => x.Id)
: new StreamTableColumn("id", x => x.Key);

AddColumn(idColumn).AsPrimaryKey();

// Per https://github.com/JasperFx/marten/issues/2430, this needs to be first in the PK
if (events.TenancyStyle == TenancyStyle.Conjoined)
{
AddColumn<TenantIdColumn>().AsPrimaryKey();
}

var idColumn = events.StreamIdentity == StreamIdentity.AsGuid
? new StreamTableColumn("id", x => x.Id)
: new StreamTableColumn("id", x => x.Key);

AddColumn(idColumn).AsPrimaryKey();
AddColumn(new StreamTableColumn("type", x => x.AggregateTypeName)).AllowNulls();

AddColumn(new StreamTableColumn("version", x => x.Version)).AllowNulls();
Expand Down
6 changes: 4 additions & 2 deletions src/Marten/Storage/DocumentTable.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,17 @@ public DocumentTable(DocumentMapping mapping): base(mapping.TableName)

var idColumn = new IdColumn(mapping);

AddColumn(idColumn).AsPrimaryKey();

// Per https://github.com/JasperFx/marten/issues/2430 the tenant_id needs to be first in
// PK
if (mapping.TenancyStyle == TenancyStyle.Conjoined)
{
AddColumn(mapping.Metadata.TenantId).AsPrimaryKey();

Indexes.Add(new DocumentIndex(mapping, TenantIdColumn.Name));
}

AddColumn(idColumn).AsPrimaryKey();

AddColumn<DataColumn>();

AddIfActive(_mapping.Metadata.LastModified);
Expand Down

0 comments on commit a393a1a

Please sign in to comment.