Skip to content

Commit 9fc490e

Browse files
committed
Fixed issue with pool of connections
1 parent 2e96879 commit 9fc490e

File tree

3 files changed

+35
-14
lines changed

3 files changed

+35
-14
lines changed

src/ServiceControl.Audit.Persistence.PostgreSQL/PostgreSQLConnectionFactory.cs

Lines changed: 31 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,45 @@ namespace ServiceControl.Audit.Persistence.PostgreSQL;
33
using Npgsql;
44
using System.Threading.Tasks;
55
using System.Threading;
6-
class PostgreSQLConnectionFactory(DatabaseConfiguration databaseConfiguration)
6+
using Microsoft.Extensions.Logging;
7+
8+
class PostgreSQLConnectionFactory
79
{
8-
public async Task<NpgsqlConnection> OpenConnection(CancellationToken cancellationToken)
10+
readonly NpgsqlDataSource dataSource;
11+
readonly NpgsqlDataSource dataSourceAdmin;
12+
13+
public PostgreSQLConnectionFactory(DatabaseConfiguration databaseConfiguration, ILoggerFactory loggerFactory)
914
{
10-
var dataSourceBuilder = new NpgsqlDataSourceBuilder(databaseConfiguration.ConnectionString);
15+
var dataSourceBuilder = new NpgsqlDataSourceBuilder(databaseConfiguration.ConnectionString)
16+
{
17+
Name = "ServiceControl.Audit"
18+
};
19+
dataSourceBuilder.UseLoggerFactory(loggerFactory);
1120
dataSourceBuilder.EnableDynamicJson();
12-
var dataSource = dataSourceBuilder.Build();
13-
var conn = dataSource.CreateConnection();
14-
await conn.OpenAsync(cancellationToken);
15-
return conn;
16-
}
21+
dataSource = dataSourceBuilder.Build();
1722

18-
public async Task<NpgsqlConnection> OpenAdminConnection(CancellationToken cancellationToken)
19-
{
2023
var builder = new NpgsqlConnectionStringBuilder(databaseConfiguration.ConnectionString)
2124
{
2225
Database = databaseConfiguration.AdminDatabaseName
2326
};
24-
var dataSourceBuilder = new NpgsqlDataSourceBuilder(builder.ConnectionString);
25-
dataSourceBuilder.EnableDynamicJson();
26-
var dataSource = dataSourceBuilder.Build();
27-
var conn = dataSource.CreateConnection();
27+
var dataSourceBuilderAdmin = new NpgsqlDataSourceBuilder(builder.ConnectionString)
28+
{
29+
Name = "ServiceControl.Audit-admin",
30+
};
31+
dataSourceBuilderAdmin.UseLoggerFactory(loggerFactory);
32+
dataSourceBuilderAdmin.EnableDynamicJson();
33+
dataSourceAdmin = dataSourceBuilderAdmin.Build();
34+
}
35+
36+
public async Task<NpgsqlConnection> OpenConnection(CancellationToken cancellationToken)
37+
{
38+
var conn = await dataSource.OpenConnectionAsync(cancellationToken);
39+
return conn;
40+
}
41+
42+
public async Task<NpgsqlConnection> OpenAdminConnection(CancellationToken cancellationToken)
43+
{
44+
var conn = dataSourceAdmin.CreateConnection();
2845
await conn.OpenAsync(cancellationToken);
2946
return conn;
3047
}

src/ServiceControl.Audit.Persistence.PostgreSQL/UnitOfWork/PostgreSQLAuditIngestionUnitOfWork.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,20 @@ namespace ServiceControl.Audit.Persistence.PostgreSQL.UnitOfWork;
1313
class PostgreSQLAuditIngestionUnitOfWork : IAuditIngestionUnitOfWork
1414
{
1515
readonly NpgsqlBatch batch;
16+
readonly NpgsqlConnection connection;
1617

1718
public PostgreSQLAuditIngestionUnitOfWork(NpgsqlConnection connection)
1819
{
1920
batch = new NpgsqlBatch(connection);
21+
this.connection = connection;
2022
}
2123

2224
public async ValueTask DisposeAsync()
2325
{
2426
await batch.PrepareAsync();
2527
await batch.ExecuteNonQueryAsync();
2628
await batch.DisposeAsync();
29+
await connection.DisposeAsync();
2730
}
2831

2932
public Task RecordProcessedMessage(ProcessedMessage processedMessage, ReadOnlyMemory<byte> body, CancellationToken cancellationToken)

src/ServiceControl.Audit.Persistence.PostgreSQL/UnitOfWork/PostgreSQLAuditIngestionUnitOfWorkFactory.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ namespace ServiceControl.Audit.Persistence.PostgreSQL.UnitOfWork;
44
using System.Threading.Tasks;
55
using ServiceControl.Audit.Persistence.UnitOfWork;
66
using ServiceControl.Audit.Persistence.PostgreSQL;
7+
78
class PostgreSQLAuditIngestionUnitOfWorkFactory : IAuditIngestionUnitOfWorkFactory
89
{
910
readonly PostgreSQLConnectionFactory connectionFactory;

0 commit comments

Comments
 (0)