public void Run(RegressionEnvironment env) { var numThreads = 2; var numEvents = 10000; var numStmt = 25; log.Info($"Processing {numEvents} events for {numThreads} threads and {numStmt} statements"); var listeners = new SupportCountListener[numStmt]; for (var i = 0; i < numStmt; i++) { listeners[i] = new SupportCountListener(); var stmtName = "stmt" + i; var nameAnnotation = "@Name('" + stmtName + "')"; var epl = $"{nameAnnotation}select irstream IntPrimitive, TheString as key from SupportBean#time(1 sec)"; env.CompileDeploy(epl).Statement(stmtName).AddListener(listeners[i]); } try { TrySend(env, numThreads, numEvents, numStmt, listeners); } catch (Exception t) { throw new EPException(t.Message, t); } env.UndeployAll(); }
public void Run(RegressionEnvironment env) { // configure var numThreads = 2; var numStatements = 100; var numEvents = 50000; // set up threading var queue = new LinkedBlockingQueue<Runnable>(); var threadPool = Executors.NewFixedThreadPool( numThreads, new SupportThreadFactory(typeof(MultithreadPatternTimer)).ThreadFactory); // create statements log.Info("Creating statements"); for (var i = 0; i < numStatements; i++) { var statementName = "s" + i; var stmtText = $"@Name('s{i}')select * from pattern" + $" [ every e1=SupportByteArrEventLongId(Id={i}) -> timer:interval(1 seconds)]"; var supportCountListener = new SupportCountListener(); _supportCountListeners[statementName] = supportCountListener; env.CompileDeploy( stmtText, options => options.SetStatementUserObject( _ => supportCountListener)); var statement = env.Statement(statementName); statement.AddListener(supportCountListener); } // submit events var startTime = DateTimeHelper.CurrentTimeMillis; log.Info("Submitting " + numEvents + " events to queue"); var random = new Random(); for (var i = 0; i < numEvents; i++) { var @event = new SupportByteArrEventLongId(random.Next(numStatements), 0); threadPool.Submit(() => env.SendEventBean(@event)); } log.Info("Waiting for completion"); while (!queue.IsEmpty()) { try { Thread.Sleep(5000); } catch (ThreadInterruptedException) { Assert.Fail(); } log.Info("Queue size is " + queue.Count); } var endTime = DateTimeHelper.CurrentTimeMillis; log.Info("Time to complete: " + (endTime - startTime) / 1000 + " sec"); // wait for completion log.Info("Waiting for remaining callbacks"); var startWaitTime = DateTimeHelper.CurrentTimeMillis; while (true) { try { Thread.Sleep(1000); } catch (ThreadInterruptedException) { Assert.Fail(); } var countTotal = GetCount(env, numStatements); if (countTotal >= numEvents) { break; } if (DateTimeHelper.CurrentTimeMillis - startWaitTime > 20000) { Assert.Fail(); } log.Info("Waiting for remaining callbacks: " + countTotal + " of " + numEvents); } // assert var total = GetCount(env, numStatements); Assert.AreEqual(numEvents, total); env.UndeployAll(); }