Гектор querySuperColumn не соответствует countSubColumns

У меня супер семейство колонн:

Logger {
    superKey : {
        nameKey : {name1:val1, name2:val2, ..., name8945:val8945}
    }
}

Вот код:

    ThriftSuperCfTemplate<String, String, String> stringKeyTemplate = 
            new ThriftSuperCfTemplate<String, String, String>
            (keyspace, LOGGER_COLUMN_FAMILY, 
            StringSerializer.get(), StringSerializer.get(), 
            StringSerializer.get());

    int count = stringKeyTemplate.countSubColumns(NAME_KEY, SUPER_KEY); //1

    SuperCfResult<String, String, String> nameRow = 
            stringKeyTemplate.querySuperColumn(NAME_KEY, SUPER_KEY);

    Collection<String> names =  nameRow.getColumnNames(); //2

    Assert.assertTrue(names.size()==count); //3

То, что я пытаюсь сделать, это получить все имена столбцов из семейства столбцов nameKey, но он возвращает только первые 7 имен {name1, name2,..., name7} (строка 2), но количество возвращается 8945 (строка 1). И утверждение не в строке 3...

2 ответа

Я не могу воспроизвести это на текущей подсказке в GH: https://github.com/rantav/hector/commit/1aa93e78257e86dfc73390cb9c4db52d8ed29a69

Я не думаю, что что-то изменилось между версией 1.0.1 и master. Если бы вы могли попробовать обновиться до последней версии от транка и посмотреть, исчезнет ли проблема, я буду исследовать дальше. Кроме того, какую версию Cassandra вы используете? Это произошло только на выходных, но это не может быть причиной: https://issues.apache.org/jira/browse/CASSANDRA-3446

Есть ли какие-либо журналы ошибок на сервере? Установите уровень ведения журнала для StorageProxy для отладки и убедитесь, что все, что происходит по сети, кажется правильным (подробности о настройке уровней ведения журнала: http://www.datastax.com/docs/1.0/configuration/logging_options).

Я обнаружил, что это воспроизводимо только на определенных данных, которые я не мог генерировать вручную. Однако я нашел обходной путь для моего случая:

    int count = stringKeyTemplate.countSubColumns(NAME_KEY, SUPER_KEY); //1

    SuperSliceQuery<String, String, String, String> query = 
          HFactory.createSuperSliceQuery(keyspace, StringSerializer.get(), 
          StringSerializer.get(), StringSerializer.get(), 
          StringSerializer.get());

    query.setColumnFamily(COLUMN_FAMILY);
    query.setKey(NAME_KEY);
    query.setRange(SUPER_KEY, SUPER_KEY, false, 1);

    QueryResult<SuperSlice<String, String, String>> result = query.execute();


    Collection<String> names = null;
    names = result.get().getColumnByName(SUPER_KEY).getColumns(); //2
    Assert.assertTrue(names.size()==count); //3
Другие вопросы по тегам