Beispiel #1
0
        public void PutManyVarsSameNamespace(bool parallel, int varCount, int tblCount)
        {
            var ns = "NS_{0}_{1}_{2}".Args(parallel, varCount, tblCount);

            var user1 = new Agni.Locking.Server.LockSessionData(new LockSessionID(null), "User 1", 10000);
            var user2 = new Agni.Locking.Server.LockSessionData(new LockSessionID(null), "User 2", 10000);


            var sw = Stopwatch.StartNew();

            Action <int> put = (i) =>
            {
                var statements = new LockOp.StatementOp[tblCount];
                for (var t = 0; t < tblCount; t++)
                {
                    statements[t] = LockOp.Assert(LockOp.SetVar("t" + t.ToString(), "v" + i.ToString(), i, "Variable number " + i.ToString()));
                }

                var insert = new LockTransaction("Set var", ns, 0, 0.0d, statements);
                var result = m_Server.ExecuteLockTransaction(user1, insert);
                Aver.IsTrue(LockStatus.TransactionOK == result.Status);
            };

            if (parallel)
            {
                Parallel.For(0, varCount, put);
            }
            else
            {
                for (var i = 0; i < varCount; i++)
                {
                    put(i);
                }
            }

            Console.WriteLine("Put {0} in {1} ms at {2} ops/sec".Args(varCount, sw.ElapsedMilliseconds, varCount / (sw.ElapsedTicks / (double)Stopwatch.Frequency)));

            sw.Restart();

            Action <int> get = (i) =>
            {
                var statements = new LockOp.StatementOp[tblCount];
                for (var t = 0; t < tblCount; t++)
                {
                    statements[t] = LockOp.Assert(LockOp.Exists("t" + t.ToString(), "v" + i.ToString(), i));
                }

                var read   = new LockTransaction("Get var", ns, 0, 0.0d, statements);
                var result = m_Server.ExecuteLockTransaction(user2, read);
                Aver.IsTrue(LockStatus.TransactionOK == result.Status);
            };

            if (parallel)
            {
                Parallel.For(0, varCount, get);
            }
            else
            {
                for (var i = 0; i < varCount; i++)
                {
                    get(i);
                }
            }

            Console.WriteLine("Read/verified {0} in {1} ms at {2} ops/sec".Args(varCount, sw.ElapsedMilliseconds, varCount / (sw.ElapsedTicks / (double)Stopwatch.Frequency)));
        }
Beispiel #2
0
        public void PutManyVarsSameNamespaceAndExpireVariable(bool parallel, int varCount, int tblCount)
        {
            var ns  = "NS3_{0}_{1}_{2}".Args(parallel, varCount, tblCount);
            var ved = App.TimeSource.UTCNow.AddSeconds(7);

            var user1 = new Agni.Locking.Server.LockSessionData(new LockSessionID(null), "User 1", 10000);//the session is long, but expiration will be set on each var
            var user2 = new Agni.Locking.Server.LockSessionData(new LockSessionID(null), "User 2", 10000);


            var sw = Stopwatch.StartNew();

            Action <int> put = (i) =>
            {
                var statements = new LockOp.StatementOp[tblCount];
                for (var t = 0; t < tblCount; t++)
                {
                    statements[t] = LockOp.Assert(LockOp.SetVar("t" + t.ToString(), "v" + i.ToString(), i, "Variable number " + i.ToString(), expirationTimeUTC: ved));//EXPIRATION IS SET!!!!
                }
                var insert = new LockTransaction("Set var", ns, 0, 0.0d, statements);
                var result = m_Server.ExecuteLockTransaction(user1, insert);
                Aver.IsTrue(LockStatus.TransactionOK == result.Status);
            };

            if (parallel)
            {
                Parallel.For(0, varCount, put);
            }
            else
            {
                for (var i = 0; i < varCount; i++)
                {
                    put(i);
                }
            }

            Console.WriteLine("Put {0} in {1} ms at {2} ops/sec".Args(varCount, sw.ElapsedMilliseconds, varCount / (sw.ElapsedTicks / (double)Stopwatch.Frequency)));


            sw.Restart();

            Action <int> get = (i) =>
            {
                var statements = new LockOp.StatementOp[tblCount];
                for (var t = 0; t < tblCount; t++)
                {
                    statements[t] = LockOp.Assert(LockOp.Exists("t" + t.ToString(), "v" + i.ToString(), i));//EXISTS
                }
                var read   = new LockTransaction("Get var", ns, 0, 0.0d, statements);
                var result = m_Server.ExecuteLockTransaction(user2, read);
                Aver.IsTrue(LockStatus.TransactionOK == result.Status);
            };

            if (parallel)
            {
                Parallel.For(0, varCount, get);
            }
            else
            {
                for (var i = 0; i < varCount; i++)
                {
                    get(i);
                }
            }

            Console.WriteLine("Read/verified that all exists {0} in {1} ms at {2} ops/sec".Args(varCount, sw.ElapsedMilliseconds, varCount / (sw.ElapsedTicks / (double)Stopwatch.Frequency)));


            Thread.Sleep(15000);//block for sessions to timeout


            sw.Restart();

            Action <int> get2 = (i) =>
            {
                var statements = new LockOp.StatementOp[tblCount];
                for (var t = 0; t < tblCount; t++)
                {
                    statements[t] = LockOp.Assert(LockOp.Not(LockOp.Exists("t" + t.ToString(), "v" + i.ToString(), i))); //NOT EXISTS
                }
                var read   = new LockTransaction("Get var", ns, 0, 0.0d, statements);
                var result = m_Server.ExecuteLockTransaction(user2, read);
                Aver.IsTrue(LockStatus.TransactionOK == result.Status);
            };

            if (parallel)
            {
                Parallel.For(0, varCount, get2);
            }
            else
            {
                for (var i = 0; i < varCount; i++)
                {
                    get2(i);
                }
            }

            Console.WriteLine("Read/verified that all timed-out {0} in {1} ms at {2} ops/sec".Args(varCount, sw.ElapsedMilliseconds, varCount / (sw.ElapsedTicks / (double)Stopwatch.Frequency)));
        }