Skip to content

Instantly share code, notes, and snippets.

@rtlong
Last active August 29, 2015 14:16
Show Gist options
  • Save rtlong/19f3b570a024b4f686d7 to your computer and use it in GitHub Desktop.
Save rtlong/19f3b570a024b4f686d7 to your computer and use it in GitHub Desktop.
ConnectionPool issue
#!/usr/bin/env ruby
require 'connection_pool'
require 'redis'
COUNT=1000
$pool = ConnectionPool.new(size: 5, timeout: 10) { Redis.new }
def dont_leak_connection
$pool.with do |connection|
connection.client.call([:client, :list]).split("\n").length
end
end
def leak_connection
$pool.with do |connection|
# this return from within `with` is the issue
return connection.client.call([:client, :list]).split("\n").length
end
end
puts " Non-Leaky ".center(20, '=')
threads = []
COUNT.times do
threads << Thread.new do
print '%i ' % dont_leak_connection
end
end
threads.each(&:join)
puts "\n\n"
puts " Leaky ".center(20, '=')
threads = []
COUNT.times do
threads << Thread.new do
print '%i ' % leak_connection
end
end
threads.each(&:join)
==== Non-Leaky =====
4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 4 4 4 5 5 5 5 4 5 5 5 5 5 5 5
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
====== Leaky =======
5 5 5 5 5 7 9 7 8 11 10 12 13 14 16 15 19 17 19 20 22 22 23 24 25 26 31 27 28 33
34 29 31 36 37 40 32 42 35 43 45 38 39 46 49 50 41 45 47 49 54 55 57 58 51 52
53 57 59 61 61 66 62 63 64 66 68 68 70 70 71 73 73 74 75 80 81 76 83 84 85 78
78 88 89 90 91 79 82 86 87 92 93 97 94 95 96 102 98 99 105 100 101 103 104 110
106 107 108 114 115 116 117 109 111 120 121 112 123 124 113 125 126 127 118
119 122 128 129 131 131 136 132 134 134 136 138 138 140 140 141 142 143 144
145 146 147 148 153 154 150 150 151 158 152 155 156 157 163 159 165 160 167
161 162 164 166 172 173 168 175 176 169 170 171 174 177 178 179 183 180 186
181 187 188 189 191 192 193 194 183 196 197 184 185 199 201 202 203 190 205
195 198 200 204 210 206 207 208 209 215 216 211 212 218 219 213 222 223 214
217 220 221 224 225 226 227 228 233 234 235 230 230 237 238 231 232 236 239
240 241 242 243 244 245 246 247 248 249 250 251 252 253 257 258 254 261 261
255 262 263 264 256 259 265 267 267 268 269 274 275 270 271 272 279 273 276
277 283 278 285 280 287 281 288 290 282 292 284 286 295 289 291 293 294 300
301 296 302 304 297 298 305 306 299 310 303 307 308 309 315 316 311 318 319
320 312 321 322 324 313 325 326 314 327 328 330 331 318 333 334 335 336 337
338 323 339 342 329 332 340 342 343 348 349 344 350 345 351 352 353 354 347
347 356 355 356 357 356 350 13 11 11 11 13 17 17 20 14 22 17 18 19 25 27 21 29
30 23 24 26 28 35 31 32 33 34 36 37 38 43 43 39 45 45 46 48 40 51 52 53 41 48
49 50 57 54 55 61 56 59 59 65 60 62 63 65 66 67 71 68 69 70 76 77 78 72 73 74
81 82 75 85 86 79 80 89 90 83 84 92 94 87 96 88 91 93 95 101 97 103 98 104 106
99 100 102 110 111 105 107 114 108 116 109 117 118 112 113 115 123 124 119 126
120 122 128 129 122 132 125 127 131 131 133 134 139 135 137 137 143 138 145
140 141 148 149 142 151 152 144 153 154 155 146 147 150 160 156 157 158 159
165 161 162 163 164 169 170 171 166 167 168 172 173 174 179 175 180 176 181
177 178 186 182 184 184 187 189 189 191 193 193 185 196 190 194 195 197 201
198 203 204 199 207 208 209 200 202 211 212 205 206 216 217 218 210 213 214
215 222 219 220 226 226 227 221 229 223 230 224 231 232 233 235 236 237 228
241 235 243 238 239 240 247 242 248 249 250 244 245 246 255 251 252 257 253
255 261 256 262 258 259 265 266 267 260 270 263 264 271 272 274 276 268 270
274 275 277 278 279 283 280 284 281 285 286 289 289 283 292 287 295 290 296
292 293 298 299 300 294 301 302 303 307 297 309 310 304 305 306 311 312 308
315 316 318 313 315 317 319 320 321 322 323 324 325 329 326 327 331 332 335
328 330 333 334 339 336 337 338 342 343 345 340 346 341 350 344 348 348 349
351 352 357 353 354 355 360 360 357 362 358 361 365 366 367 369 363 364 372
373 368 374 370 376 372 378 380 375 382 383 378 379 381 385 388 384 390 386
387 389 394 391 392 393 395 396 397 399 399 400 401 404 406 407 402 404 405
409 408 410 411 412 413 415 414 419 416 420 418 418 421 422 425 425 425 426
427 428 430 430 432 433 432 436 436 437 434 440 439 438 441 442 445 444 448
444 449 446 450 451 447 452 455 453 457 455 458 456 460 459 462 462 463 464
465 469 467 467 468 471 470 473 474 472 476 476 477 478 479 480 483 481 482
486 484 486 487 491 488 491 491 492 495 493 494 497 496 498 500 500 501 503
503 506 505 505 507 508 509 512 510 511 513 514 515 517 517 518 519 520 522
522 523 525 525 526 527 528 529 530 531 532 534 534 536 536 537 538 539 541
541 542 543 544 545 547 548 547 549 550 551 555 555 555 555 558 558 558 559
560 563 563 563 565 565 566 570 570 570 570 571 574 574 574 575 576 578 578
579 580 581 582 583 584 586 586 587 589 589 590 591 592 593 594 595 597 597
598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616
617 618 619 620 621 622 623 625 625 626 616 10 10 10 10 11 15 15 15 15 16 17
19 19 20 21 22 24 24 25 26 27
@rtlong
Copy link
Author

rtlong commented Feb 28, 2015

The change from this PR introduced this issue: mperham/connection_pool#67

@rtlong
Copy link
Author

rtlong commented Feb 28, 2015

Sorry, this is with ConnectionPool since 2.1.1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment