Katsutoshi Nagaoka created CASSANDRA-8095: ---------------------------------------------
Summary: create table query not working in concurrent Key: CASSANDRA-8095 URL: https://issues.apache.org/jira/browse/CASSANDRA-8095 Project: Cassandra Issue Type: Bug Environment: 2.1.0 on Ubuntu 14.04 Reporter: Katsutoshi Nagaoka After 2.1.0, I have encountered the strange behavior of create table. When I executed create table query in concurrent, {code} package cassandra.test; import com.datastax.driver.core.Cluster; import com.datastax.driver.core.Session; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; public class ConcurrentCreateTable { public static void main(String[] args) { ConcurrentCreateTable instance = new ConcurrentCreateTable(); try { instance.execute(); } catch (Exception e) { e.printStackTrace(); } } private final Cluster cluster; public ConcurrentCreateTable() { this.cluster = Cluster.builder().addContactPoint("server1").build(); } private void execute() throws Exception { Session session = cluster.newSession(); session.execute("DROP KEYSPACE IF EXISTS ks"); session.execute("CREATE KEYSPACE IF NOT EXISTS ks WITH REPLICATION = {'class':'SimpleStrategy','replication_factor':3}"); ExecutorService executor = Executors.newFixedThreadPool(10); List<Future<?>> futures = new ArrayList<>(); futures.add(executor.submit(new CreateTableRunner("text"))); futures.add(executor.submit(new CreateTableRunner("int"))); futures.add(executor.submit(new CreateTableRunner("boolean"))); futures.add(executor.submit(new CreateTableRunner("bigint"))); executor.shutdown(); executor.awaitTermination(1L, TimeUnit.MINUTES); session.execute("DROP KEYSPACE ks"); session.close(); cluster.close(); } private class CreateTableRunner implements Runnable { private final Session session; private final String type; public CreateTableRunner(String type) { this.session = cluster.newSession(); this.type = type; } @Override public void run() { session.execute("CREATE TABLE IF NOT EXISTS ks.tb (key " + type + ", value " + type + ", PRIMARY KEY (key))"); session.close(); } } } {code} sometimes each node has different table schema or no table. {code} [on server1] cqlsh> DESCRIBE TABLE ks.tb; CREATE TABLE ks.tb ( key int PRIMARY KEY, value int ) WITH bloom_filter_fp_chance = 0.01 AND caching = '{"keys":"ALL", "rows_per_partition":"NONE"}' AND comment = '' AND compaction = {'min_threshold': '4', 'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32'} AND compression = {'sstable_compression': 'org.apache.cassandra.io.compress.LZ4Compressor'} AND dclocal_read_repair_chance = 0.1 AND default_time_to_live = 0 AND gc_grace_seconds = 864000 AND max_index_interval = 2048 AND memtable_flush_period_in_ms = 0 AND min_index_interval = 128 AND read_repair_chance = 0.0 AND speculative_retry = '99.0PERCENTILE'; [on server2] cqlsh> DESCRIBE TABLE ks.tb; CREATE TABLE ks.tb ( key bigint PRIMARY KEY, value bigint ) WITH bloom_filter_fp_chance = 0.01 AND caching = '{"keys":"ALL", "rows_per_partition":"NONE"}' AND comment = '' AND compaction = {'min_threshold': '4', 'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32'} AND compression = {'sstable_compression': 'org.apache.cassandra.io.compress.LZ4Compressor'} AND dclocal_read_repair_chance = 0.1 AND default_time_to_live = 0 AND gc_grace_seconds = 864000 AND max_index_interval = 2048 AND memtable_flush_period_in_ms = 0 AND min_index_interval = 128 AND read_repair_chance = 0.0 AND speculative_retry = '99.0PERCENTILE'; [on server3] cqlsh> DESCRIBE TABLE ks.tb; Column family 'tb' not found {code} I can reproduce this issue on three nodes cluster in 2.1.0. and the test works fine in 2.0.10. -- This message was sent by Atlassian JIRA (v6.3.4#6332)