[
https://issues.apache.org/jira/browse/HBASE-10835?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13986333#comment-13986333
]
Matt Corgan commented on HBASE-10835:
-------------------------------------
{code}
[email protected]
+public class EncoderPoolImpl implements EncoderPool {
+
+ private List<PrefixTreeEncoder> unusedEncoders = new
ArrayList<PrefixTreeEncoder>();
+
+ @Override
+ public PrefixTreeEncoder checkOut(OutputStream outputStream, boolean
includeMvccVersion) {
+ PrefixTreeEncoder encoder = null;
+ synchronized (this) {
+ if (!unusedEncoders.isEmpty()) {
+ encoder = unusedEncoders.remove(0);
+ }
+ }
+ if (encoder == null) {
+ encoder = new PrefixTreeEncoder(outputStream, includeMvccVersion);
+ } else {
+ encoder.reset(outputStream, includeMvccVersion);
+ }
+ return encoder;
+ }
+
+ @Override
+ public void checkIn(PrefixTreeEncoder encoder) {
+ synchronized (this) {
+ this.unusedEncoders.add(encoder);
+ }
+ }
+}
{code}
instead of a plain ArrayList for unusedEncoders, maybe you should use a
LinkedBlockingQueue? then you wouldn't have to synchronize the methods
> DBE encode path improvements
> ----------------------------
>
> Key: HBASE-10835
> URL: https://issues.apache.org/jira/browse/HBASE-10835
> Project: HBase
> Issue Type: Improvement
> Reporter: Anoop Sam John
> Assignee: Anoop Sam John
> Fix For: 0.99.0
>
> Attachments: HBASE-10835.patch, HBASE-10835_V2.patch
>
>
> Here 1st we write KVs (Cells) into a buffer and then passed to DBE encoder.
> Encoder again reads kvs one by one from the buffer and encodes and creates a
> new buffer.
> There is no need to have this model now. Previously we had option of no
> encode in disk and encode only in cache. At that time the read buffer from a
> HFile block was passed to this and encodes.
> So encode cell by cell can be done now. Making this change will need us to
> have a NoOp DBE impl which just do the write of a cell as it is with out any
> encoding.
--
This message was sent by Atlassian JIRA
(v6.2#6252)