public void ParallelInsertTest() { Console.WriteLine("Compression is:" + (Compression == CompressionType.Snappy ? "SNAPPY" : "OFF")); string keyspaceName = "keyspace" + Guid.NewGuid().ToString("N").ToLower(); try { Session.Execute( string.Format(@"CREATE KEYSPACE {0} WITH replication = {{ 'class' : 'SimpleStrategy', 'replication_factor' : 1 }};" , keyspaceName)); } catch(Exception ex) { } Session.ChangeKeyspace(keyspaceName); string tableName = "table" + Guid.NewGuid().ToString("N").ToLower(); try { Session.Execute(string.Format(@"CREATE TABLE {0}( tweet_id uuid, author text, body text, isok boolean, PRIMARY KEY(tweet_id))", tableName)); } catch (AlreadyExistsException) { } Randomm rndm = new Randomm(); int RowsNo = 300; bool[] ar = new bool[RowsNo]; List<Thread> threads = new List<Thread>(); object monit = new object(); int readyCnt = 0; Thread errorInjector = new Thread(() => { lock (monit) { readyCnt++; Monitor.Wait(monit); } Thread.Sleep(5); Console.Write("#"); Session.SimulateSingleConnectionDown(); for (int i = 0; i < 100; i++) { Thread.Sleep(1); Console.Write("#"); Session.SimulateSingleConnectionDown(); } }); Console.WriteLine(); Console.WriteLine("Preparing..."); for (int idx = 0; idx < RowsNo; idx++) { var i = idx; threads.Add(new Thread(() => { try { Console.Write("+"); lock (monit) { readyCnt++; Monitor.Wait(monit); } Session.Execute(string.Format(@"INSERT INTO {0} ( tweet_id, author, isok, body) VALUES ({1},'test{2}',{3},'body{2}');", tableName, Guid.NewGuid().ToString(), i, i % 2 == 0 ? "false" : "true") ); ar[i] = true; Thread.MemoryBarrier(); } catch (Exception ex) { Message(ex.Message); Message(ex.StackTrace); Console.WriteLine(ex.Message); Console.WriteLine(ex.StackTrace); ar[i] = true; Thread.MemoryBarrier(); } })); } for (int idx = 0; idx < RowsNo; idx++) { threads[idx].Start(); } errorInjector.Start(); lock (monit) { while (true) { if (readyCnt < RowsNo + (1)) { Monitor.Exit(monit); Thread.Sleep(100); Monitor.Enter(monit); } else { Monitor.PulseAll(monit); break; } } } Console.WriteLine(); Console.WriteLine("Start!"); HashSet<int> done = new HashSet<int>(); while (done.Count < RowsNo) { for (int i = 0; i < RowsNo; i++) { Thread.MemoryBarrier(); if (!done.Contains(i) && ar[i]) { done.Add(i); Console.Write("-"); } } } for (int idx = 0; idx < RowsNo; idx++) { threads[idx].Join(); } errorInjector.Join(); Console.WriteLine(); Console.WriteLine("Inserted... now we are checking the count"); using (var ret = Session.Execute(string.Format(@"SELECT * from {0} LIMIT {1};", tableName, RowsNo + 100))) { Assert.Equal(RowsNo, ret.RowsCount); } try { Session.Execute(string.Format(@"DROP TABLE {0};", tableName)); } catch { } try { Session.Execute(string.Format(@"DROP KEYSPACE {0};", keyspaceName)); } catch { } }
public void checkMetadata(string TableName = null, string KeyspaceName = null) { Dictionary<string, ColumnTypeCode> columns = new Dictionary <string, ColumnTypeCode>() { {"q0uuid", ColumnTypeCode.Uuid}, {"q1timestamp", ColumnTypeCode.Timestamp}, {"q2double", ColumnTypeCode.Double}, {"q3int32", ColumnTypeCode.Int}, {"q4int64", ColumnTypeCode.Bigint}, {"q5float", ColumnTypeCode.Float}, {"q6inet", ColumnTypeCode.Inet}, {"q7boolean", ColumnTypeCode.Boolean}, {"q8inet", ColumnTypeCode.Inet}, {"q9blob", ColumnTypeCode.Blob}, #if NET_40_OR_GREATER {"q10varint", Metadata.ColumnTypeCode.Varint}, {"q11decimal", Metadata.ColumnTypeCode.Decimal}, #endif {"q12list", ColumnTypeCode.List}, {"q13set", ColumnTypeCode.Set}, {"q14map", ColumnTypeCode.Map} //{"q12counter", Metadata.ColumnTypeCode.Counter}, A table that contains a counter can only contain counters }; string tablename = TableName ?? "table" + Guid.NewGuid().ToString("N"); StringBuilder sb = new StringBuilder(@"CREATE TABLE " + tablename + " ("); Randomm urndm = new Randomm(DateTimeOffset.Now.Millisecond); foreach (var col in columns) sb.Append(col.Key + " " + col.Value.ToString() + (((col.Value == ColumnTypeCode.List) || (col.Value == ColumnTypeCode.Set) || (col.Value == ColumnTypeCode.Map)) ? "<int" + (col.Value == ColumnTypeCode.Map ? ",varchar>" : ">") : "") + ", "); sb.Append("PRIMARY KEY("); int rowKeys = urndm.Next(1, columns.Count - 3); for (int i = 0; i < rowKeys; i++) sb.Append(columns.Keys.Where(key => key.StartsWith("q" + i.ToString())).First() + ((i == rowKeys - 1) ? "" : ", ")); sb.Append("));"); ExecuteSyncNonQuery(Session, sb.ToString()); var table = this.Cluster.Metadata.GetTable(KeyspaceName ?? Keyspace, tablename); foreach (var metaCol in table.TableColumns) { Assert.True(columns.Keys.Contains(metaCol.Name)); Assert.True(metaCol.TypeCode == columns.Where(tpc => tpc.Key == metaCol.Name).First().Value); Assert.True(metaCol.Table == tablename); Assert.True(metaCol.Keyspace == (KeyspaceName ?? Keyspace)); } }