Github user danny0405 commented on a diff in the pull request:

    https://github.com/apache/storm/pull/2812#discussion_r212787574
  
    --- Diff: 
storm-server/src/main/java/org/apache/storm/localizer/LocallyCachedTopologyBlob.java
 ---
    @@ -230,6 +240,19 @@ public void commitNewVersion(long newVersion) throws 
IOException {
                 //Don't try to move the JAR file in local mode, it does not 
exist because it was not uploaded
                 Files.move(tempLoc, dest);
             }
    +        synchronized (LocallyCachedTopologyBlob.class) {
    +            //This is a bit ugly, but it works.  In order to maintain the 
same directory structure that existed before
    +            // we need to have storm conf, storm jar, and storm code in a 
shared directory, and we need to set the
    +            // permissions for that entire directory, but the tracking is 
on a per item basis, so we are going to end
    +            // up running the permission modification code once for each 
blob that is downloaded (3 times in this case).
    +            // Because the permission modification code runs in a separate 
process we are doing a global lock to avoid
    +            // any races between multiple versions running at the same 
time.  Ideally this would be on a per topology
    +            // basis, but that is a lot harder and the changes run fairly 
quickly so it should not be a big deal.
    +            fsOps.setupStormCodeDir(owner, 
topologyBasicBlobsRootDir.toFile());
    --- End diff --
    
    It's not a big deal if we modify permission for 3 times of every topology 
if they are write conflict safe. Agree with you that a Supervisor scope lock 
would be easier to do, but if we have multi supervisors, the write conflict 
should be considered.


---

Reply via email to