Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Licensed to the Apache Software Foundation (ASF) under one
   * or more contributor license agreements.  See the NOTICE file
   * distributed with this work for additional information
   * regarding copyright ownership.  The ASF licenses this file
   * to you under the Apache License, Version 2.0 (the
   * "License"); you may not use this file except in compliance
   * with the License.  You may obtain a copy of the License at
   *
  *     http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 package org.apache.hadoop.hbase.io.hfile;
 
 
HFile writer for version 3.
 
 public class HFileWriterV3 extends HFileWriterV2 {
 
   private static final Log LOG = LogFactory.getLog(HFileWriterV3.class);
 
   private int maxTagsLength = 0;
 
   static class WriterFactoryV3 extends HFile.WriterFactory {
     WriterFactoryV3(Configuration confCacheConfig cacheConf) {
       super(confcacheConf);
     }
 
     @Override
     public Writer createWriter(FileSystem fsPath pathFSDataOutputStream ostream,
         final KVComparator comparatorHFileContext fileContext)
         throws IOException {
       return new HFileWriterV3(fspathostreamcomparatorfileContext);
     }
   }

  
Constructor that takes a path, creates and closes the output stream.
 
   public HFileWriterV3(Configuration confCacheConfig cacheConfFileSystem fsPath path,
       FSDataOutputStream ostreamfinal KVComparator comparator,
       final HFileContext fileContextthrows IOException {
     super(confcacheConffspathostreamcomparatorfileContext);
     if (.isTraceEnabled()) {
       .trace("Writer" + (path != null ? " for " + path : "") +
         " initialized with cacheConf: " + cacheConf +
         " comparator: " + comparator.getClass().getSimpleName() +
         " fileContext: " + fileContext);
     }
   }

  
Add key/value to file. Keys must be added in an order that agrees with the Comparator passed on construction.

Parameters:
kv KeyValue to add. Cannot be empty nor null.
Throws:
java.io.IOException
 
   @Override
   public void append(final KeyValue kvthrows IOException {
     // Currently get the complete arrays
     append(kv.getMvccVersion(), kv.getBuffer(), kv.getKeyOffset(), kv.getKeyLength(),
         kv.getBuffer(), kv.getValueOffset(), kv.getValueLength(), kv.getBuffer(),
         kv.getTagsOffset(), kv.getTagsLengthUnsigned());
     this. = Math.max(this.kv.getMvccVersion());
   }
  
  
Add key/value to file. Keys must be added in an order that agrees with the Comparator passed on construction.

Parameters:
key Key to add. Cannot be empty nor null.
value Value to add. Cannot be empty nor null.
Throws:
java.io.IOException
  public void append(final byte[] keyfinal byte[] valuethrows IOException {
    append(keyvalue.);
  }

  
Add key/value to file. Keys must be added in an order that agrees with the Comparator passed on construction.

Parameters:
key Key to add. Cannot be empty nor null.
value Value to add. Cannot be empty nor null.
tag Tag t add. Cannot be empty or null.
Throws:
java.io.IOException
  public void append(final byte[] keyfinal byte[] valuebyte[] tagthrows IOException {
    append(0, key, 0, key.lengthvalue, 0, value.lengthtag, 0, tag.length);
  }

  
Add key/value to file. Keys must be added in an order that agrees with the Comparator passed on construction.

Parameters:
key
koffset
klength
value
voffset
vlength
tag
tagsOffset
tagLength
Throws:
java.io.IOException
  private void append(final long memstoreTSfinal byte[] keyfinal int koffset,
      final int klengthfinal byte[] valuefinal int voffsetfinal int vlength,
      final byte[] tagfinal int tagsOffsetfinal int tagsLengththrows IOException {
    boolean dupKey = checkKey(keykoffsetklength);
    checkValue(valuevoffsetvlength);
    if (!dupKey) {
      checkBlockBoundary();
    }
    if (!.isWriting())
      newBlock();
    // Write length of key and value and then actual key and value bytes.
    // Additionally, we may also write down the memstoreTS.
    {
      out.writeInt(klength);
       += klength;
      out.writeInt(vlength);
       += vlength;
      out.write(keykoffsetklength);
      out.write(valuevoffsetvlength);
      // Write the additional tag into the stream
      if (.isIncludesTags()) {
        out.writeShort(tagsLength);
        if (tagsLength > 0) {
          out.write(tagtagsOffsettagsLength);
          if (tagsLength > ) {
             = tagsLength;
          }
        }
      }
      if (this..isIncludesMvcc()) {
        WritableUtils.writeVLong(outmemstoreTS);
      }
    }
    // Are we the first key in this block?
    if ( == null) {
      // Copy the key.
       = new byte[klength];
      System.arraycopy(keykoffset, 0, klength);
    }
     = key;
     = koffset;
     = klength;
    ++;
  }
  
  protected void finishFileInfo() throws IOException {
    super.finishFileInfo();
      // In case of Prefix Tree encoding, we always write tags information into HFiles even if all
      // KVs are having no tags.
      .append(., Bytes.toBytes(this.), false);
    } else if (.isIncludesTags()) {
      // When tags are not being written in this file, MAX_TAGS_LEN is excluded
      // from the FileInfo
      .append(., Bytes.toBytes(this.), false);
      boolean tagsCompressed = (.getDataBlockEncoding() != .)
        && .isCompressTags();
      .append(., Bytes.toBytes(tagsCompressed), false);
    }
  }
  protected int getMajorVersion() {
    return 3;
  }
  protected int getMinorVersion() {
  }
  protected void finishClose(FixedFileTrailer trailerthrows IOException {
    // Write out encryption metadata before finalizing if we have a valid crypto context
    if (cryptoContext != ..) {
      // Wrap the context's key and write it as the encryption metadata, the wrapper includes
      // all information needed for decryption
      trailer.setEncryptionKey(EncryptionUtil.wrapKey(cryptoContext.getConf(),
        cryptoContext.getConf().get(.,
          User.getCurrent().getShortName()),
        cryptoContext.getKey()));
    }
    // Now we can finish the close
    super.finishClose(trailer);
  }
New to GrepCode? Check out our FAQ X