1 /* 2 * Hunt - A redis client library for D programming language. 3 * 4 * Copyright (C) 2018-2019 HuntLabs 5 * 6 * Website: https://www.huntlabs.net/ 7 * 8 * Licensed under the Apache-2.0 License. 9 * 10 */ 11 12 module hunt.redis.util.Pool; 13 14 // import hunt.redis.Exceptions; 15 16 // import hunt.Exceptions; 17 // import hunt.logging.ConsoleLogger; 18 // import hunt.util.Common; 19 20 // import hunt.pool.PooledObjectFactory; 21 // import hunt.pool.impl.GenericObjectPool; 22 // import hunt.util.pool; 23 24 25 26 // abstract class Pool(T) : Closeable { 27 // protected GenericObjectPool!(T) internalPool; 28 29 // /** 30 // * Using this constructor means you have to set and initialize the internalPool yourself. 31 // */ 32 // this() { 33 // } 34 35 // this(GenericObjectPoolConfig poolConfig, PooledObjectFactory!(T) factory) { 36 // initPool(poolConfig, factory); 37 // } 38 39 // override 40 // void close() { 41 // destroy(); 42 // } 43 44 // bool isClosed() { 45 // return this.internalPool.isClosed(); 46 // } 47 48 // void initPool(GenericObjectPoolConfig poolConfig, PooledObjectFactory!(T) factory) { 49 50 // if (this.internalPool !is null) { 51 // try { 52 // closeInternalPool(); 53 // } catch (Exception e) { 54 // debug warning(e.msg); 55 // version(HUNT_REDIS_DEBUG) warning(e); 56 // } 57 // } 58 59 // this.internalPool = new GenericObjectPool!(T)(factory, poolConfig); 60 // } 61 62 // T getResource() { 63 // try { 64 // return internalPool.borrowObject(); 65 // } catch (NoSuchElementException nse) { 66 // debug warning(nse.msg); 67 // version(HUNT_REDIS_DEBUG) warning(nse); 68 // if (nse.next is null) { // The exception was caused by an exhausted pool 69 // throw new RedisExhaustedPoolException( 70 // "Could not get a resource since the pool is exhausted", nse); 71 // } 72 // // Otherwise, the exception was caused by the implemented activateObject() or ValidateObject() 73 // throw new RedisException("Could not get a resource from the pool", nse); 74 // } catch (Exception e) { 75 // debug warning(e.msg); 76 // version(HUNT_REDIS_DEBUG) warning(e); 77 // throw new RedisConnectionException("Could not get a resource from the pool", e); 78 // } 79 // } 80 81 // protected void returnResourceObject(T resource) { 82 // if (resource is null) { 83 // return; 84 // } 85 86 // try { 87 // internalPool.returnObject(resource); 88 // } catch (Exception e) { 89 // debug warning(e.msg); 90 // version(HUNT_REDIS_DEBUG) warning(e); 91 // throw new RedisException("Could not return the resource to the pool", e); 92 // } 93 // } 94 95 // protected void returnBrokenResource(T resource) { 96 // if (resource !is null) { 97 // returnBrokenResourceObject(resource); 98 // } 99 // } 100 101 // protected void returnResource(T resource) { 102 // if (resource !is null) { 103 // returnResourceObject(resource); 104 // } 105 // } 106 107 // void destroy() { 108 // closeInternalPool(); 109 // } 110 111 // protected void returnBrokenResourceObject(T resource) { 112 // try { 113 // internalPool.invalidateObject(resource); 114 // } catch (Exception e) { 115 // debug warning(e.msg); 116 // version(HUNT_REDIS_DEBUG) warning(e); 117 // throw new RedisException("Could not return the broken resource to the pool", e); 118 // } 119 // } 120 121 // protected void closeInternalPool() { 122 // try { 123 // internalPool.close(); 124 // } catch (Exception e) { 125 // debug warning(e.msg); 126 // version(HUNT_REDIS_DEBUG) warning(e); 127 // throw new RedisException("Could not destroy the pool", e); 128 // } 129 // } 130 131 // /** 132 // * Returns the number of instances currently borrowed from this pool. 133 // * 134 // * @return The number of instances currently borrowed from this pool, -1 if 135 // * the pool is inactive. 136 // */ 137 // int getNumActive() { 138 // if (poolInactive()) { 139 // return -1; 140 // } 141 142 // return this.internalPool.getNumActive(); 143 // } 144 145 // /** 146 // * Returns the number of instances currently idle in this pool. 147 // * 148 // * @return The number of instances currently idle in this pool, -1 if the 149 // * pool is inactive. 150 // */ 151 // int getNumIdle() { 152 // if (poolInactive()) { 153 // return -1; 154 // } 155 156 // return this.internalPool.getNumIdle(); 157 // } 158 159 // /** 160 // * Returns an estimate of the number of threads currently blocked waiting for 161 // * a resource from this pool. 162 // * 163 // * @return The number of threads waiting, -1 if the pool is inactive. 164 // */ 165 // int getNumWaiters() { 166 // if (poolInactive()) { 167 // return -1; 168 // } 169 170 // return this.internalPool.getNumWaiters(); 171 // } 172 173 // /** 174 // * Returns the mean waiting time spent by threads to obtain a resource from 175 // * this pool. 176 // * 177 // * @return The mean waiting time, in milliseconds, -1 if the pool is 178 // * inactive. 179 // */ 180 // long getMeanBorrowWaitTimeMillis() { 181 // if (poolInactive()) { 182 // return -1; 183 // } 184 185 // return this.internalPool.getMeanBorrowWaitTimeMillis(); 186 // } 187 188 // /** 189 // * Returns the maximum waiting time spent by threads to obtain a resource 190 // * from this pool. 191 // * 192 // * @return The maximum waiting time, in milliseconds, -1 if the pool is 193 // * inactive. 194 // */ 195 // long getMaxBorrowWaitTimeMillis() { 196 // if (poolInactive()) { 197 // return -1; 198 // } 199 200 // return this.internalPool.getMaxBorrowWaitTimeMillis(); 201 // } 202 203 // private bool poolInactive() { 204 // return this.internalPool is null || this.internalPool.isClosed(); 205 // } 206 207 // void addObjects(int count) { 208 // try { 209 // for (int i = 0; i < count; i++) { 210 // this.internalPool.addObject(); 211 // } 212 // } catch (Exception e) { 213 // debug warning(e.msg); 214 // version(HUNT_REDIS_DEBUG) warning(e); 215 // throw new RedisException("Error trying to add idle objects", e); 216 // } 217 // } 218 // }