Проблема с кэшированием подготовленного оператора в драйвере Cassandra Csharp

Я считаю, что нашел ошибку с логикой того, как подготовленный оператор кэшируется в StatementFactory в драйвере Cassandra csharp (версия 2.7.3). Вот пример использования.

Guid key = Guid.NewGuid(); // your key

ISession session_foo = new Session("foo"); //This is pseudo code
ISession session_bar = new Session("bar");

var foo_mapper = new Mapper(session_foo); //table foo_bar
var bar_mapper = new Mapper(session_bar); //table foo_bar

await Task.WhenAll(
   foo_mapper.DeleteAsync<Foo>("WHERE id = ?", key),
   bar_mapper.DeleteAsync<Bar>("WHERE id = ?", key));

Мы обнаружили, что после выполнения этого удаления выполняется только первый запрос. После погружения в исходный кодStatementFactory

public Task<Statement> GetStatementAsync(ISession session, Cql cql)
    {
        if (cql.QueryOptions.NoPrepare)
        {
            // Use a SimpleStatement if we're not supposed to prepare
            Statement statement = new SimpleStatement(cql.Statement, cql.Arguments);
            SetStatementProperties(statement, cql);
            return TaskHelper.ToTask(statement);
        }
        return _statementCache
            .GetOrAdd(cql.Statement, session.PrepareAsync)
            .Continue(t =>
            {
                if (_statementCache.Count > MaxPreparedStatementsThreshold)
                {
                    Logger.Warning(String.Format("The prepared statement cache contains {0} queries. Use parameter markers for queries. You can configure this warning threshold using MappingConfiguration.SetMaxStatementPreparedThreshold() method.", _statementCache.Count));
                }
                Statement boundStatement = t.Result.Bind(cql.Arguments);
                SetStatementProperties(boundStatement, cql);
                return boundStatement;
            });
    }

Вы можете видеть, что кэш использует только оператор cql. В нашем случае у нас одни и те же имена таблиц в разных пространствах ключей (или сессиях). Наш оператор cql в обоих запросах выглядит одинаково. т.е.УДАЛИТЬ ИЗ foo_bar ГДЕ id =?.

Если бы мне пришлось угадывать, я бы сказал, что простым решением было бы объединить оператор cql и пространство ключей вместе в качестве ключа кэша.

Кто-нибудь еще сталкивался с этой проблемой раньше?

Ответы на вопрос(1)

Ваш ответ на вопрос