Sumit Agrawal created HDDS-15475:
------------------------------------

             Summary: containerMap is not threadsafe
                 Key: HDDS-15475
                 URL: https://issues.apache.org/jira/browse/HDDS-15475
             Project: Apache Ozone
          Issue Type: Bug
          Components: SCM
            Reporter: Sumit Agrawal


As part of fix, *HDDS-12555.* *Combine containerMap and replicaMap in 
ContainerStateMap ,* containerMap as updated combining is not threadsafe.
 
*Issue as code review:* concurrency issue as below: * {*}Earlier{*}, 
containerMap and replicaMap are ConcurrentHashMap as thread Safe
 * {*}Now{*}, containerMap which have map as  TreeMap which is *not* Thread safe



*They are accessed with 2 different lock be caller,* # {{*lock*}} Object for 
add/remove container as global lock
 # {{stripedLock}} for container update and access at *container level* lock 
with container ID, Above lock is not taken.



So, *Update* is happening with *different lock* and *Read* is happening with 
{*}another lock{*}. This can cause crash as thread safe is no maintained.
 
As solution,
1. make TreeMap thread safe and all internal map as Synchronized Wrapper
    like Collections.synchronizedSortedMap(new TreeMap<>());
    But tailMap iterator is not threadsafe. So better to use 
{*}ConcurrentSkipListMap{*}<>
 
2. OR Rollback combine both map and let be ConcurrentHashMap if above change 
does not have any performance improvement.
 
cc: [~szetszwo] 
 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

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

Reply via email to