Resolved a connection leak in Postgres.cs class by wrapping all instantiations in using blocks to ensure proper object disposal. This addresses an oversight in recent resilience updates where direct SQL calls were leaking connections. Additionally, added a try-catch block around the connection opening to handle errors gracefully while still guaranteeing disposal.
This commit is contained in:
@@ -147,7 +147,7 @@ namespace Jube.App.Controllers.Session
|
||||
|
||||
try
|
||||
{
|
||||
var postgres = new Postgres(reportConnectionString ?? dbContext.ConnectionString, log);
|
||||
using var postgres = new Postgres(reportConnectionString ?? dbContext.ConnectionString, log);
|
||||
await postgres.PrepareAsync(model.SelectSqlSearch + " " + model.WhereSql + " " + model.OrderSql,
|
||||
filterRule.Tokens, token).ConfigureAwait(false);
|
||||
model.Prepared = 1;
|
||||
|
||||
@@ -108,7 +108,7 @@ namespace Jube.App.Controllers.Session
|
||||
|
||||
await CheckRebuildAsync(modelCompiled, token).ConfigureAwait(false);
|
||||
|
||||
var postgres = new Postgres(reportConnectionString, log);
|
||||
using var postgres = new Postgres(reportConnectionString, log);
|
||||
var tokens = JsonConvert.DeserializeObject<List<object>>(modelCompiled.FilterTokens);
|
||||
|
||||
var sw = new StopWatch();
|
||||
|
||||
@@ -61,7 +61,7 @@ namespace Jube.Data.Query.CaseQuery
|
||||
var sw = new StopWatch();
|
||||
sw.Start();
|
||||
|
||||
var postgres = new Postgres(reportConnectionString, log);
|
||||
using var postgres = new Postgres(reportConnectionString, log);
|
||||
|
||||
var value = await
|
||||
postgres.ExecuteByOrderedParametersAsync(modelCompiled.SelectSqlDisplay
|
||||
|
||||
@@ -95,7 +95,7 @@ namespace Jube.Data.Query
|
||||
}
|
||||
}
|
||||
|
||||
var postgres = new Postgres(reportConnectionString ?? dbContext.ConnectionString, log);
|
||||
using var postgres = new Postgres(reportConnectionString ?? dbContext.ConnectionString, log);
|
||||
return await postgres.ExecuteByNamedParametersAsync(visualisationRegistryDatasource.Command,
|
||||
mergedParametersByName, token).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
@@ -64,7 +64,7 @@ namespace Jube.Data.Query
|
||||
limit
|
||||
};
|
||||
|
||||
var postgres = new Postgres(reportConnectionString ?? dbContext.ConnectionString, log);
|
||||
using var postgres = new Postgres(reportConnectionString ?? dbContext.ConnectionString, log);
|
||||
|
||||
await postgres.PrepareAsync(sql, tokens, token).ConfigureAwait(false);
|
||||
|
||||
|
||||
@@ -34,7 +34,15 @@ namespace Jube.Data.Reporting
|
||||
public Postgres(string connectionString, ILog log)
|
||||
{
|
||||
connection = new ResilientNpgsqlConnection(connectionString, log);
|
||||
connection.Open();
|
||||
try
|
||||
{
|
||||
connection.Open();
|
||||
}
|
||||
catch
|
||||
{
|
||||
connection.Dispose();
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
|
||||
@@ -298,7 +298,7 @@ namespace Jube.Data.Repository
|
||||
parametersDefaultValues.Add(parameter.Name.Replace(" ", "_"), defaultValue);
|
||||
}
|
||||
|
||||
var postgres = new Postgres(dbContext.ConnectionString, log);
|
||||
using var postgres = new Postgres(dbContext.ConnectionString, log);
|
||||
return await postgres.IntrospectAsync(sql, parametersDefaultValues).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -124,7 +124,7 @@ namespace Jube.Engine.EntityAnalysisModelManager.BackgroundTasks.TaskStarters
|
||||
// ReSharper disable once RedundantAssignment
|
||||
var deleted = false;
|
||||
|
||||
var archiveDatabase = new Postgres(context.Services.ReportConnectionString ?? dbContext.ConnectionString, context.Services.Log);
|
||||
using var archiveDatabase = new Postgres(context.Services.ReportConnectionString ?? dbContext.ConnectionString, context.Services.Log);
|
||||
do
|
||||
{
|
||||
if (context.Services.Log.IsInfoEnabled)
|
||||
|
||||
@@ -40,7 +40,7 @@ namespace Jube.Engine.Exhaustive.Utilities
|
||||
{
|
||||
var dataList = new List<double[]>();
|
||||
var outputsList = new List<double>();
|
||||
var postgres = new Postgres(reportConnectionString ?? dbContext.ConnectionString, log);
|
||||
using var postgres = new Postgres(reportConnectionString ?? dbContext.ConnectionString, log);
|
||||
|
||||
foreach (var json in
|
||||
await postgres.ExecuteReturnOnlyJsonFromArchiveSampleAsync(entityAnalysisModelId, filterSql,
|
||||
@@ -108,7 +108,7 @@ namespace Jube.Engine.Exhaustive.Utilities
|
||||
string reportConnectionString = null,
|
||||
CancellationToken token = default)
|
||||
{
|
||||
var postgres = new Postgres(reportConnectionString ?? dbContext.ConnectionString, log);
|
||||
using var postgres = new Postgres(reportConnectionString ?? dbContext.ConnectionString, log);
|
||||
var jsonList = await postgres.ExecuteReturnOnlyJsonFromArchiveSampleAsync(entityAnalysisModelId,
|
||||
"NOT (" + filterSql + ")",
|
||||
filterTokens, 10000, mockData, token).ConfigureAwait(false);
|
||||
|
||||
Reference in New Issue
Block a user