2017-04-19 2 views
1

Ich teste Cassandra-Trigger und implementiert die ITrigger Schnittstelle. Wie auf dem Ticket https://issues.apache.org/jira/browse/CASSANDRA-1311 scheint es cassandra Trigger sollte async sein, bedeutet, nachdem ein Client eine Einfügung gemacht, Client sollte nicht warten, bis der Trigger ausgeführt wird.Wird Cassandra asynchron ausgelöst?

Aber ich habe einen Schlaf wie 15 Sekunden in den Trigger hinzugefügt und Einfügen Operation wegen Timeout fehlgeschlagen. So scheint es zu warten, bis der Auslöser seinen Job beendet.

Gibt es eine Möglichkeit, Trigger zum Arbeiten asynch zu machen? (es sollte bereits async sein nach den Seiten, die ich gelesen habe)

Antwort

2

Nein, Standardmäßig wartet Cassandra auf die Ausführung des Triggers.

Aber Sie können das ändern, indem Sie Abfrage mit QueryProcessor ausführen und in separaten Thread ausführen. Beachten Sie, dass Sie, wenn Sie dies tun und die Ausführung der Ausführung fehlschlagen, nicht wissen können, dass die Trigger-Abfrage in Ihrer Hauptabfrage fehlgeschlagen ist.

Beispiel für Cassandra 2.x:

@Override 
public Collection<Mutation> augment(ByteBuffer key, ColumnFamily update) { 
    new Thread(new Runnable() { 
     @Override 
     public void run() { 
      //build your own query from the ByteBuffer key and ColumnFamily update 
      Insert insert = QueryBuilder.insertInto("test_keyspace.test_table").value("id", 1).value("data", "Test"); 

      //execute query 
      QueryProcessor.process(insert.toString(), ConsistencyLevel.LOCAL_QUORUM); 
     } 
    }).start(); 
    return Collections.EMPTY_LIST; 
} 
+0

Vielen Dank Ashraful, ich Auslöser in cassandra lerne und nie dieses gesehen Queryprocessor, du hast mich gerettet lange Zeit :) – Oktay

+0

Wenn Sie synchron ausgeführt werden soll dann entferne einfach den Thread-Teil –

+0

Ich habe die Thread-Klasse jetzt entschuldigt :) – Oktay

Verwandte Themen