Esempio n. 1
0
        private void TrySend(EPServiceProvider epService, int numThreads, int numRepeats, int numStatements)
        {
            // Create same statement X times
            var stmt      = new EPStatement[numStatements];
            var listeners = new SupportMTUpdateListener[stmt.Length];

            for (int i = 0; i < stmt.Length; i++)
            {
                stmt[i] = epService.EPAdministrator.CreateEPL(
                    " select * " +
                    " from " + typeof(SupportMarketDataBean).FullName + "#groupwin(symbol)#uni(price)");
                listeners[i]    = new SupportMTUpdateListener();
                stmt[i].Events += listeners[i].Update;
            }

            var threadPool = Executors.NewFixedThreadPool(numThreads);
            var future     = new Future <bool> [numThreads];

            // Start send threads
            // Each threads sends each symbol with price = 0 to numRepeats
            long delta = PerformanceObserver.TimeMillis(
                () => {
                for (int i = 0; i < numThreads; i++)
                {
                    var callable = new StmtSharedViewCallable(numRepeats, epService, SYMBOLS);
                    future[i]    = threadPool.Submit(callable);
                }

                // Shut down
                threadPool.Shutdown();
                threadPool.AwaitTermination(10, TimeUnit.SECONDS);
            });

            for (int i = 0; i < numThreads; i++)
            {
                Assert.IsTrue(future[i].GetValueOrDefault());
            }

            Assert.That(delta, Is.LessThan(5000));   // should take less then 5 seconds even for 100 statements as they need to share resources thread-safely

            // Assert results
            foreach (SupportMTUpdateListener listener in listeners)
            {
                Assert.AreEqual(numRepeats * numThreads * SYMBOLS.Length, listener.NewDataList.Count);
                EventBean[] newDataLast = listener.NewDataList[listener.NewDataList.Count - 1];
                Assert.AreEqual(1, newDataLast.Length);
                var result = newDataLast[0];
                Assert.AreEqual(numRepeats * numThreads, result.Get("datapoints").AsLong());
                Assert.IsTrue(Collections.List(SYMBOLS).Contains(result.Get("symbol")));
                Assert.AreEqual(SumToN(numRepeats) * numThreads, result.Get("total"));
                listener.Reset();
            }

            for (int i = 0; i < stmt.Length; i++)
            {
                stmt[i].Stop();
            }
        }
Esempio n. 2
0
        private void TrySend(int numThreads, int numRepeats, int numStatements)
        {
            // Create same statement X times
            var stmts     = new EPStatement[numStatements];
            var listeners = new SupportMTUpdateListener[stmts.Length];

            for (int i = 0; i < stmts.Length; i++)
            {
                stmts[i] = _engine.EPAdministrator.CreateEPL(
                    " select * " +
                    " from " + typeof(SupportMarketDataBean).FullName + "#groupwin(Symbol)#uni(Price)");
                listeners[i]     = new SupportMTUpdateListener();
                stmts[i].Events += listeners[i].Update;
            }

            // Start send threads
            // Each threads sends each symbol with price = 0 to numRepeats
            var startTime  = PerformanceObserver.MilliTime;
            var threadPool = Executors.NewFixedThreadPool(numThreads);
            var future     = new Future <bool> [numThreads];

            for (int i = 0; i < numThreads; i++)
            {
                var callable = new StmtSharedViewCallable(numRepeats, _engine, SYMBOLS);
                future[i] = threadPool.Submit(callable);
            }

            // Shut down
            threadPool.Shutdown();
            threadPool.AwaitTermination(TimeSpan.FromSeconds(10));
            for (int i = 0; i < numThreads; i++)
            {
                Assert.IsTrue(future[i].GetValueOrDefault());
            }

            var endTime = PerformanceObserver.MilliTime;
            var delta   = endTime - startTime;

            Assert.IsTrue(delta < 5000, "delta=" + delta + " not less then 5 sec");   // should take less then 5 seconds even for 100 statements as they need to share resources thread-safely

            // Assert results
            foreach (SupportMTUpdateListener listener in listeners)
            {
                Assert.AreEqual(numRepeats * numThreads * SYMBOLS.Count, listener.GetNewDataList().Count);
                EventBean[] newDataLast = listener.GetNewDataList()[listener.GetNewDataList().Count - 1];
                Assert.AreEqual(1, newDataLast.Length);
                EventBean result = newDataLast[0];
                Assert.AreEqual(numRepeats * numThreads, result.Get("datapoints").AsLong());
                Assert.IsTrue(SYMBOLS.Contains((string)result.Get("Symbol")));
                Assert.AreEqual(SumToN(numRepeats) * numThreads, result.Get("total"));
                listener.Reset();
            }

            foreach (var stmt in stmts)
            {
                stmt.Stop();
            }
        }