Исключение триггера Cassandra: InvalidQueryException: таблица дополнительной мутации не соответствует основной таблице обновления - PullRequest
0 голосов
/ 27 сентября 2018

Я использую Cassandra Trigger на столе.Я следую примеру и загружаю jar триггера с помощью 'nodetool reloadtriggers'.Затем я использую команду

'CREATE TRIGGER mytrigger ON ..' 

из cqlsh для создания триггера на моей таблице.При добавлении записи в эту таблицу моя таблица аудита заполняется.Но при вызове метода из моего Java-приложения, которое сохраняет запись в моей таблице с помощью 'session.execute (BoundStatement)', я получаю следующее исключение:

InvalidQueryException: table of additional mutation does not match primary update table

Почему происходит вставка в таблицу иработа аудита при выполнении его непосредственно с cqlsh и почему он не работает, когда выполняется почти то же самое с приложением Java?

Я использую это как AuditTrigger, очень упрощенный (исключая все другие операции, другиечем вставка строки:

   public class AuditTrigger implements ITrigger {
    private Properties properties = loadProperties();

    public Collection<Mutation> augment(Partition update) {
      String auditKeyspace = properties.getProperty("keyspace");
      String auditTable = properties.getProperty("table");

      CFMetaData metadata = Schema.instance.getCFMetaData(auditKeyspace, 
      auditTable);

      PartitionUpdate.SimpleBuilder audit = 
      PartitionUpdate.simpleBuilder(metadata, UUIDGen.getTimeUUID());



      if (row.primaryKeyLivenessInfo().timestamp() != Long.MIN_VALUE) {
                // Row Insertion
                JSONObject obj = new JSONObject();
                obj.put("message_id", update.metadata().getKeyValidator()
                .getString(update.partitionKey().getKey()));
                audit.row().add("operation", "ROW INSERTION");
          }
          audit.row().add("keyspace_name", update.metadata().ksName)
                     .add("table_name", update.metadata().cfName)
                     .add("primary_key", update.metadata().getKeyValidator()
                         .getString(update.partitionKey()
                         .getKey()));

    return Collections.singletonList(audit.buildAsMutation());

Похоже, что при использовании BoundStatement триггер не работает:

session.execute(boundStatement);

, хотя обычная работа cql queryString работает.

session.execute(query)

Мы используем Boundstatement повсюду в нашем приложении и не можем это изменить. Любая помощь будет признательна.

Спасибо

...