1st April Post – The multi purpose method

time to read 2 min | 365 words

Since it appears to be customary, I decided that I need to make a few posts for April 1st. Here is the second of them.

public void RemoveReversalsMoveCompletedMessagesAndFinishSubQueueMove(Guid transactionId)
{
    Api.JetSetCurrentIndex(session, txs, "by_tx_id");
    Api.MakeKey(session, txs, transactionId.ToByteArray(), MakeKeyGrbit.NewKey);

    if (Api.TrySeek(session, txs, SeekGrbit.SeekEQ) == false)
        return;
    Api.MakeKey(session, txs, transactionId.ToByteArray(), MakeKeyGrbit.NewKey);
    Api.JetSetIndexRange(session, txs, SetIndexRangeGrbit.RangeInclusive | SetIndexRangeGrbit.RangeUpperLimit);
    
    do
    {
        var queue = Api.RetrieveColumnAsString(session, txs, txsColumns["queue"], Encoding.Unicode);
        var bookmarkData = Api.RetrieveColumn(session, txs, txsColumns["bookmark_data"]);
        var bookmarkSize = Api.RetrieveColumnAsInt32(session, txs, txsColumns["bookmark_size"]).Value;

        var actions = GetQueue(queue);

        var bookmark = new MessageBookmark
        {
            Bookmark = bookmarkData,
            QueueName = queue,
            Size = bookmarkSize
        };

        if (actions.GetMessageStatus(bookmark) == MessageStatus.Processing)
            actions.MoveToHistory(bookmark);
        else
            actions.SetMessageStatus(bookmark, MessageStatus.ReadyToDeliver);

        Api.JetDelete(session, txs);
    } while (Api.TryMoveNext(session, txs));
}

And yes, it is from real code, and it is going to production soon.