/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.cassandra.cql3; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import com.datastax.driver.core.ConsistencyLevel; import com.datastax.driver.core.PreparedStatement; import com.datastax.driver.core.ResultSetFuture; import com.datastax.driver.core.Session; public class DeleteTest extends CQLTester { private static PreparedStatement pstmtI; private static PreparedStatement pstmtU; private static PreparedStatement pstmtD; private static PreparedStatement pstmt1; private static PreparedStatement pstmt2; private static PreparedStatement pstmt3; private static PreparedStatement pstmt4; private static PreparedStatement pstmt5; @Before public void prepare() throws Exception { // Schema.instance.clear(); Session session = sessionNet(); session.getCluster().getConfiguration().getQueryOptions().setConsistencyLevel(ConsistencyLevel.ONE); session.execute("drop keyspace if exists junit;"); session.execute("create keyspace junit WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 2 };"); session.execute("CREATE TABLE junit.tpc_base (\n" + " id int ,\n" + " cid int ,\n" + " val text ,\n" + " PRIMARY KEY ( ( id ), cid )\n" + ");"); session.execute("CREATE TABLE junit.tpc_inherit_a (\n" + " id int ,\n" + " cid int ,\n" + " inh_a text ,\n" + " val text ,\n" + " PRIMARY KEY ( ( id ), cid )\n" + ");"); session.execute("CREATE TABLE junit.tpc_inherit_b (\n" + " id int ,\n" + " cid int ,\n" + " inh_b text ,\n" + " val text ,\n" + " PRIMARY KEY ( ( id ), cid )\n" + ");"); session.execute("CREATE TABLE junit.tpc_inherit_b2 (\n" + " id int ,\n" + " cid int ,\n" + " inh_b text ,\n" + " inh_b2 text ,\n" + " val text ,\n" + " PRIMARY KEY ( ( id ), cid )\n" + ");"); session.execute("CREATE TABLE junit.tpc_inherit_c (\n" + " id int ,\n" + " cid int ,\n" + " inh_c text ,\n" + " val text ,\n" + " PRIMARY KEY ( ( id ), cid )\n" + ");"); pstmtI = session.prepare("insert into junit.tpc_inherit_b ( id, cid, inh_b, val) values (?, ?, ?, ?)"); pstmtU = session.prepare("update junit.tpc_inherit_b set inh_b=?, val=? where id=? and cid=?"); pstmtD = session.prepare("delete from junit.tpc_inherit_b where id=? and cid=?"); pstmt1 = session.prepare("select id, cid, val from junit.tpc_base where id=? and cid=?"); pstmt2 = session.prepare("select id, cid, inh_a, val from junit.tpc_inherit_a where id=? and cid=?"); pstmt3 = session.prepare("select id, cid, inh_b, val from junit.tpc_inherit_b where id=? and cid=?"); pstmt4 = session.prepare("select id, cid, inh_b, inh_b2, val from junit.tpc_inherit_b2 where id=? and cid=?"); pstmt5 = session.prepare("select id, cid, inh_c, val from junit.tpc_inherit_c where id=? and cid=?"); } @Test public void lostDeletesTest() { Session session = sessionNet(); for (int i = 0; i < 500; i++) { session.execute(pstmtI.bind(1, 1, "inhB", "valB")); ResultSetFuture[] futures = load(); Assert.assertTrue(futures[0].getUninterruptibly().isExhausted()); Assert.assertTrue(futures[1].getUninterruptibly().isExhausted()); Assert.assertNotNull(futures[2].getUninterruptibly().one()); Assert.assertTrue(futures[3].getUninterruptibly().isExhausted()); Assert.assertTrue(futures[4].getUninterruptibly().isExhausted()); session.execute(pstmtU.bind("inhBu", "valBu", 1, 1)); futures = load(); Assert.assertTrue(futures[0].getUninterruptibly().isExhausted()); Assert.assertTrue(futures[1].getUninterruptibly().isExhausted()); Assert.assertNotNull(futures[2].getUninterruptibly().one()); Assert.assertTrue(futures[3].getUninterruptibly().isExhausted()); Assert.assertTrue(futures[4].getUninterruptibly().isExhausted()); session.execute(pstmtD.bind(1, 1)); futures = load(); Assert.assertTrue(futures[0].getUninterruptibly().isExhausted()); Assert.assertTrue(futures[1].getUninterruptibly().isExhausted()); Assert.assertTrue(futures[2].getUninterruptibly().isExhausted()); Assert.assertTrue(futures[3].getUninterruptibly().isExhausted()); Assert.assertTrue(futures[4].getUninterruptibly().isExhausted()); } } private ResultSetFuture[] load() { Session session = sessionNet(); return new ResultSetFuture[]{ session.executeAsync(pstmt1.bind(1, 1)), session.executeAsync(pstmt2.bind(1, 1)), session.executeAsync(pstmt3.bind(1, 1)), session.executeAsync(pstmt4.bind(1, 1)), session.executeAsync(pstmt5.bind(1, 1)) }; } }