private connectionInfo prepareConnection() { connectionInfo connection; if (null == (connection = _connection)) { lock (this) { if (null == (connection = _connection)) { var conn = _cluster.GetConnection(); conn.OnFailure += ConnectionOnOnFailure; var cl = _consistencyLevel ?? conn.DefaultConsistencyLevel; var executionFlags = _executionFlags ?? conn.DefaultExecutionFlags; var futPrepare = new PrepareQuery(conn, cl, executionFlags, _cql).AsFuture(); futPrepare.Wait(); Tuple <byte[], IColumnSpec[]> preparedInfo = futPrepare.Result.Single(); var newconn = new connectionInfo() { connection = conn, }; newconn.id = preparedInfo.Item1; newconn.columnSpecs = preparedInfo.Item2; _connection = newconn; } } } return(_connection); }
private connectionInfo peakConnection() { var currentConnections = appendConnections; var availableConnection = currentConnections.Where(c => c.connection.GetAvailableStreamIdCount > Transport.LongRunningConnection.SUGGEST_AVIALABLE_STREAM_COUNT).FirstOrDefault(); if (availableConnection != null) { return(availableConnection); } lock (this) { // when we enter locked section, we can check again! // in case we were blocked by previous lock, then we can get new one. currentConnections = appendConnections; availableConnection = currentConnections.Where(c => c.connection.GetAvailableStreamIdCount > Transport.LongRunningConnection.SUGGEST_AVIALABLE_STREAM_COUNT).FirstOrDefault(); if (availableConnection != null) { return(availableConnection); } // well, we were the first lock section, make a new connection! var newConnections = new connectionInfo[appendConnections.Length + 1]; if (appendConnections.Length > 0) { Array.Copy(appendConnections, 0, newConnections, 0, appendConnections.Length); _cluster.GetLogger.Info("prepared query extended to connection count {0}", newConnections.Length); } var connection = _cluster.GetConnection(null, true); var coninfo = new connectionInfo() { connection = connection, }; connection.OnFailure += ConnectionOnOnFailure; var cl = _consistencyLevel ?? connection.DefaultConsistencyLevel; var executionFlags = _executionFlags ?? connection.DefaultExecutionFlags; var futPrepare = new PrepareQuery(connection, cl, executionFlags, _cql).AsFuture(); futPrepare.Wait(); Tuple <byte[], IColumnSpec[]> preparedInfo = futPrepare.Result.Single(); coninfo.id = preparedInfo.Item1; coninfo.columnSpecs = preparedInfo.Item2; newConnections[newConnections.Length - 1] = coninfo; appendConnections = newConnections; return(coninfo); } }
public IQuery <T> Execute(object dataSource) { ConsistencyLevel cl; ExecutionFlags executionFlags; IConnection connection; if (null == (connection = _connection)) { lock (_lock) { if (null == (connection = _connection)) { connection = _cluster.GetConnection(); connection.OnFailure += ConnectionOnOnFailure; cl = _consistencyLevel ?? connection.DefaultConsistencyLevel; executionFlags = _executionFlags ?? connection.DefaultExecutionFlags; var futPrepare = new PrepareQuery(connection, cl, executionFlags, _cql).AsFuture(); futPrepare.Wait(); Tuple <byte[], IColumnSpec[]> preparedInfo = futPrepare.Result.Single(); _id = preparedInfo.Item1; _columnSpecs = preparedInfo.Item2; _connection = connection; } } } cl = _consistencyLevel ?? connection.DefaultConsistencyLevel; executionFlags = _executionFlags ?? connection.DefaultExecutionFlags; IDataMapper mapperIn = _factoryIn.Create(dataSource.GetType()); IDataMapper mapperOut = _factoryOut.Create <T>(); var futQuery = new ExecuteQuery <T>(connection, cl, executionFlags, _cql, _id, _columnSpecs, dataSource, mapperIn, mapperOut); return(futQuery); }