File tree Expand file tree Collapse file tree 2 files changed +48
-2
lines changed Expand file tree Collapse file tree 2 files changed +48
-2
lines changed Original file line number Diff line number Diff line change @@ -42,10 +42,10 @@ class Pool {
4242 acquire ( key ) {
4343 let resource ;
4444 let pool = this . _pools [ key ] || [ ] ;
45- while ( pool . length ) {
45+ while ( pool . length ) {
4646 resource = pool . pop ( ) ;
4747
48- if ( this . _validate ( resource ) ) {
48+ if ( this . _validate ( resource ) ) {
4949 return resource ;
5050 } else {
5151 this . _destroy ( resource ) ;
@@ -55,6 +55,20 @@ class Pool {
5555 return this . _create ( this . _release ) ;
5656 }
5757
58+ purge ( key ) {
59+ let resource ;
60+ let pool = this . _pools [ key ] || [ ] ;
61+ while ( pool . length ) {
62+ resource = pool . pop ( ) ;
63+ this . _destroy ( resource )
64+ }
65+ delete this . _pools [ key ]
66+ }
67+
68+ has ( key ) {
69+ return ( key in this . _pools ) ;
70+ }
71+
5872 _release ( key , resource ) {
5973 let pool = this . _pools [ key ] ;
6074 if ( ! pool ) {
Original file line number Diff line number Diff line change @@ -120,6 +120,38 @@ describe('Pool', function() {
120120 expect ( destroyed [ 0 ] . id ) . toBe ( r0 . id ) ;
121121 expect ( destroyed [ 1 ] . id ) . toBe ( r1 . id ) ;
122122 } ) ;
123+
124+
125+ it ( 'purges keys' , function ( ) {
126+ // Given a pool that allocates
127+ var counter = 0 ;
128+ var key1 = "bolt://localhost:7687" ;
129+ var key2 = "bolt://localhost:7688" ;
130+ var pool = new Pool ( function ( release ) { return new Resource ( counter ++ , release ) } ,
131+ function ( res ) { res . destroyed = true ; return true }
132+ ) ;
133+
134+ // When
135+ var r0 = pool . acquire ( key1 ) ;
136+ var r1 = pool . acquire ( key2 ) ;
137+ r0 . close ( key1 ) ;
138+ r1 . close ( key2 ) ;
139+ expect ( pool . has ( key1 ) ) . toBe ( true ) ;
140+ expect ( pool . has ( key2 ) ) . toBe ( true ) ;
141+ pool . purge ( key1 ) ;
142+ expect ( pool . has ( key1 ) ) . toBe ( false ) ;
143+ expect ( pool . has ( key2 ) ) . toBe ( true ) ;
144+
145+ var r2 = pool . acquire ( key1 ) ;
146+ var r3 = pool . acquire ( key2 ) ;
147+
148+ // Then
149+ expect ( r0 . id ) . toBe ( 0 ) ;
150+ expect ( r0 . destroyed ) . toBe ( true ) ;
151+ expect ( r1 . id ) . toBe ( 1 ) ;
152+ expect ( r2 . id ) . toBe ( 2 ) ;
153+ expect ( r3 . id ) . toBe ( 1 ) ;
154+ } ) ;
123155} ) ;
124156
125157function Resource ( id , release ) {
You can’t perform that action at this time.
0 commit comments