[
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)