fapifta commented on PR #4934:
URL: https://github.com/apache/ozone/pull/4934#issuecomment-1599677381

   @ashishkumar50, multiple reads are fine concurrently, but if we do not guard 
reads **and** writes with either a lock or by putting them into a synchronized 
method, then write may happen during reads, and that leads to a 
ConcurrentModificationException.
   
   Consider the following example which is a scheduling that can happen in an 
env if write happens during iteration:
   
   ```java
       List<String> strs = new ArrayList<>();
       strs.add("foo");
   
       Semaphore sem = new Semaphore(1);
       CountDownLatch latch = new CountDownLatch(2);
   
       Runnable r1 = () -> {
         try {
           sem.acquire();
           latch.countDown();
           latch.await();
           strs.add("bar");
           sem.release();
         } catch (Exception e) {
           e.printStackTrace();
         }
       };
   
       Runnable r2 = () -> {
         try {
           for (String s : strs) {
             latch.countDown();
             latch.await();
             sem.acquire();
             System.out.println(s);
             sem.release();
           }
         } catch (Exception e) {
           e.printStackTrace();
         }
       };
   
       new Thread(r1).start();
       new Thread(r2).start();
   ```
   
   This code produces a ConcurrentModificationException consistently.
   
   So @Galsza, I think, either we use a lock around the access to the rootCA 
certificate list, or we use synchronized, but we need to guard all accesses, as 
the addition of a new rootCA certificate will happen on a different thread than 
the one that serves requests and iterates over the list.
   
   I know that the chances to win the lottery is higher than to hit this here, 
but still, if we started to think about it, then let's get to the bottom of it, 
and have a proper solution.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to