예제 #1
0
        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();
        }
예제 #2
0
        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();
        }