[ 
https://issues.apache.org/jira/browse/ACCUMULO-4153?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15166349#comment-15166349
 ] 

ASF GitHub Bot commented on ACCUMULO-4153:
------------------------------------------

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

    https://github.com/apache/accumulo/pull/73#discussion_r54027165
  
    --- Diff: 
core/src/main/java/org/apache/accumulo/core/file/rfile/bcfile/Compression.java 
---
    @@ -147,25 +148,27 @@ public synchronized OutputStream 
createCompressionStream(OutputStream downStream
         },
     
         GZ(COMPRESSION_GZ) {
    -      private transient DefaultCodec codec;
    +      private transient AtomicReference<DefaultCodec> codec = new 
AtomicReference<DefaultCodec>();
     
           @Override
    -      synchronized CompressionCodec getCodec() {
    -        if (codec == null) {
    -          codec = new DefaultCodec();
    -          codec.setConf(conf);
    +      CompressionCodec getCodec() {
    +        DefaultCodec resultCodec = codec.get();
    +        if (null == resultCodec) {
    +          DefaultCodec newCodec = new DefaultCodec();
    +          newCodec.setConf(conf);
    +          codec.compareAndSet(null, newCodec);
             }
     
    -        return codec;
    +        return codec.get();
    --- End diff --
    
    I was doing too many things at once and tried to account for the case where 
we didn't win the CAS operation. I could have checked the result of the 
compareAndSet method and returned codec.get() in that case and avoided the 
funny logic to account for that ( which is why I did what I did ). Now that I'm 
home that's all obvious; however, according to what Brian wrote above I may 
just take a different approach when I have time again..hopefully tomorrow. I 
think his tact is simpler


> Change getCodec method in BCFile's Compression class
> ----------------------------------------------------
>
>                 Key: ACCUMULO-4153
>                 URL: https://issues.apache.org/jira/browse/ACCUMULO-4153
>             Project: Accumulo
>          Issue Type: Improvement
>          Components: core
>    Affects Versions: 1.6.5
>            Reporter: marco polo
>            Assignee: marco polo
>            Priority: Minor
>             Fix For: 1.6.6, 1.7.2, 1.8.0
>
>         Attachments: patchCompression
>
>
> Seeing major blockages blockages on the Synchronized method of getCodec.  My 
> initial change was to change it to double checked locking; however, spoke 
> with [~kturner] and I'm changing this to an AtomicReference. Have a patch for 
> the former but am in the process of testing the AtomicReference patch
> Note this is for Gzip



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to