44
44
import java .util .ArrayList ;
45
45
import java .util .List ;
46
46
import java .util .Random ;
47
+ import java .util .concurrent .ExecutionException ;
47
48
import java .util .concurrent .ExecutorService ;
48
49
import java .util .concurrent .Executors ;
49
50
import java .util .concurrent .Future ;
50
51
import java .util .concurrent .TimeUnit ;
51
52
import java .util .concurrent .TimeoutException ;
52
53
import java .util .concurrent .atomic .AtomicInteger ;
53
- import org .junit .Ignore ;
54
54
import org .junit .Test ;
55
55
import org .junit .runner .RunWith ;
56
56
import org .junit .runners .JUnit4 ;
@@ -500,7 +500,6 @@ private void testRejectedReserveRelease(
500
500
}
501
501
502
502
flowController .release (1 , 1 );
503
-
504
503
flowController .reserve (maxElementCount , maxNumBytes );
505
504
flowController .release (maxElementCount , maxNumBytes );
506
505
}
@@ -523,11 +522,11 @@ public void testConcurrentUpdateThresholds_blocking() throws Exception {
523
522
final AtomicInteger totalDecreased = new AtomicInteger (0 );
524
523
final AtomicInteger releasedCounter = new AtomicInteger (0 );
525
524
526
- List <Thread > reserveThreads =
525
+ List <Future > reserveThreads =
527
526
testConcurrentUpdates (
528
- flowController , 100 , 100 , 100 , totalIncreased , totalDecreased , releasedCounter );
529
- for (Thread t : reserveThreads ) {
530
- t .join (200 );
527
+ flowController , 100 , 100 , 10 , totalIncreased , totalDecreased , releasedCounter );
528
+ for (Future t : reserveThreads ) {
529
+ t .get (200 , TimeUnit . MILLISECONDS );
531
530
}
532
531
assertEquals (reserveThreads .size (), releasedCounter .get ());
533
532
assertTrue (totalIncreased .get () > 0 );
@@ -539,9 +538,6 @@ public void testConcurrentUpdateThresholds_blocking() throws Exception {
539
538
testBlockingReserveRelease (flowController , 0 , expectedValue );
540
539
}
541
540
542
- // This test is very flaky. Remove @Ignore once https://github.com/googleapis/gax-java/issues/1359
543
- // is fixed.
544
- @ Ignore
545
541
@ Test
546
542
public void testConcurrentUpdateThresholds_nonBlocking () throws Exception {
547
543
int initialValue = 5000 ;
@@ -559,11 +555,11 @@ public void testConcurrentUpdateThresholds_nonBlocking() throws Exception {
559
555
AtomicInteger totalIncreased = new AtomicInteger (0 );
560
556
AtomicInteger totalDecreased = new AtomicInteger (0 );
561
557
AtomicInteger releasedCounter = new AtomicInteger (0 );
562
- List <Thread > reserveThreads =
558
+ List <Future > reserveThreads =
563
559
testConcurrentUpdates (
564
560
flowController , 100 , 100 , 100 , totalIncreased , totalDecreased , releasedCounter );
565
- for (Thread t : reserveThreads ) {
566
- t .join (200 );
561
+ for (Future t : reserveThreads ) {
562
+ t .get (200 , TimeUnit . MILLISECONDS );
567
563
}
568
564
assertEquals (reserveThreads .size (), releasedCounter .get ());
569
565
assertTrue (totalIncreased .get () > 0 );
@@ -698,8 +694,7 @@ public void run() {
698
694
};
699
695
// blocked by element. Reserve all 5 elements first, reserve in the runnable will be blocked
700
696
flowController .reserve (5 , 1 );
701
- ExecutorService executor = Executors .newCachedThreadPool ();
702
- Future <?> finished1 = executor .submit (runnable );
697
+ Future <?> finished1 = Executors .newSingleThreadExecutor ().submit (runnable );
703
698
try {
704
699
finished1 .get (50 , TimeUnit .MILLISECONDS );
705
700
fail ("reserve should block" );
@@ -722,7 +717,7 @@ public void run() {
722
717
723
718
// Similar to blocked by element, test blocking by bytes.
724
719
flowController .reserve (1 , 5 );
725
- Future <?> finished2 = executor .submit (runnable );
720
+ Future <?> finished2 = Executors . newSingleThreadExecutor () .submit (runnable );
726
721
try {
727
722
finished2 .get (50 , TimeUnit .MILLISECONDS );
728
723
fail ("reserve should block" );
@@ -739,15 +734,15 @@ public void run() {
739
734
.isAtLeast (currentTime );
740
735
}
741
736
742
- private List <Thread > testConcurrentUpdates (
737
+ private List <Future > testConcurrentUpdates (
743
738
final FlowController flowController ,
744
739
final int increaseStepRange ,
745
740
final int decreaseStepRange ,
746
741
final int reserve ,
747
742
final AtomicInteger totalIncreased ,
748
743
final AtomicInteger totalDecreased ,
749
744
final AtomicInteger releasedCounter )
750
- throws InterruptedException {
745
+ throws InterruptedException , TimeoutException , ExecutionException {
751
746
final Random random = new Random ();
752
747
Runnable increaseRunnable =
753
748
new Runnable () {
@@ -779,22 +774,19 @@ public void run() {
779
774
}
780
775
}
781
776
};
782
- List <Thread > updateThreads = new ArrayList <>();
783
- List <Thread > reserveReleaseThreads = new ArrayList <>();
784
- for (int i = 0 ; i < 20 ; i ++) {
785
- Thread increase = new Thread (increaseRunnable );
786
- Thread decrease = new Thread (decreaseRunnable );
787
- Thread reserveRelease = new Thread (reserveReleaseRunnable );
788
- updateThreads .add (increase );
789
- updateThreads .add (decrease );
790
- reserveReleaseThreads .add (reserveRelease );
791
- increase .start ();
792
- decrease .start ();
793
- reserveRelease .start ();
777
+ List <Future > updateFuture = new ArrayList <>();
778
+ List <Future > reserveReleaseFuture = new ArrayList <>();
779
+ ExecutorService executors = Executors .newFixedThreadPool (10 );
780
+ ExecutorService reserveExecutor = Executors .newFixedThreadPool (10 );
781
+ for (int i = 0 ; i < 5 ; i ++) {
782
+ updateFuture .add (executors .submit (increaseRunnable ));
783
+ updateFuture .add (executors .submit (decreaseRunnable ));
784
+ reserveReleaseFuture .add (reserveExecutor .submit (reserveReleaseRunnable ));
794
785
}
795
- for (Thread t : updateThreads ) {
796
- t .join ( 10 );
786
+ for (Future t : updateFuture ) {
787
+ t .get ( 50 , TimeUnit . MILLISECONDS );
797
788
}
798
- return reserveReleaseThreads ;
789
+ executors .shutdown ();
790
+ return reserveReleaseFuture ;
799
791
}
800
792
}
0 commit comments