Beispiel #1
0
        public void TestBadConnection()
        {
            int MAX_CONNECTIONS            = 3;
            ObjectPoolConfiguration config = new ObjectPoolConfiguration();

            config.MaxObjects = (MAX_CONNECTIONS);
            config.MaxIdle    = (MAX_CONNECTIONS);
            config.MinIdle    = (MAX_CONNECTIONS);
            config.MinEvictableIdleTimeMillis = (60 * 1000);
            config.MaxWait = (60 * 1000);
            MyTestConnectionFactory fact = new MyTestConnectionFactory();

            ObjectPool <MyTestConnection> pool = new ObjectPool <MyTestConnection>(fact, config);

            //borrow first connection and return
            MyTestConnection conn = pool.BorrowObject();

            Assert.AreEqual(1, fact.TotalCreatedConnections);
            pool.ReturnObject(conn);
            Assert.AreEqual(1, fact.TotalCreatedConnections);

            //re-borrow same connection and return
            conn = pool.BorrowObject();
            Assert.AreEqual(1, fact.TotalCreatedConnections);
            pool.ReturnObject(conn);
            Assert.AreEqual(1, fact.TotalCreatedConnections);

            //dispose and make sure we get a new connection
            conn.Dispose();
            conn = pool.BorrowObject();
            Assert.AreEqual(2, fact.TotalCreatedConnections);
            pool.ReturnObject(conn);
            Assert.AreEqual(2, fact.TotalCreatedConnections);
        }
 public ConnectorPoolKey(ConnectorKey connectorKey,
                         ConfigurationPropertiesImpl configProperties,
                         ObjectPoolConfiguration poolingConfig)
 {
     _connectorKey     = connectorKey;
     _configProperties = configProperties;
     _poolingConfig    = poolingConfig;
 }
Beispiel #3
0
    void Start()
    {
        ObjectPoolConfiguration poolConfiguration = new ObjectPoolConfiguration
        {
            prefab          = protoTypeObject,
            prefabTagName   = prefabName,
            poolSize        = poolSize,
            initialPosition = GameConstants.PoolStartPosition
        };

        pool = new ObjectPool(poolConfiguration);
    }
        /// <summary>
        /// Create a new ObjectPool
        /// </summary>
        /// <param name="handler">Handler for objects</param>
        /// <param name="config">Configuration for the pool</param>
        public ObjectPool(ObjectPoolHandler <T> handler,
                          ObjectPoolConfiguration config)
        {
            Assertions.NullCheck(handler, "handler");
            Assertions.NullCheck(config, "config");

            _handler = handler;
            //clone it
            _config =
                (ObjectPoolConfiguration)SerializerUtil.CloneObject(config);
            //validate it
            _config.Validate();
        }
Beispiel #5
0
        public void TestWithManyThreads()
        {
            int NUM_ITERATIONS             = 10;
            int NUM_THREADS                = 10;
            int MAX_CONNECTIONS            = NUM_THREADS - 3; //make sure we get some waiting
            ObjectPoolConfiguration config = new ObjectPoolConfiguration();

            config.MaxObjects = (MAX_CONNECTIONS);
            config.MaxIdle    = (MAX_CONNECTIONS);
            config.MinIdle    = (MAX_CONNECTIONS);
            config.MinEvictableIdleTimeMillis = (60 * 1000);
            config.MaxWait = (60 * 1000);
            MyTestConnectionFactory fact = new MyTestConnectionFactory();

            ObjectPool <MyTestConnection> pool = new ObjectPool <MyTestConnection>(fact, config);

            MyTestThread[] threads = new MyTestThread[NUM_THREADS];
            for (int i = 0; i < threads.Length; i++)
            {
                threads[i] = new MyTestThread(pool, NUM_ITERATIONS);
                threads[i].Start();
            }

            foreach (MyTestThread thread in threads)
            {
                thread.Shutdown();
            }

            //these should be the same since we never
            //should have disposed anything
            Assert.AreEqual(MAX_CONNECTIONS, fact.TotalCreatedConnections);
            ObjectPool <MyTestConnection> .Statistics stats = pool.GetStatistics();
            Assert.AreEqual(0, stats.NumActive);
            Assert.AreEqual(MAX_CONNECTIONS, stats.NumIdle);

            pool.Shutdown();
            stats = pool.GetStatistics();
            Assert.AreEqual(0, stats.NumActive);
            Assert.AreEqual(0, stats.NumIdle);
        }
        public void TestObjectPoolConfiguration()
        {
            ObjectPoolConfiguration v1 = new ObjectPoolConfiguration();

            v1.MaxObjects = 1;
            v1.MaxIdle    = 2;
            v1.MaxWait    = 3;
            v1.MinEvictableIdleTimeMillis = 4;
            v1.MinIdle = 5;
            ObjectPoolConfiguration v2 =
                (ObjectPoolConfiguration)CloneObject(v1);

            Assert.IsTrue(!Object.ReferenceEquals(v1, v2));

            Assert.AreEqual(v1, v2);

            Assert.AreEqual(1, v2.MaxObjects);
            Assert.AreEqual(2, v2.MaxIdle);
            Assert.AreEqual(3, v2.MaxWait);
            Assert.AreEqual(4, v2.MinEvictableIdleTimeMillis);
            Assert.AreEqual(5, v2.MinIdle);
        }
Beispiel #7
0
        public void TestIdleCleanup()
        {
            ObjectPoolConfiguration config = new ObjectPoolConfiguration();

            config.MaxObjects = (3);
            config.MaxIdle    = (2);
            config.MinIdle    = (1);
            config.MinEvictableIdleTimeMillis = (3000);
            config.MaxWait = (60 * 1000);
            MyTestConnectionFactory fact = new MyTestConnectionFactory();

            ObjectPool <MyTestConnection> pool = new ObjectPool <MyTestConnection>(fact, config);

            MyTestConnection conn1 = (MyTestConnection)pool.BorrowObject();
            MyTestConnection conn2 = (MyTestConnection)pool.BorrowObject();
            MyTestConnection conn3 = (MyTestConnection)pool.BorrowObject();

            Assert.AreEqual(3, fact.TotalCreatedConnections);
            pool.ReturnObject(conn1);
            Assert.AreEqual(1, pool.GetStatistics().NumIdle);
            pool.ReturnObject(conn2);
            Assert.AreEqual(2, pool.GetStatistics().NumIdle);
            pool.ReturnObject(conn3);
            Assert.AreEqual(2, pool.GetStatistics().NumIdle);
            Assert.AreEqual(false, conn1.IsGood);
            Assert.AreEqual(true, conn2.IsGood);
            Assert.AreEqual(true, conn3.IsGood);
            Thread.Sleep(((int)(config.MinEvictableIdleTimeMillis + 1000)));
            MyTestConnection conn4 = (MyTestConnection)pool.BorrowObject();

            Assert.AreSame(conn3, conn4);
            Assert.AreEqual(false, conn1.IsGood);
            Assert.AreEqual(false, conn2.IsGood);
            Assert.AreEqual(true, conn3.IsGood);
            Assert.AreEqual(true, conn4.IsGood);
        }
Beispiel #8
0
 public ObjectPoolConfiguration Validate(ObjectPoolConfiguration original)
 {
     return(original);
 }
Beispiel #9
0
 public ObjectPool(ObjectPoolConfiguration config)
 {
     poolConfig = config;
     InstantiatePool();
 }