Skip to content

Dahsboard message reexecute button throws an exception #525

@smallswan399

Description

@smallswan399

public async Task<MediumMessage> GetPublishedMessageAsync(long id)
{
var sql =
$"SELECT * FROM {_pubName} WHERE \"Id\"={id} FOR UPDATE SKIP LOCKED";
using var connection = new NpgsqlConnection(_options.Value.ConnectionString);
return await connection.QueryFirstOrDefaultAsync<MediumMessage>(sql);
}
public async Task<MediumMessage> GetReceivedMessageAsync(long id)
{
var sql =
$"SELECT * FROM {_recName} WHERE \"Id\"={id} FOR UPDATE SKIP LOCKED";
using var connection = new NpgsqlConnection(_options.Value.ConnectionString);
return await connection.QueryFirstOrDefaultAsync<MediumMessage>(sql);
}

public async Task ChangeReceiveStateAsync(MediumMessage message, StatusName state)
{
var sql =
$"UPDATE {_recName} SET \"Retries\"=@Retries,\"ExpiresAt\"=@ExpiresAt,\"StatusName\"=@StatusName WHERE \"Id\"=@Id";
using var connection = new NpgsqlConnection(_options.Value.ConnectionString);
await connection.ExecuteAsync(sql, new
{
Id = long.Parse(message.DbId),
message.Retries,
message.ExpiresAt,
StatusName = state.ToString("G")
});
}

This make fail to re-execute messages from dashboard

System.ArgumentNullException: Value cannot be null. (Parameter 's')
   at System.Int64.Parse(String s)
   at DotNetCore.CAP.PostgreSql.PostgreSqlDataStorage.ChangeReceiveStateAsync(MediumMessage message, StatusName state)
   at DotNetCore.CAP.Internal.SubscribeDispatcher.ExecuteWithoutRetryAsync(MediumMessage message, ConsumerExecutorDescriptor descriptor, CancellationToken cancellationToken)

At line 62 you are trying parse a null value

This small change fix the issue . Do you accept a pull request?

public async Task<MediumMessage> GetPublishedMessageAsync(long id)
        {
            var sql =
                $"SELECT *, \"Id\" AS \"DbId\" FROM {_pubName} WHERE \"Id\"={id} FOR UPDATE SKIP LOCKED";

            using var connection = new NpgsqlConnection(_options.Value.ConnectionString);
            return await connection.QueryFirstOrDefaultAsync<MediumMessage>(sql);
        }

        public async Task<MediumMessage> GetReceivedMessageAsync(long id)
        {
            var sql =
                $"SELECT *, \"Id\" AS \"DbId\" FROM {_recName} WHERE \"Id\"={id} FOR UPDATE SKIP LOCKED";
            using var connection = new NpgsqlConnection(_options.Value.ConnectionString);
            return await connection.QueryFirstOrDefaultAsync<MediumMessage>(sql);
        }

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions