You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@carbondata.apache.org by ch...@apache.org on 2016/08/15 07:09:09 UTC

[24/52] [partial] incubator-carbondata git commit: Renamed packages to org.apache.carbondata and fixed errors

http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/cd6a4ff3/core/src/main/java/org/carbondata/core/cache/dictionary/AbstractDictionaryCache.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/carbondata/core/cache/dictionary/AbstractDictionaryCache.java b/core/src/main/java/org/carbondata/core/cache/dictionary/AbstractDictionaryCache.java
deleted file mode 100644
index 390bcc8..0000000
--- a/core/src/main/java/org/carbondata/core/cache/dictionary/AbstractDictionaryCache.java
+++ /dev/null
@@ -1,297 +0,0 @@
-/*
- * 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.carbondata.core.cache.dictionary;
-
-import java.io.IOException;
-import java.util.List;
-
-import org.carbondata.common.factory.CarbonCommonFactory;
-import org.carbondata.core.cache.Cache;
-import org.carbondata.core.cache.CacheType;
-import org.carbondata.core.cache.CarbonLRUCache;
-import org.carbondata.core.carbon.path.CarbonTablePath;
-import org.carbondata.core.constants.CarbonCommonConstants;
-import org.carbondata.core.datastorage.store.filesystem.CarbonFile;
-import org.carbondata.core.datastorage.store.impl.FileFactory;
-import org.carbondata.core.reader.CarbonDictionaryColumnMetaChunk;
-import org.carbondata.core.reader.CarbonDictionaryMetadataReader;
-import org.carbondata.core.service.DictionaryService;
-import org.carbondata.core.service.PathService;
-import org.carbondata.core.util.CarbonProperties;
-import org.carbondata.core.util.CarbonUtil;
-import org.carbondata.core.util.CarbonUtilException;
-
-/**
- * Abstract class which implements methods common to reverse and forward dictionary cache
- */
-public abstract class AbstractDictionaryCache<K extends DictionaryColumnUniqueIdentifier,
-    V extends Dictionary>
-    implements Cache<DictionaryColumnUniqueIdentifier, Dictionary> {
-
-  /**
-   * thread pool size to be used for dictionary data reading
-   */
-  protected int thread_pool_size;
-
-  /**
-   * LRU cache variable
-   */
-  protected CarbonLRUCache carbonLRUCache;
-
-  /**
-   * c store path
-   */
-  protected String carbonStorePath;
-
-  /**
-   * @param carbonStorePath
-   * @param carbonLRUCache
-   */
-  public AbstractDictionaryCache(String carbonStorePath, CarbonLRUCache carbonLRUCache) {
-    this.carbonStorePath = carbonStorePath;
-    this.carbonLRUCache = carbonLRUCache;
-    initThreadPoolSize();
-  }
-
-  /**
-   * This method will initialize the thread pool size to be used for creating the
-   * max number of threads for a job
-   */
-  private void initThreadPoolSize() {
-    try {
-      thread_pool_size = Integer.parseInt(CarbonProperties.getInstance()
-          .getProperty(CarbonCommonConstants.NUM_CORES_LOADING,
-              CarbonCommonConstants.NUM_CORES_DEFAULT_VAL));
-    } catch (NumberFormatException e) {
-      thread_pool_size = Integer.parseInt(CarbonCommonConstants.NUM_CORES_DEFAULT_VAL);
-    }
-  }
-
-  /**
-   * This method will check if dictionary and its metadata file exists for a given column
-   *
-   * @param dictionaryColumnUniqueIdentifier unique identifier which contains dbName,
-   *                                         tableName and columnIdentifier
-   * @return
-   */
-  protected boolean isFileExistsForGivenColumn(
-      DictionaryColumnUniqueIdentifier dictionaryColumnUniqueIdentifier) {
-    PathService pathService = CarbonCommonFactory.getPathService();
-    CarbonTablePath carbonTablePath = pathService
-        .getCarbonTablePath(dictionaryColumnUniqueIdentifier.getColumnIdentifier(), carbonStorePath,
-            dictionaryColumnUniqueIdentifier.getCarbonTableIdentifier());
-
-    String dictionaryFilePath =
-        carbonTablePath.getDictionaryFilePath(dictionaryColumnUniqueIdentifier
-            .getColumnIdentifier().getColumnId());
-    String dictionaryMetadataFilePath =
-        carbonTablePath.getDictionaryMetaFilePath(dictionaryColumnUniqueIdentifier
-            .getColumnIdentifier().getColumnId());
-    // check if both dictionary and its metadata file exists for a given column
-    return CarbonUtil.isFileExists(dictionaryFilePath) && CarbonUtil
-        .isFileExists(dictionaryMetadataFilePath);
-  }
-
-  /**
-   * This method will read dictionary metadata file and return the dictionary meta chunks
-   *
-   * @param dictionaryColumnUniqueIdentifier
-   * @return list of dictionary metadata chunks
-   * @throws IOException read and close method throws IO exception
-   */
-  protected CarbonDictionaryColumnMetaChunk readLastChunkFromDictionaryMetadataFile(
-      DictionaryColumnUniqueIdentifier dictionaryColumnUniqueIdentifier) throws IOException {
-    DictionaryService dictService = CarbonCommonFactory.getDictionaryService();
-    CarbonDictionaryMetadataReader columnMetadataReaderImpl = dictService
-        .getDictionaryMetadataReader(dictionaryColumnUniqueIdentifier.getCarbonTableIdentifier(),
-            dictionaryColumnUniqueIdentifier.getColumnIdentifier(), carbonStorePath);
-
-    CarbonDictionaryColumnMetaChunk carbonDictionaryColumnMetaChunk = null;
-    // read metadata file
-    try {
-      carbonDictionaryColumnMetaChunk =
-          columnMetadataReaderImpl.readLastEntryOfDictionaryMetaChunk();
-    } finally {
-      // close the metadata reader
-      columnMetadataReaderImpl.close();
-    }
-    return carbonDictionaryColumnMetaChunk;
-  }
-
-  /**
-   * This method will validate dictionary metadata file for any modification
-   *
-   * @param carbonFile
-   * @param fileTimeStamp
-   * @param endOffset
-   * @return
-   */
-  private boolean isDictionaryMetaFileModified(CarbonFile carbonFile, long fileTimeStamp,
-      long endOffset) {
-    return carbonFile.isFileModified(fileTimeStamp, endOffset);
-  }
-
-  /**
-   * This method will return the carbon file objetc based on its type (local, HDFS)
-   *
-   * @param dictionaryColumnUniqueIdentifier
-   * @return
-   */
-  private CarbonFile getDictionaryMetaCarbonFile(
-      DictionaryColumnUniqueIdentifier dictionaryColumnUniqueIdentifier) {
-    PathService pathService = CarbonCommonFactory.getPathService();
-    CarbonTablePath carbonTablePath = pathService
-        .getCarbonTablePath(dictionaryColumnUniqueIdentifier.getColumnIdentifier(), carbonStorePath,
-            dictionaryColumnUniqueIdentifier.getCarbonTableIdentifier());
-    String dictionaryFilePath =
-        carbonTablePath.getDictionaryMetaFilePath(dictionaryColumnUniqueIdentifier
-            .getColumnIdentifier().getColumnId());
-    FileFactory.FileType fileType = FileFactory.getFileType(dictionaryFilePath);
-    CarbonFile carbonFile = FileFactory.getCarbonFile(dictionaryFilePath, fileType);
-    return carbonFile;
-  }
-
-  /**
-   * This method will get the value for the given key. If value does not exist
-   * for the given key, it will check and load the value.
-   *
-   * @param dictionaryColumnUniqueIdentifier unique identifier which contains dbName,
-   *                                         tableName and columnIdentifier
-   * @param dictionaryInfo
-   * @param lruCacheKey
-   * @param loadSortIndex                    read and load sort index file in memory
-   * @throws CarbonUtilException in case memory is not sufficient to load dictionary into memory
-   */
-  protected void checkAndLoadDictionaryData(
-      DictionaryColumnUniqueIdentifier dictionaryColumnUniqueIdentifier,
-      DictionaryInfo dictionaryInfo, String lruCacheKey, boolean loadSortIndex)
-      throws CarbonUtilException {
-    try {
-      // read last segment dictionary meta chunk entry to get the end offset of file
-      CarbonFile carbonFile = getDictionaryMetaCarbonFile(dictionaryColumnUniqueIdentifier);
-      boolean dictionaryMetaFileModified =
-          isDictionaryMetaFileModified(carbonFile, dictionaryInfo.getFileTimeStamp(),
-              dictionaryInfo.getDictionaryMetaFileLength());
-      // if dictionary metadata file is modified then only read the last entry from dictionary
-      // meta file
-      if (dictionaryMetaFileModified) {
-        synchronized (dictionaryInfo) {
-          carbonFile = getDictionaryMetaCarbonFile(dictionaryColumnUniqueIdentifier);
-          dictionaryMetaFileModified =
-              isDictionaryMetaFileModified(carbonFile, dictionaryInfo.getFileTimeStamp(),
-                  dictionaryInfo.getDictionaryMetaFileLength());
-          // Double Check :
-          // if dictionary metadata file is modified then only read the last entry from dictionary
-          // meta file
-          if (dictionaryMetaFileModified) {
-            CarbonDictionaryColumnMetaChunk carbonDictionaryColumnMetaChunk =
-                readLastChunkFromDictionaryMetadataFile(dictionaryColumnUniqueIdentifier);
-            // required size will be size total size of file - offset till file is
-            // already read
-            long requiredSize =
-                carbonDictionaryColumnMetaChunk.getEnd_offset() - dictionaryInfo.getMemorySize();
-            if (requiredSize > 0) {
-              boolean columnAddedToLRUCache =
-                  carbonLRUCache.put(lruCacheKey, dictionaryInfo, requiredSize);
-              // if column is successfully added to lru cache then only load the
-              // dictionary data
-              if (columnAddedToLRUCache) {
-                // load dictionary data
-                loadDictionaryData(dictionaryInfo, dictionaryColumnUniqueIdentifier,
-                    dictionaryInfo.getMemorySize(), carbonDictionaryColumnMetaChunk.getEnd_offset(),
-                    loadSortIndex);
-                // set the end offset till where file is read
-                dictionaryInfo
-                    .setOffsetTillFileIsRead(carbonDictionaryColumnMetaChunk.getEnd_offset());
-                dictionaryInfo.setFileTimeStamp(carbonFile.getLastModifiedTime());
-                dictionaryInfo.setDictionaryMetaFileLength(carbonFile.getSize());
-              } else {
-                throw new CarbonUtilException(
-                    "Cannot load dictionary into memory. Not enough memory available");
-              }
-            }
-          }
-        }
-      }
-      // increment the column access count
-      incrementDictionaryAccessCount(dictionaryInfo);
-    } catch (IOException e) {
-      throw new CarbonUtilException(e.getMessage());
-    }
-  }
-
-  /**
-   * This method will prepare the lru cache key and return the same
-   *
-   * @param columnIdentifier
-   * @return
-   */
-  protected String getLruCacheKey(String columnIdentifier, CacheType cacheType) {
-    String lruCacheKey =
-        columnIdentifier + CarbonCommonConstants.UNDERSCORE + cacheType.getCacheName();
-    return lruCacheKey;
-  }
-
-  /**
-   * This method will check and load the dictionary file in memory for a given column
-   *
-   * @param dictionaryInfo                   holds dictionary information and data
-   * @param dictionaryColumnUniqueIdentifier unique identifier which contains dbName,
-   *                                         tableName and columnIdentifier
-   * @param dictionaryChunkStartOffset       start offset from where dictionary file has to
-   *                                         be read
-   * @param dictionaryChunkEndOffset         end offset till where dictionary file has to
-   *                                         be read
-   * @param loadSortIndex
-   * @throws IOException
-   */
-  private void loadDictionaryData(DictionaryInfo dictionaryInfo,
-      DictionaryColumnUniqueIdentifier dictionaryColumnUniqueIdentifier,
-      long dictionaryChunkStartOffset, long dictionaryChunkEndOffset, boolean loadSortIndex)
-      throws IOException {
-    DictionaryCacheLoader dictionaryCacheLoader =
-        new DictionaryCacheLoaderImpl(dictionaryColumnUniqueIdentifier.getCarbonTableIdentifier(),
-            carbonStorePath);
-    dictionaryCacheLoader
-        .load(dictionaryInfo, dictionaryColumnUniqueIdentifier.getColumnIdentifier(),
-            dictionaryChunkStartOffset, dictionaryChunkEndOffset, loadSortIndex);
-  }
-
-  /**
-   * This method will increment the access count for a given dictionary column
-   *
-   * @param dictionaryInfo
-   */
-  protected void incrementDictionaryAccessCount(DictionaryInfo dictionaryInfo) {
-    dictionaryInfo.incrementAccessCount();
-  }
-
-  /**
-   * This method will update the dictionary acceess count which is required for its removal
-   * from column LRU cache
-   *
-   * @param dictionaryList
-   */
-  protected void clearDictionary(List<Dictionary> dictionaryList) {
-    for (Dictionary dictionary : dictionaryList) {
-      dictionary.clear();
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/cd6a4ff3/core/src/main/java/org/carbondata/core/cache/dictionary/ColumnDictionaryInfo.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/carbondata/core/cache/dictionary/ColumnDictionaryInfo.java b/core/src/main/java/org/carbondata/core/cache/dictionary/ColumnDictionaryInfo.java
deleted file mode 100644
index 59bafb0..0000000
--- a/core/src/main/java/org/carbondata/core/cache/dictionary/ColumnDictionaryInfo.java
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
- * 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.carbondata.core.cache.dictionary;
-
-import java.nio.charset.Charset;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicReference;
-
-import org.carbondata.core.carbon.metadata.datatype.DataType;
-import org.carbondata.core.constants.CarbonCommonConstants;
-import org.carbondata.core.util.ByteUtil;
-import org.carbondata.core.util.CarbonProperties;
-
-/**
- * class that implements methods specific for dictionary data look up
- */
-public class ColumnDictionaryInfo extends AbstractColumnDictionaryInfo {
-
-  /**
-   * index after members are sorted
-   */
-  private AtomicReference<List<Integer>> sortOrderReference =
-      new AtomicReference<List<Integer>>(new ArrayList<Integer>());
-
-  /**
-   * inverted index to retrieve the member
-   */
-  private AtomicReference<List<Integer>> sortReverseOrderReference =
-      new AtomicReference<List<Integer>>(new ArrayList<Integer>());
-
-  private DataType dataType;
-
-  public ColumnDictionaryInfo(DataType dataType) {
-    this.dataType = dataType;
-  }
-
-  /**
-   * This method will find and return the surrogate key for a given dictionary value
-   * Applicable scenario:
-   * 1. Incremental data load : Dictionary will not be generated for existing values. For
-   * that values have to be looked up in the existing dictionary cache.
-   * 2. Filter scenarios where from value surrogate key has to be found.
-   *
-   * @param value dictionary value as byte array
-   * @return if found returns key else 0
-   */
-  @Override public int getSurrogateKey(byte[] value) {
-    return getSurrogateKeyFromDictionaryValue(value);
-  }
-
-  /**
-   * This method will find and return the sort index for a given dictionary id.
-   * Applicable scenarios:
-   * 1. Used in case of order by queries when data sorting is required
-   *
-   * @param surrogateKey a unique ID for a dictionary value
-   * @return if found returns key else 0
-   */
-  @Override public int getSortedIndex(int surrogateKey) {
-    if (surrogateKey > sortReverseOrderReference.get().size()
-        || surrogateKey < MINIMUM_SURROGATE_KEY) {
-      return -1;
-    }
-    // decrement surrogate key as surrogate key basically means the index in array list
-    // because surrogate key starts from 1 and index of list from 0, so it needs to be
-    // decremented by 1
-    return sortReverseOrderReference.get().get(surrogateKey - 1);
-  }
-
-  /**
-   * This method will find and return the dictionary value from sorted index.
-   * Applicable scenarios:
-   * 1. Query final result preparation in case of order by queries:
-   * While convert the final result which will
-   * be surrogate key back to original dictionary values this method will be used
-   *
-   * @param sortedIndex sort index of dictionary value
-   * @return value if found else null
-   */
-  @Override public String getDictionaryValueFromSortedIndex(int sortedIndex) {
-    if (sortedIndex > sortReverseOrderReference.get().size()
-        || sortedIndex < MINIMUM_SURROGATE_KEY) {
-      return null;
-    }
-    // decrement surrogate key as surrogate key basically means the index in array list
-    // because surrogate key starts from 1, sort index will start form 1 and index
-    // of list from 0, so it needs to be decremented by 1
-    int surrogateKey = sortOrderReference.get().get(sortedIndex - 1);
-    return getDictionaryValueForKey(surrogateKey);
-  }
-
-  /**
-   * This method will add a new dictionary chunk to existing list of dictionary chunks
-   *
-   * @param dictionaryChunk
-   */
-  @Override public void addDictionaryChunk(List<byte[]> dictionaryChunk) {
-    dictionaryChunks.add(dictionaryChunk);
-  }
-
-  /**
-   * This method will set the sort order index of a dictionary column.
-   * Sort order index if the index of dictionary values after they are sorted.
-   *
-   * @param sortOrderIndex
-   */
-  @Override public void setSortOrderIndex(List<Integer> sortOrderIndex) {
-    sortOrderReference.set(sortOrderIndex);
-  }
-
-  /**
-   * This method will set the sort reverse index of a dictionary column.
-   * Sort reverse index is the index of dictionary values before they are sorted.
-   *
-   * @param sortReverseOrderIndex
-   */
-  @Override public void setSortReverseOrderIndex(List<Integer> sortReverseOrderIndex) {
-    sortReverseOrderReference.set(sortReverseOrderIndex);
-  }
-
-  /**
-   * This method will apply binary search logic to find the surrogate key for the
-   * given value
-   *
-   * @param key to be searched
-   * @return
-   */
-  private int getSurrogateKeyFromDictionaryValue(byte[] key) {
-    String filterKey = new String(key, Charset.forName(CarbonCommonConstants.DEFAULT_CHARSET));
-    int low = 0;
-    List<Integer> sortedSurrogates = sortOrderReference.get();
-    int high = sortedSurrogates.size() - 1;
-    while (low <= high) {
-      int mid = (low + high) >>> 1;
-      int surrogateKey = sortedSurrogates.get(mid);
-      byte[] dictionaryValue = getDictionaryBytesFromSurrogate(surrogateKey);
-      int cmp = -1;
-      if (this.getDataType() != DataType.STRING) {
-        cmp = compareFilterKeyWithDictionaryKey(new String(dictionaryValue), filterKey,
-            this.getDataType());
-
-      } else {
-        cmp = ByteUtil.UnsafeComparer.INSTANCE.compareTo(dictionaryValue, key);
-      }
-      if (cmp < 0) {
-        low = mid + 1;
-      } else if (cmp > 0) {
-        high = mid - 1;
-      } else {
-        return surrogateKey; // key found
-      }
-    }
-    return 0;
-  }
-
-  /**
-   * This method will apply binary search logic to find the surrogate key for the
-   * given value
-   *
-   * @param byteValuesOfFilterMembers to be searched
-   * @param surrogates
-   * @return
-   */
-  public void getIncrementalSurrogateKeyFromDictionary(List<byte[]> byteValuesOfFilterMembers,
-      List<Integer> surrogates) {
-    List<Integer> sortedSurrogates = sortOrderReference.get();
-    int low = 0;
-    for (byte[] byteValueOfFilterMember : byteValuesOfFilterMembers) {
-      String filterKey = new String(byteValueOfFilterMember,
-          Charset.forName(CarbonCommonConstants.DEFAULT_CHARSET));
-      if (CarbonCommonConstants.MEMBER_DEFAULT_VAL.equals(filterKey)) {
-        surrogates.add(CarbonCommonConstants.MEMBER_DEFAULT_VAL_SURROGATE_KEY);
-        continue;
-      }
-      int high = sortedSurrogates.size() - 1;
-      while (low <= high) {
-        int mid = (low + high) >>> 1;
-        int surrogateKey = sortedSurrogates.get(mid);
-        byte[] dictionaryValue = getDictionaryBytesFromSurrogate(surrogateKey);
-        int cmp = -1;
-        //fortify fix
-        if (null == dictionaryValue) {
-          cmp = -1;
-        } else if (this.getDataType() != DataType.STRING) {
-          cmp = compareFilterKeyWithDictionaryKey(new String(dictionaryValue), filterKey,
-              this.getDataType());
-
-        } else {
-          cmp =
-              ByteUtil.UnsafeComparer.INSTANCE.compareTo(dictionaryValue, byteValueOfFilterMember);
-        }
-        if (cmp < 0) {
-          low = mid + 1;
-        } else if (cmp > 0) {
-          high = mid - 1;
-        } else {
-
-          surrogates.add(surrogateKey);
-          low = mid;
-          break;
-        }
-      }
-    }
-    //Default value has to be added
-    if (surrogates.isEmpty()) {
-      surrogates.add(0);
-    }
-  }
-
-  private int compareFilterKeyWithDictionaryKey(String dictionaryVal, String memberVal,
-      DataType dataType) {
-    try {
-      switch (dataType) {
-        case SHORT:
-          return Short.compare((Short.parseShort(dictionaryVal)), (Short.parseShort(memberVal)));
-        case INT:
-          return Integer.compare((Integer.parseInt(dictionaryVal)), (Integer.parseInt(memberVal)));
-        case DOUBLE:
-          return Double
-              .compare((Double.parseDouble(dictionaryVal)), (Double.parseDouble(memberVal)));
-        case LONG:
-          return Long.compare((Long.parseLong(dictionaryVal)), (Long.parseLong(memberVal)));
-        case BOOLEAN:
-          return Boolean
-              .compare((Boolean.parseBoolean(dictionaryVal)), (Boolean.parseBoolean(memberVal)));
-        case TIMESTAMP:
-          SimpleDateFormat parser = new SimpleDateFormat(CarbonProperties.getInstance()
-              .getProperty(CarbonCommonConstants.CARBON_TIMESTAMP_FORMAT,
-                  CarbonCommonConstants.CARBON_TIMESTAMP_DEFAULT_FORMAT));
-          Date dateToStr;
-          Date dictionaryDate;
-          dateToStr = parser.parse(memberVal);
-          dictionaryDate = parser.parse(dictionaryVal);
-          return dictionaryDate.compareTo(dateToStr);
-        case DECIMAL:
-          java.math.BigDecimal javaDecValForDictVal = new java.math.BigDecimal(dictionaryVal);
-          java.math.BigDecimal javaDecValForMemberVal = new java.math.BigDecimal(memberVal);
-          return javaDecValForDictVal.compareTo(javaDecValForMemberVal);
-        default:
-          return -1;
-      }
-    } catch (Exception e) {
-      //In all data types excluding String data type the null member will be the highest
-      //while doing search in dictioary when the member comparison happens with filter member
-      //which is also null member, since the parsing fails in other data type except string
-      //explicit comparison is required, is both are null member then system has to return 0.
-      if (memberVal.equals(dictionaryVal)) {
-        return 0;
-      }
-      return 1;
-    }
-  }
-
-  /**
-   * getDataType().
-   *
-   * @return
-   */
-  public DataType getDataType() {
-    return dataType;
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/cd6a4ff3/core/src/main/java/org/carbondata/core/cache/dictionary/ColumnReverseDictionaryInfo.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/carbondata/core/cache/dictionary/ColumnReverseDictionaryInfo.java b/core/src/main/java/org/carbondata/core/cache/dictionary/ColumnReverseDictionaryInfo.java
deleted file mode 100644
index 86ff971..0000000
--- a/core/src/main/java/org/carbondata/core/cache/dictionary/ColumnReverseDictionaryInfo.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * 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.carbondata.core.cache.dictionary;
-
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-import org.carbondata.core.constants.CarbonCommonConstants;
-import org.carbondata.core.util.CarbonProperties;
-
-import net.jpountz.xxhash.XXHash32;
-import net.jpountz.xxhash.XXHashFactory;
-
-/**
- * class that implements methods specific for dictionary data look up
- */
-public class ColumnReverseDictionaryInfo extends AbstractColumnDictionaryInfo {
-
-  /**
-   * Map which will maintain mapping of byte array to surrogate key
-   */
-  private Map<DictionaryByteArrayWrapper, Integer> dictionaryByteArrayToSurrogateKeyMap;
-
-  /**
-   * hashing algorithm to calculate hash code
-   */
-  private XXHash32 xxHash32;
-
-  /**
-   * check and initialize xxHash32 if enabled
-   */
-  public ColumnReverseDictionaryInfo() {
-    boolean useXXHash = Boolean.valueOf(CarbonProperties.getInstance()
-        .getProperty(CarbonCommonConstants.ENABLE_XXHASH,
-            CarbonCommonConstants.ENABLE_XXHASH_DEFAULT));
-    if (useXXHash) {
-      xxHash32 = XXHashFactory.fastestInstance().hash32();
-    }
-  }
-
-  /**
-   * This method will find and return the surrogate key for a given dictionary value
-   * Applicable scenario:
-   * 1. Incremental data load : Dictionary will not be generated for existing values. For
-   * that values have to be looked up in the existing dictionary cache.
-   * 2. Filter scenarios where from value surrogate key has to be found.
-   *
-   * @param value dictionary value as byte array. It will be treated as key here
-   * @return if found returns key else 0
-   */
-  @Override public int getSurrogateKey(byte[] value) {
-    DictionaryByteArrayWrapper dictionaryByteArrayWrapper =
-        new DictionaryByteArrayWrapper(value, xxHash32);
-    Integer surrogateKeyInMap =
-        dictionaryByteArrayToSurrogateKeyMap.get(dictionaryByteArrayWrapper);
-    if (null == surrogateKeyInMap) {
-      return CarbonCommonConstants.INVALID_SURROGATE_KEY;
-    }
-    return surrogateKeyInMap;
-  }
-
-  /**
-   * This method will add a new dictionary chunk to existing list of dictionary chunks
-   *
-   * @param dictionaryChunk
-   */
-  @Override public void addDictionaryChunk(List<byte[]> dictionaryChunk) {
-    dictionaryChunks.add(dictionaryChunk);
-    if (null == dictionaryByteArrayToSurrogateKeyMap) {
-      createDictionaryByteArrayToSurrogateKeyMap(dictionaryChunk.size());
-    }
-    addDataToDictionaryMap();
-  }
-
-  /**
-   * This method will add the new dictionary data to map
-   */
-  private void addDataToDictionaryMap() {
-    int surrogateKey = dictionaryByteArrayToSurrogateKeyMap.size();
-    List<byte[]> oneDictionaryChunk = dictionaryChunks.get(dictionaryChunks.size() - 1);
-    for (int i = 0; i < oneDictionaryChunk.size(); i++) {
-      // create a wrapper class that will calculate hash code for byte array
-      DictionaryByteArrayWrapper dictionaryByteArrayWrapper =
-          new DictionaryByteArrayWrapper(oneDictionaryChunk.get(i), xxHash32);
-      dictionaryByteArrayToSurrogateKeyMap.put(dictionaryByteArrayWrapper, ++surrogateKey);
-    }
-  }
-
-  /**
-   * This method will create the dictionary map. First time it will
-   * create dictionary map with capacity equal to list of byte arrays
-   *
-   * @param initialMapSize capacity to which map is to be instantiated
-   */
-  private void createDictionaryByteArrayToSurrogateKeyMap(int initialMapSize) {
-    dictionaryByteArrayToSurrogateKeyMap = new ConcurrentHashMap<>(initialMapSize);
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/cd6a4ff3/core/src/main/java/org/carbondata/core/cache/dictionary/Dictionary.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/carbondata/core/cache/dictionary/Dictionary.java b/core/src/main/java/org/carbondata/core/cache/dictionary/Dictionary.java
deleted file mode 100644
index 3f395c1..0000000
--- a/core/src/main/java/org/carbondata/core/cache/dictionary/Dictionary.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * 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.carbondata.core.cache.dictionary;
-
-/**
- * dictionary interface which declares methods for finding surrogate key for a
- * given dictionary value and finding dictionary value from a given surrogate key
- */
-public interface Dictionary {
-
-  /**
-   * This method will find and return the surrogate key for a given dictionary value
-   * Applicable scenario:
-   * 1. Incremental data load : Dictionary will not be generated for existing values. For
-   * that values have to be looked up in the existing dictionary cache.
-   * 2. Filter scenarios where from value surrogate key has to be found.
-   *
-   * @param value dictionary value
-   * @return if found returns key else 0
-   */
-  int getSurrogateKey(String value);
-
-  /**
-   * This method will find and return the surrogate key for a given dictionary value
-   * Applicable scenario:
-   * 1. Incremental data load : Dictionary will not be generated for existing values. For
-   * that values have to be looked up in the existing dictionary cache.
-   * 2. Filter scenarios where from value surrogate key has to be found.
-   *
-   * @param value dictionary value as byte array
-   * @return if found returns key else -1
-   */
-  int getSurrogateKey(byte[] value);
-
-  /**
-   * This method will find and return the dictionary value for a given surrogate key.
-   * Applicable scenarios:
-   * 1. Query final result preparation : While convert the final result which will
-   * be surrogate key back to original dictionary values this method will be used
-   *
-   * @param surrogateKey a unique ID for a dictionary value
-   * @return value if found else null
-   */
-  String getDictionaryValueForKey(int surrogateKey);
-
-  /**
-   * This method will find and return the sort index for a given dictionary id.
-   * Applicable scenarios:
-   * 1. Used in case of order by queries when data sorting is required
-   *
-   * @param surrogateKey a unique ID for a dictionary value
-   * @return if found returns key else 0
-   */
-  int getSortedIndex(int surrogateKey);
-
-  /**
-   * This method will find and return the dictionary value from sorted index.
-   * Applicable scenarios:
-   * 1. Query final result preparation in case of order by queries:
-   * While convert the final result which will
-   * be surrogate key back to original dictionary values this method will be used
-   *
-   * @param sortedIndex sort index of dictionary value
-   * @return value if found else null
-   */
-  String getDictionaryValueFromSortedIndex(int sortedIndex);
-
-  /**
-   * The method return the dictionary chunks wrapper of a column
-   * The wrapper wraps the list<list<bye[]>> and provide the iterator to retrieve the chunks
-   * members.
-   * Applications Scenario:
-   * For preparing the column Sort info while writing the sort index file.
-   *
-   * @return
-   */
-  DictionaryChunksWrapper getDictionaryChunks();
-
-  /**
-   * This method will release the objects and set default value for primitive types
-   */
-  void clear();
-}

http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/cd6a4ff3/core/src/main/java/org/carbondata/core/cache/dictionary/DictionaryByteArrayWrapper.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/carbondata/core/cache/dictionary/DictionaryByteArrayWrapper.java b/core/src/main/java/org/carbondata/core/cache/dictionary/DictionaryByteArrayWrapper.java
deleted file mode 100644
index ee8f991..0000000
--- a/core/src/main/java/org/carbondata/core/cache/dictionary/DictionaryByteArrayWrapper.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * 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.carbondata.core.cache.dictionary;
-
-import java.util.Arrays;
-
-import org.carbondata.core.util.ByteUtil;
-
-import net.jpountz.xxhash.XXHash32;
-
-/**
- * class that holds the byte array and overrides equals and hashcode method which
- * will be useful for object comparison
- */
-public class DictionaryByteArrayWrapper {
-
-  /**
-   * dictionary value as byte array
-   */
-  private byte[] data;
-
-  /**
-   * hashing algorithm to calculate hash code
-   */
-  private XXHash32 xxHash32;
-
-  /**
-   * @param data
-   */
-  public DictionaryByteArrayWrapper(byte[] data) {
-    this.data = data;
-  }
-
-  /**
-   * @param data
-   * @param xxHash32
-   */
-  public DictionaryByteArrayWrapper(byte[] data, XXHash32 xxHash32) {
-    this(data);
-    this.xxHash32 = xxHash32;
-  }
-
-  /**
-   * This method will compare 2 DictionaryByteArrayWrapper objects
-   *
-   * @param other
-   * @return
-   */
-  @Override public boolean equals(Object other) {
-    if (this == other) {
-      return true;
-    }
-    if (other == null || getClass() != other.getClass()) {
-      return false;
-    }
-    DictionaryByteArrayWrapper otherObjectToCompare = (DictionaryByteArrayWrapper) other;
-    if (data.length != otherObjectToCompare.data.length) {
-      return false;
-    }
-    return ByteUtil.UnsafeComparer.INSTANCE.equals(data, otherObjectToCompare.data);
-
-  }
-
-  /**
-   * This method will calculate the hash code for given data
-   *
-   * @return
-   */
-  @Override public int hashCode() {
-    if (null != xxHash32) {
-      return xxHash32.hash(data, 0, data.length, 0);
-    }
-    int result = Arrays.hashCode(data);
-    result = 31 * result;
-    return result;
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/cd6a4ff3/core/src/main/java/org/carbondata/core/cache/dictionary/DictionaryCacheLoader.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/carbondata/core/cache/dictionary/DictionaryCacheLoader.java b/core/src/main/java/org/carbondata/core/cache/dictionary/DictionaryCacheLoader.java
deleted file mode 100644
index a28d58d..0000000
--- a/core/src/main/java/org/carbondata/core/cache/dictionary/DictionaryCacheLoader.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * 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.carbondata.core.cache.dictionary;
-
-import java.io.IOException;
-
-import org.carbondata.core.carbon.ColumnIdentifier;
-
-public interface DictionaryCacheLoader {
-
-  /**
-   * This method will load the dictionary data for a given columnIdentifier
-   *
-   * @param dictionaryInfo             dictionary info object which will hold the required data
-   *                                   for a given column
-   * @param columnIdentifier           column unique identifier
-   * @param dictionaryChunkStartOffset start offset from where dictionary file has to
-   *                                   be read
-   * @param dictionaryChunkEndOffset   end offset till where dictionary file has to
-   *                                   be read
-   * @param loadSortIndex              flag to indicate whether the sort index file has to be
-   *                                   read in memory after dictionary loading
-   * @throws IOException
-   */
-  void load(DictionaryInfo dictionaryInfo, ColumnIdentifier columnIdentifier,
-      long dictionaryChunkStartOffset, long dictionaryChunkEndOffset, boolean loadSortIndex)
-      throws IOException;
-}

http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/cd6a4ff3/core/src/main/java/org/carbondata/core/cache/dictionary/DictionaryCacheLoaderImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/carbondata/core/cache/dictionary/DictionaryCacheLoaderImpl.java b/core/src/main/java/org/carbondata/core/cache/dictionary/DictionaryCacheLoaderImpl.java
deleted file mode 100644
index 770cb07..0000000
--- a/core/src/main/java/org/carbondata/core/cache/dictionary/DictionaryCacheLoaderImpl.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * 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.carbondata.core.cache.dictionary;
-
-import java.io.IOException;
-import java.util.List;
-
-import org.carbondata.common.factory.CarbonCommonFactory;
-import org.carbondata.core.carbon.CarbonTableIdentifier;
-import org.carbondata.core.carbon.ColumnIdentifier;
-import org.carbondata.core.reader.CarbonDictionaryReader;
-import org.carbondata.core.reader.sortindex.CarbonDictionarySortIndexReader;
-import org.carbondata.core.service.DictionaryService;
-
-/**
- * This class is responsible for loading the dictionary data for given columns
- */
-public class DictionaryCacheLoaderImpl implements DictionaryCacheLoader {
-
-  /**
-   * carbon table identifier
-   */
-  private CarbonTableIdentifier carbonTableIdentifier;
-
-  /**
-   * carbon store path
-   */
-  private String carbonStorePath;
-
-  /**
-   * @param carbonTableIdentifier fully qualified table name
-   * @param carbonStorePath       hdfs store path
-   */
-  public DictionaryCacheLoaderImpl(CarbonTableIdentifier carbonTableIdentifier,
-      String carbonStorePath) {
-    this.carbonTableIdentifier = carbonTableIdentifier;
-    this.carbonStorePath = carbonStorePath;
-  }
-
-  /**
-   * This method will load the dictionary data for a given columnIdentifier
-   *
-   * @param dictionaryInfo             dictionary info object which will hold the required data
-   *                                   for a given column
-   * @param columnIdentifier           column unique identifier
-   * @param dictionaryChunkStartOffset start offset from where dictionary file has to
-   *                                   be read
-   * @param dictionaryChunkEndOffset   end offset till where dictionary file has to
-   *                                   be read
-   * @param loadSortIndex              flag to indicate whether the sort index file has to be
-   *                                   read in memory after dictionary loading
-   * @throws IOException
-   */
-  @Override public void load(DictionaryInfo dictionaryInfo, ColumnIdentifier columnIdentifier,
-      long dictionaryChunkStartOffset, long dictionaryChunkEndOffset, boolean loadSortIndex)
-      throws IOException {
-    List<byte[]> dictionaryChunk =
-        load(columnIdentifier, dictionaryChunkStartOffset, dictionaryChunkEndOffset);
-    if (loadSortIndex) {
-      readSortIndexFile(dictionaryInfo, columnIdentifier);
-    }
-    dictionaryInfo.addDictionaryChunk(dictionaryChunk);
-  }
-
-  /**
-   * This method will load the dictionary data between a given start and end offset
-   *
-   * @param columnIdentifier column unique identifier
-   * @param startOffset      start offset of dictionary file
-   * @param endOffset        end offset of dictionary file
-   * @return list of dictionary value
-   * @throws IOException
-   */
-  private List<byte[]> load(ColumnIdentifier columnIdentifier, long startOffset, long endOffset)
-      throws IOException {
-    CarbonDictionaryReader dictionaryReader = getDictionaryReader(columnIdentifier);
-    List<byte[]> dictionaryValue = null;
-    try {
-      dictionaryValue = dictionaryReader.read(startOffset, endOffset);
-    } finally {
-      dictionaryReader.close();
-    }
-    return dictionaryValue;
-  }
-
-  /**
-   * This method will read the sort index file and load into memory
-   *
-   * @param dictionaryInfo
-   * @param columnIdentifier
-   * @throws IOException
-   */
-  private void readSortIndexFile(DictionaryInfo dictionaryInfo, ColumnIdentifier columnIdentifier)
-      throws IOException {
-    CarbonDictionarySortIndexReader sortIndexReader = getSortIndexReader(columnIdentifier);
-    try {
-      dictionaryInfo.setSortOrderIndex(sortIndexReader.readSortIndex());
-      dictionaryInfo.setSortReverseOrderIndex(sortIndexReader.readInvertedSortIndex());
-    } finally {
-      sortIndexReader.close();
-    }
-  }
-
-  /**
-   * This method will create a dictionary reader instance to read the dictionary file
-   *
-   * @param columnIdentifier unique column identifier
-   * @return carbon dictionary reader instance
-   */
-  private CarbonDictionaryReader getDictionaryReader(ColumnIdentifier columnIdentifier) {
-    DictionaryService dictService = CarbonCommonFactory.getDictionaryService();
-    return dictService
-        .getDictionaryReader(carbonTableIdentifier, columnIdentifier, carbonStorePath);
-  }
-
-  /**
-   * @param columnIdentifier unique column identifier
-   * @return sort index reader instance
-   */
-  private CarbonDictionarySortIndexReader getSortIndexReader(ColumnIdentifier columnIdentifier) {
-    DictionaryService dictService = CarbonCommonFactory.getDictionaryService();
-    return dictService
-        .getDictionarySortIndexReader(carbonTableIdentifier, columnIdentifier, carbonStorePath);
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/cd6a4ff3/core/src/main/java/org/carbondata/core/cache/dictionary/DictionaryChunksWrapper.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/carbondata/core/cache/dictionary/DictionaryChunksWrapper.java b/core/src/main/java/org/carbondata/core/cache/dictionary/DictionaryChunksWrapper.java
deleted file mode 100644
index e88d722..0000000
--- a/core/src/main/java/org/carbondata/core/cache/dictionary/DictionaryChunksWrapper.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * 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.carbondata.core.cache.dictionary;
-
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * The wrapper class wraps the list<list<bye[]>> and provide the iterator to retrieve the chunks
- * members and expose the getSize API to get size of members in the List<List<byte>> chunks.
- * Applications Scenario:
- * For preparing the column Sort info while writing the sort index file.
- */
-public class DictionaryChunksWrapper implements Iterator<byte[]> {
-
-  /**
-   * list of dictionaryChunks
-   */
-  private List<List<byte[]>> dictionaryChunks;
-
-  /**
-   * size of the list
-   */
-  private int size;
-
-  /**
-   * Current index of the list
-   */
-  private int currentIndex;
-
-  /**
-   * variable holds the count of elements already iterated
-   */
-  private int iteratorIndex;
-
-  /**
-   * variable holds the current index of List<List<byte[]>> being traversed
-   */
-  private int outerIndex;
-
-  /**
-   * Constructor of DictionaryChunksWrapper
-   *
-   * @param dictionaryChunks
-   */
-  public DictionaryChunksWrapper(List<List<byte[]>> dictionaryChunks) {
-    this.dictionaryChunks = dictionaryChunks;
-    for (List<byte[]> chunk : dictionaryChunks) {
-      this.size += chunk.size();
-    }
-  }
-
-  /**
-   * Returns {@code true} if the iteration has more elements.
-   * (In other words, returns {@code true} if {@link #next} would
-   * return an element rather than throwing an exception.)
-   *
-   * @return {@code true} if the iteration has more elements
-   */
-  @Override public boolean hasNext() {
-    return (currentIndex < size);
-  }
-
-  /**
-   * Returns the next element in the iteration.
-   * The method pics the next elements from the first inner list till first is not finished, pics
-   * the second inner list ...
-   *
-   * @return the next element in the iteration
-   */
-  @Override public byte[] next() {
-    if (iteratorIndex >= dictionaryChunks.get(outerIndex).size()) {
-      iteratorIndex = 0;
-      outerIndex++;
-    }
-    byte[] value = dictionaryChunks.get(outerIndex).get(iteratorIndex);
-    currentIndex++;
-    iteratorIndex++;
-    return value;
-  }
-
-  /**
-   * Removes from the underlying collection the last element returned
-   * by this iterator (optional operation).  This method can be called
-   * only once per call to {@link #next}.  The behavior of an iterator
-   * is unspecified if the underlying collection is modified while the
-   * iteration is in progress in any way other than by calling this
-   * method.
-   *
-   * @throws UnsupportedOperationException if the {@code remove}
-   *                                       operation is not supported by this iterator
-   * @throws IllegalStateException         if the {@code next} method has not
-   *                                       yet been called, or the {@code remove} method has already
-   *                                       been called after the last call to the {@code next}
-   *                                       method
-   * @implSpec The default implementation throws an instance of
-   * {@link UnsupportedOperationException} and performs no other action.
-   */
-  @Override public void remove() {
-    throw new UnsupportedOperationException("Remove operation not supported");
-  }
-
-  /**
-   * returns the total element size in List<List<byte[]>>
-   *
-   * @return
-   */
-  public int getSize() {
-    return size;
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/cd6a4ff3/core/src/main/java/org/carbondata/core/cache/dictionary/DictionaryColumnUniqueIdentifier.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/carbondata/core/cache/dictionary/DictionaryColumnUniqueIdentifier.java b/core/src/main/java/org/carbondata/core/cache/dictionary/DictionaryColumnUniqueIdentifier.java
deleted file mode 100644
index dea789f..0000000
--- a/core/src/main/java/org/carbondata/core/cache/dictionary/DictionaryColumnUniqueIdentifier.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * 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.carbondata.core.cache.dictionary;
-
-import org.carbondata.core.carbon.CarbonTableIdentifier;
-import org.carbondata.core.carbon.ColumnIdentifier;
-import org.carbondata.core.carbon.metadata.datatype.DataType;
-
-/**
- * dictionary column identifier which includes table identifier and column identifier
- */
-public class DictionaryColumnUniqueIdentifier {
-
-  /**
-   * table fully qualified name
-   */
-  private CarbonTableIdentifier carbonTableIdentifier;
-
-  /**
-   * unique column id
-   */
-  private ColumnIdentifier columnIdentifier;
-
-  private DataType dataType;
-
-  /**
-   * Will be used in case of reverse dictionary cache which will be used
-   * in case of data loading.
-   *
-   * @param carbonTableIdentifier
-   * @param columnIdentifier
-   */
-  public DictionaryColumnUniqueIdentifier(CarbonTableIdentifier carbonTableIdentifier,
-      ColumnIdentifier columnIdentifier) {
-    this.carbonTableIdentifier = carbonTableIdentifier;
-    this.columnIdentifier = columnIdentifier;
-  }
-
-  /**
-   * Will be used in case of forward dictionary cache in case
-   * of query execution.
-   *
-   * @param carbonTableIdentifier
-   * @param columnIdentifier
-   * @param dataType
-   */
-  public DictionaryColumnUniqueIdentifier(CarbonTableIdentifier carbonTableIdentifier,
-      ColumnIdentifier columnIdentifier, DataType dataType) {
-    this(carbonTableIdentifier, columnIdentifier);
-    this.dataType = dataType;
-  }
-
-  public DataType getDataType() {
-    return dataType;
-  }
-
-  /**
-   * @return table identifier
-   */
-  public CarbonTableIdentifier getCarbonTableIdentifier() {
-    return carbonTableIdentifier;
-  }
-
-  /**
-   * @return columnIdentifier
-   */
-  public ColumnIdentifier getColumnIdentifier() {
-    return columnIdentifier;
-  }
-
-  /**
-   * overridden equals method
-   *
-   * @param other
-   * @return
-   */
-  @Override public boolean equals(Object other) {
-    if (this == other) return true;
-    if (other == null || getClass() != other.getClass()) return false;
-    DictionaryColumnUniqueIdentifier that = (DictionaryColumnUniqueIdentifier) other;
-    if (!carbonTableIdentifier.equals(that.carbonTableIdentifier)) return false;
-    return columnIdentifier.equals(that.columnIdentifier);
-
-  }
-
-  /**
-   * overridden hashcode method
-   *
-   * @return
-   */
-  @Override public int hashCode() {
-    int result = carbonTableIdentifier.hashCode();
-    result = 31 * result + columnIdentifier.hashCode();
-    return result;
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/cd6a4ff3/core/src/main/java/org/carbondata/core/cache/dictionary/DictionaryInfo.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/carbondata/core/cache/dictionary/DictionaryInfo.java b/core/src/main/java/org/carbondata/core/cache/dictionary/DictionaryInfo.java
deleted file mode 100644
index 6721b3b..0000000
--- a/core/src/main/java/org/carbondata/core/cache/dictionary/DictionaryInfo.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * 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.carbondata.core.cache.dictionary;
-
-import java.util.List;
-
-import org.carbondata.core.cache.Cacheable;
-
-/**
- * An interface which holds dictionary information like end offset,
- * file timestamp for one column
- */
-public interface DictionaryInfo extends Cacheable, Dictionary {
-
-  /**
-   * This method will increment the access count for a column by 1
-   * whenever a column is getting used in query or incremental data load
-   */
-  void incrementAccessCount();
-
-  /**
-   * This method will update the end offset of file everytime a file is read
-   *
-   * @param offsetTillFileIsRead
-   */
-  void setOffsetTillFileIsRead(long offsetTillFileIsRead);
-
-  /**
-   * This method will update the timestamp of a file if a file is modified
-   * like in case of incremental load
-   *
-   * @param fileTimeStamp
-   */
-  void setFileTimeStamp(long fileTimeStamp);
-
-  /**
-   * This method will add a new dictionary chunk to existing list of dictionary chunks
-   *
-   * @param dictionaryChunk
-   */
-  void addDictionaryChunk(List<byte[]> dictionaryChunk);
-
-  /**
-   * This method will set the sort order index of a dictionary column.
-   * Sort order index if the index of dictionary values after they are sorted.
-   *
-   * @param sortOrderIndex
-   */
-  void setSortOrderIndex(List<Integer> sortOrderIndex);
-
-  /**
-   * This method will set the sort reverse index of a dictionary column.
-   * Sort reverse index is the index of dictionary values before they are sorted.
-   *
-   * @param sortReverseOrderIndex
-   */
-  void setSortReverseOrderIndex(List<Integer> sortReverseOrderIndex);
-
-  /**
-   * dictionary metadata file length which will be set whenever we reload dictionary
-   * data from disk
-   *
-   * @param dictionaryMetaFileLength length of dictionary metadata file
-   */
-  void setDictionaryMetaFileLength(long dictionaryMetaFileLength);
-
-  /**
-   * Dictionary meta file offset which will be read to check whether length of dictionary
-   * meta file has been modified
-   *
-   * @return
-   */
-  long getDictionaryMetaFileLength();
-}

http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/cd6a4ff3/core/src/main/java/org/carbondata/core/cache/dictionary/ForwardDictionary.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/carbondata/core/cache/dictionary/ForwardDictionary.java b/core/src/main/java/org/carbondata/core/cache/dictionary/ForwardDictionary.java
deleted file mode 100644
index 5ddd093..0000000
--- a/core/src/main/java/org/carbondata/core/cache/dictionary/ForwardDictionary.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * 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.carbondata.core.cache.dictionary;
-
-import java.nio.charset.Charset;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.carbondata.core.constants.CarbonCommonConstants;
-
-/**
- * This class will be used for dictionary key and value look up
- */
-public class ForwardDictionary implements Dictionary {
-
-  /**
-   * Object which will hold the information related to this dictionary column
-   */
-  private ColumnDictionaryInfo columnDictionaryInfo;
-
-  /**
-   * @param columnDictionaryInfo
-   */
-  public ForwardDictionary(ColumnDictionaryInfo columnDictionaryInfo) {
-    this.columnDictionaryInfo = columnDictionaryInfo;
-  }
-
-  /**
-   * This method will find and return the surrogate key for a given dictionary value
-   * Applicable scenario:
-   * 1. Incremental data load : Dictionary will not be generated for existing values. For
-   * that values have to be looked up in the existing dictionary cache.
-   * 2. Filter scenarios where from value surrogate key has to be found.
-   *
-   * @param value dictionary value
-   * @return if found returns key else 0
-   */
-  @Override public int getSurrogateKey(String value) {
-    return columnDictionaryInfo.getSurrogateKey(value);
-  }
-
-  /**
-   * This method will find and return the surrogate key for a given dictionary value
-   * Applicable scenario:
-   * 1. Incremental data load : Dictionary will not be generated for existing values. For
-   * that values have to be looked up in the existing dictionary cache.
-   * 2. Filter scenarios where from value surrogate key has to be found.
-   *
-   * @param value dictionary value as byte array
-   * @return if found returns key else 0
-   */
-  @Override public int getSurrogateKey(byte[] value) {
-    return columnDictionaryInfo.getSurrogateKey(value);
-  }
-
-  /**
-   * This method will find and return the dictionary value for a given surrogate key.
-   * Applicable scenarios:
-   * 1. Query final result preparation : While convert the final result which will
-   * be surrogate key back to original dictionary values this method will be used
-   *
-   * @param surrogateKey a unique ID for a dictionary value
-   * @return value if found else null
-   */
-  @Override public String getDictionaryValueForKey(int surrogateKey) {
-    return columnDictionaryInfo.getDictionaryValueForKey(surrogateKey);
-  }
-
-  /**
-   * This method will find and return the sort index for a given dictionary id.
-   * Applicable scenarios:
-   * 1. Used in case of order by queries when data sorting is required
-   *
-   * @param surrogateKey a unique ID for a dictionary value
-   * @return if found returns key else 0
-   */
-  @Override public int getSortedIndex(int surrogateKey) {
-    return columnDictionaryInfo.getSortedIndex(surrogateKey);
-  }
-
-  /**
-   * This method will find and return the dictionary value from sorted index.
-   * Applicable scenarios:
-   * 1. Query final result preparation in case of order by queries:
-   * While convert the final result which will
-   * be surrogate key back to original dictionary values this method will be used
-   *
-   * @param sortedIndex sort index of dictionary value
-   * @return value if found else null
-   */
-  @Override public String getDictionaryValueFromSortedIndex(int sortedIndex) {
-    return columnDictionaryInfo.getDictionaryValueFromSortedIndex(sortedIndex);
-  }
-
-  /**
-   * The method return the dictionary chunks wrapper of a column
-   * The wrapper wraps the list<list<bye[]>> and provide the iterator to retrieve the chunks
-   * members.
-   * Applications Scenario:
-   * For preparing the column Sort info while writing the sort index file.
-   *
-   * @return
-   */
-  @Override public DictionaryChunksWrapper getDictionaryChunks() {
-    return columnDictionaryInfo.getDictionaryChunks();
-  }
-
-  /**
-   * This method will release the objects and set default value for primitive types
-   */
-  @Override public void clear() {
-    if (null != columnDictionaryInfo) {
-      columnDictionaryInfo.clear();
-      columnDictionaryInfo = null;
-    }
-  }
-
-  /**
-   * This method will read the surrogates based on search range.
-   *
-   * @param surrogates
-   */
-  public void getSurrogateKeyByIncrementalSearch(List<String> evaluateResultList,
-      List<Integer> surrogates) {
-    List<byte[]> byteValuesOfFilterMembers = new ArrayList<byte[]>(evaluateResultList.size());
-    byte[] keyData = null;
-    for (int i = 0; i < evaluateResultList.size(); i++) {
-      keyData = evaluateResultList.get(i)
-          .getBytes(Charset.forName(CarbonCommonConstants.DEFAULT_CHARSET));
-      byteValuesOfFilterMembers.add(keyData);
-    }
-
-    columnDictionaryInfo
-        .getIncrementalSurrogateKeyFromDictionary(byteValuesOfFilterMembers, surrogates);
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/cd6a4ff3/core/src/main/java/org/carbondata/core/cache/dictionary/ForwardDictionaryCache.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/carbondata/core/cache/dictionary/ForwardDictionaryCache.java b/core/src/main/java/org/carbondata/core/cache/dictionary/ForwardDictionaryCache.java
deleted file mode 100644
index bee7714..0000000
--- a/core/src/main/java/org/carbondata/core/cache/dictionary/ForwardDictionaryCache.java
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * 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.carbondata.core.cache.dictionary;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-
-import org.carbondata.common.logging.LogService;
-import org.carbondata.common.logging.LogServiceFactory;
-import org.carbondata.core.cache.CacheType;
-import org.carbondata.core.cache.CarbonLRUCache;
-import org.carbondata.core.util.CarbonUtilException;
-
-/**
- * This class implements methods to create dictionary cache which will hold
- * dictionary chunks for look up of surrogate keys and values
- */
-public class ForwardDictionaryCache<K extends DictionaryColumnUniqueIdentifier,
-                                    V extends Dictionary>
-    extends AbstractDictionaryCache<K, V> {
-
-  /**
-   * Attribute for Carbon LOGGER
-   */
-  private static final LogService LOGGER =
-      LogServiceFactory.getLogService(ForwardDictionaryCache.class.getName());
-
-  /**
-   * @param carbonStorePath
-   * @param carbonLRUCache
-   */
-  public ForwardDictionaryCache(String carbonStorePath, CarbonLRUCache carbonLRUCache) {
-    super(carbonStorePath, carbonLRUCache);
-  }
-
-  /**
-   * This method will get the value for the given key. If value does not exist
-   * for the given key, it will check and load the value.
-   *
-   * @param dictionaryColumnUniqueIdentifier unique identifier which contains dbName,
-   *                                         tableName and columnIdentifier
-   * @return dictionary
-   * @throws CarbonUtilException in case memory is not sufficient to load dictionary into memory
-   */
-  @Override public Dictionary get(DictionaryColumnUniqueIdentifier dictionaryColumnUniqueIdentifier)
-      throws CarbonUtilException {
-    return getDictionary(dictionaryColumnUniqueIdentifier);
-  }
-
-  /**
-   * This method will return a list of values for the given list of keys.
-   * For each key, this method will check and load the data if required.
-   *
-   * @param dictionaryColumnUniqueIdentifiers unique identifier which contains dbName,
-   *                                          tableName and columnIdentifier
-   * @return list of dictionary
-   * @throws CarbonUtilException in case memory is not sufficient to load dictionary into memory
-   */
-  @Override public List<Dictionary> getAll(
-      List<DictionaryColumnUniqueIdentifier> dictionaryColumnUniqueIdentifiers)
-      throws CarbonUtilException {
-    boolean exceptionOccurredInDictionaryLoading = false;
-    String exceptionMessage = "";
-    List<Dictionary> forwardDictionaryObjectList =
-        new ArrayList<Dictionary>(dictionaryColumnUniqueIdentifiers.size());
-    List<Future<Dictionary>> taskSubmitList =
-        new ArrayList<>(dictionaryColumnUniqueIdentifiers.size());
-    ExecutorService executorService = Executors.newFixedThreadPool(thread_pool_size);
-    for (final DictionaryColumnUniqueIdentifier uniqueIdent : dictionaryColumnUniqueIdentifiers) {
-      taskSubmitList.add(executorService.submit(new Callable<Dictionary>() {
-        @Override public Dictionary call() throws CarbonUtilException {
-          Dictionary dictionary = getDictionary(uniqueIdent);
-          return dictionary;
-        }
-      }));
-    }
-    try {
-      executorService.shutdown();
-      executorService.awaitTermination(2, TimeUnit.HOURS);
-    } catch (InterruptedException e) {
-      LOGGER.error("Error loading the dictionary: " + e.getMessage());
-    }
-    for (int i = 0; i < taskSubmitList.size(); i++) {
-      try {
-        Dictionary columnDictionary = taskSubmitList.get(i).get();
-        forwardDictionaryObjectList.add(columnDictionary);
-      } catch (Throwable e) {
-        exceptionOccurredInDictionaryLoading = true;
-        exceptionMessage = e.getMessage();
-      }
-    }
-    if (exceptionOccurredInDictionaryLoading) {
-      clearDictionary(forwardDictionaryObjectList);
-      LOGGER.error(exceptionMessage);
-      throw new CarbonUtilException(exceptionMessage);
-    }
-    return forwardDictionaryObjectList;
-  }
-
-  /**
-   * This method will return the value for the given key. It will not check and load
-   * the data for the given key
-   *
-   * @param dictionaryColumnUniqueIdentifier unique identifier which contains dbName,
-   *                                         tableName and columnIdentifier
-   * @return
-   */
-  @Override public Dictionary getIfPresent(
-      DictionaryColumnUniqueIdentifier dictionaryColumnUniqueIdentifier) {
-    Dictionary forwardDictionary = null;
-    ColumnDictionaryInfo columnDictionaryInfo = (ColumnDictionaryInfo) carbonLRUCache.get(
-        getLruCacheKey(dictionaryColumnUniqueIdentifier.getColumnIdentifier().getColumnId(),
-            CacheType.FORWARD_DICTIONARY));
-    if (null != columnDictionaryInfo) {
-      forwardDictionary = new ForwardDictionary(columnDictionaryInfo);
-      incrementDictionaryAccessCount(columnDictionaryInfo);
-    }
-    return forwardDictionary;
-  }
-
-  /**
-   * This method will remove the cache for a given key
-   *
-   * @param dictionaryColumnUniqueIdentifier unique identifier which contains dbName,
-   *                                         tableName and columnIdentifier
-   */
-  @Override public void invalidate(
-      DictionaryColumnUniqueIdentifier dictionaryColumnUniqueIdentifier) {
-    carbonLRUCache.remove(
-        getLruCacheKey(dictionaryColumnUniqueIdentifier.getColumnIdentifier().getColumnId(),
-            CacheType.FORWARD_DICTIONARY));
-  }
-
-  /**
-   * This method will get the value for the given key. If value does not exist
-   * for the given key, it will check and load the value.
-   *
-   * @param dictionaryColumnUniqueIdentifier unique identifier which contains dbName,
-   *                                         tableName and columnIdentifier
-   * @return dictionary
-   * @throws CarbonUtilException in case memory is not sufficient to load dictionary into memory
-   */
-  private Dictionary getDictionary(
-      DictionaryColumnUniqueIdentifier dictionaryColumnUniqueIdentifier)
-      throws CarbonUtilException {
-    Dictionary forwardDictionary = null;
-    // create column dictionary info object only if dictionary and its
-    // metadata file exists for a given column identifier
-    if (!isFileExistsForGivenColumn(dictionaryColumnUniqueIdentifier)) {
-      throw new CarbonUtilException(
-          "Either dictionary or its metadata does not exist for column identifier :: "
-              + dictionaryColumnUniqueIdentifier.getColumnIdentifier());
-    }
-    String columnIdentifier = dictionaryColumnUniqueIdentifier.getColumnIdentifier().getColumnId();
-    ColumnDictionaryInfo columnDictionaryInfo =
-        getColumnDictionaryInfo(dictionaryColumnUniqueIdentifier, columnIdentifier);
-    // load sort index file in case of forward dictionary
-    checkAndLoadDictionaryData(dictionaryColumnUniqueIdentifier, columnDictionaryInfo,
-        getLruCacheKey(dictionaryColumnUniqueIdentifier.getColumnIdentifier().getColumnId(),
-            CacheType.FORWARD_DICTIONARY), true);
-    forwardDictionary = new ForwardDictionary(columnDictionaryInfo);
-    return forwardDictionary;
-  }
-
-  /**
-   * This method will check and create columnDictionaryInfo object for the given column
-   *
-   * @param dictionaryColumnUniqueIdentifier
-   * @param columnIdentifier
-   * @return
-   */
-  private ColumnDictionaryInfo getColumnDictionaryInfo(
-      DictionaryColumnUniqueIdentifier dictionaryColumnUniqueIdentifier, String columnIdentifier) {
-    ColumnDictionaryInfo columnDictionaryInfo = (ColumnDictionaryInfo) carbonLRUCache
-        .get(getLruCacheKey(columnIdentifier, CacheType.FORWARD_DICTIONARY));
-    if (null == columnDictionaryInfo) {
-      synchronized (dictionaryColumnUniqueIdentifier) {
-        columnDictionaryInfo = (ColumnDictionaryInfo) carbonLRUCache
-            .get(getLruCacheKey(columnIdentifier, CacheType.FORWARD_DICTIONARY));
-        if (null == columnDictionaryInfo) {
-          columnDictionaryInfo =
-              new ColumnDictionaryInfo(dictionaryColumnUniqueIdentifier.getDataType());
-        }
-      }
-    }
-    return columnDictionaryInfo;
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/cd6a4ff3/core/src/main/java/org/carbondata/core/cache/dictionary/ReverseDictionary.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/carbondata/core/cache/dictionary/ReverseDictionary.java b/core/src/main/java/org/carbondata/core/cache/dictionary/ReverseDictionary.java
deleted file mode 100644
index a1f50a4..0000000
--- a/core/src/main/java/org/carbondata/core/cache/dictionary/ReverseDictionary.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * 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.carbondata.core.cache.dictionary;
-
-/**
- * This class will be used for dictionary key and value look up
- */
-public class ReverseDictionary implements Dictionary {
-
-  /**
-   * Object which will hold the information related to this dictionary column
-   */
-  private ColumnReverseDictionaryInfo columnReverseDictionaryInfo;
-
-  /**
-   * @param columnReverseDictionaryInfo
-   */
-  public ReverseDictionary(ColumnReverseDictionaryInfo columnReverseDictionaryInfo) {
-    this.columnReverseDictionaryInfo = columnReverseDictionaryInfo;
-  }
-
-  /**
-   * This method will find and return the surrogate key for a given dictionary value
-   * Applicable scenario:
-   * 1. Incremental data load : Dictionary will not be generated for existing values. For
-   * that values have to be looked up in the existing dictionary cache.
-   * 2. Filter scenarios where from value surrogate key has to be found.
-   *
-   * @param value dictionary value
-   * @return if found returns key else 0
-   */
-  @Override public int getSurrogateKey(String value) {
-    return columnReverseDictionaryInfo.getSurrogateKey(value);
-  }
-
-  /**
-   * This method will find and return the surrogate key for a given dictionary value
-   * Applicable scenario:
-   * 1. Incremental data load : Dictionary will not be generated for existing values. For
-   * that values have to be looked up in the existing dictionary cache.
-   * 2. Filter scenarios where from value surrogate key has to be found.
-   *
-   * @param value dictionary value as byte array
-   * @return if found returns key else 0
-   */
-  @Override public int getSurrogateKey(byte[] value) {
-    return columnReverseDictionaryInfo.getSurrogateKey(value);
-  }
-
-  /**
-   * This method will find and return the dictionary value for a given surrogate key.
-   * Applicable scenarios:
-   * 1. Query final result preparation : While convert the final result which will
-   * be surrogate key back to original dictionary values this method will be used
-   *
-   * @param surrogateKey a unique ID for a dictionary value
-   * @return value if found else null
-   */
-  @Override public String getDictionaryValueForKey(int surrogateKey) {
-    return columnReverseDictionaryInfo.getDictionaryValueForKey(surrogateKey);
-  }
-
-  /**
-   * This method will find and return the sort index for a given dictionary id.
-   * Applicable scenarios:
-   * 1. Used in case of order by queries when data sorting is required
-   *
-   * @param surrogateKey a unique ID for a dictionary value
-   * @return if found returns key else 0
-   */
-  @Override public int getSortedIndex(int surrogateKey) {
-    return columnReverseDictionaryInfo.getSortedIndex(surrogateKey);
-  }
-
-  /**
-   * This method will find and return the dictionary value from sorted index.
-   * Applicable scenarios:
-   * 1. Query final result preparation in case of order by queries:
-   * While convert the final result which will
-   * be surrogate key back to original dictionary values this method will be used
-   *
-   * @param sortedIndex sort index of dictionary value
-   * @return value if found else null
-   */
-  @Override public String getDictionaryValueFromSortedIndex(int sortedIndex) {
-    return columnReverseDictionaryInfo.getDictionaryValueFromSortedIndex(sortedIndex);
-  }
-
-  /**
-   * The method return the dictionary chunks wrapper of a column
-   * The wrapper wraps the list<list<bye[]>> and provide the iterator to retrieve the chunks
-   * members.
-   * Applications Scenario:
-   * For preparing the column Sort info while writing the sort index file.
-   *
-   * @return
-   */
-  @Override public DictionaryChunksWrapper getDictionaryChunks() {
-    return columnReverseDictionaryInfo.getDictionaryChunks();
-  }
-
-  /**
-   * This method will release the objects and set default value for primitive types
-   */
-  @Override public void clear() {
-    if (null != columnReverseDictionaryInfo) {
-      columnReverseDictionaryInfo.clear();
-      columnReverseDictionaryInfo = null;
-    }
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-carbondata/blob/cd6a4ff3/core/src/main/java/org/carbondata/core/cache/dictionary/ReverseDictionaryCache.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/carbondata/core/cache/dictionary/ReverseDictionaryCache.java b/core/src/main/java/org/carbondata/core/cache/dictionary/ReverseDictionaryCache.java
deleted file mode 100644
index 6e49183..0000000
--- a/core/src/main/java/org/carbondata/core/cache/dictionary/ReverseDictionaryCache.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * 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.carbondata.core.cache.dictionary;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-
-import org.carbondata.common.logging.LogService;
-import org.carbondata.common.logging.LogServiceFactory;
-import org.carbondata.core.cache.CacheType;
-import org.carbondata.core.cache.CarbonLRUCache;
-import org.carbondata.core.util.CarbonUtilException;
-
-/**
- * This class implements methods to create dictionary cache which will hold
- * dictionary chunks for look up of surrogate keys and values
- */
-public class ReverseDictionaryCache<K extends DictionaryColumnUniqueIdentifier,
-    V extends Dictionary>
-    extends AbstractDictionaryCache<K, V> {
-
-  /**
-   * Attribute for Carbon LOGGER
-   */
-  private static final LogService LOGGER =
-      LogServiceFactory.getLogService(ForwardDictionaryCache.class.getName());
-
-  /**
-   * @param carbonStorePath
-   * @param carbonLRUCache
-   */
-  public ReverseDictionaryCache(String carbonStorePath, CarbonLRUCache carbonLRUCache) {
-    super(carbonStorePath, carbonLRUCache);
-  }
-
-  /**
-   * This method will get the value for the given key. If value does not exist
-   * for the given key, it will check and load the value.
-   *
-   * @param dictionaryColumnUniqueIdentifier unique identifier which contains dbName,
-   *                                         tableName and columnIdentifier
-   * @return dictionary
-   * @throws CarbonUtilException in case memory is not sufficient to load dictionary into memory
-   */
-  @Override public Dictionary get(DictionaryColumnUniqueIdentifier dictionaryColumnUniqueIdentifier)
-      throws CarbonUtilException {
-    return getDictionary(dictionaryColumnUniqueIdentifier);
-  }
-
-  /**
-   * This method will return a list of values for the given list of keys.
-   * For each key, this method will check and load the data if required.
-   *
-   * @param dictionaryColumnUniqueIdentifiers unique identifier which contains dbName,
-   *                                          tableName and columnIdentifier
-   * @return list of dictionary
-   * @throws CarbonUtilException in case memory is not sufficient to load dictionary into memory
-   */
-  @Override public List<Dictionary> getAll(
-      List<DictionaryColumnUniqueIdentifier> dictionaryColumnUniqueIdentifiers)
-      throws CarbonUtilException {
-    boolean exceptionOccurredInDictionaryLoading = false;
-    String exceptionMessage = "";
-    List<Dictionary> reverseDictionaryObjectList =
-        new ArrayList<Dictionary>(dictionaryColumnUniqueIdentifiers.size());
-    List<Future<Dictionary>> taskSubmitList =
-        new ArrayList<>(dictionaryColumnUniqueIdentifiers.size());
-    ExecutorService executorService = Executors.newFixedThreadPool(thread_pool_size);
-    for (final DictionaryColumnUniqueIdentifier uniqueIdent : dictionaryColumnUniqueIdentifiers) {
-      taskSubmitList.add(executorService.submit(new Callable<Dictionary>() {
-        @Override public Dictionary call() throws CarbonUtilException {
-          Dictionary dictionary = getDictionary(uniqueIdent);
-          return dictionary;
-        }
-      }));
-    }
-    try {
-      executorService.shutdown();
-      executorService.awaitTermination(2, TimeUnit.HOURS);
-    } catch (InterruptedException e) {
-      LOGGER.error("Error loading the dictionary: " + e.getMessage());
-    }
-    for (int i = 0; i < taskSubmitList.size(); i++) {
-      try {
-        Dictionary columnDictionary = taskSubmitList.get(i).get();
-        reverseDictionaryObjectList.add(columnDictionary);
-      } catch (Throwable e) {
-        exceptionOccurredInDictionaryLoading = true;
-        exceptionMessage = e.getMessage();
-      }
-    }
-    if (exceptionOccurredInDictionaryLoading) {
-      clearDictionary(reverseDictionaryObjectList);
-      LOGGER.error(exceptionMessage);
-      throw new CarbonUtilException(exceptionMessage);
-    }
-    return reverseDictionaryObjectList;
-  }
-
-  /**
-   * This method will return the value for the given key. It will not check and load
-   * the data for the given key
-   *
-   * @param dictionaryColumnUniqueIdentifier unique identifier which contains dbName,
-   *                                         tableName and columnIdentifier
-   * @return
-   */
-  @Override public Dictionary getIfPresent(
-      DictionaryColumnUniqueIdentifier dictionaryColumnUniqueIdentifier) {
-    Dictionary reverseDictionary = null;
-    ColumnReverseDictionaryInfo columnReverseDictionaryInfo =
-        (ColumnReverseDictionaryInfo) carbonLRUCache.get(
-            getLruCacheKey(dictionaryColumnUniqueIdentifier.getColumnIdentifier().getColumnId(),
-                CacheType.REVERSE_DICTIONARY));
-    if (null != columnReverseDictionaryInfo) {
-      reverseDictionary = new ReverseDictionary(columnReverseDictionaryInfo);
-      incrementDictionaryAccessCount(columnReverseDictionaryInfo);
-    }
-    return reverseDictionary;
-  }
-
-  /**
-   * This method will remove the cache for a given key
-   *
-   * @param dictionaryColumnUniqueIdentifier unique identifier which contains dbName,
-   *                                         tableName and columnIdentifier
-   */
-  @Override public void invalidate(
-      DictionaryColumnUniqueIdentifier dictionaryColumnUniqueIdentifier) {
-    carbonLRUCache.remove(
-        getLruCacheKey(dictionaryColumnUniqueIdentifier.getColumnIdentifier().getColumnId(),
-            CacheType.REVERSE_DICTIONARY));
-  }
-
-  /**
-   * This method will get the value for the given key. If value does not exist
-   * for the given key, it will check and load the value.
-   *
-   * @param dictionaryColumnUniqueIdentifier unique identifier which contains dbName,
-   *                                         tableName and columnIdentifier
-   * @return dictionary
-   * @throws CarbonUtilException in case memory is not sufficient to load dictionary into memory
-   */
-  private Dictionary getDictionary(
-      DictionaryColumnUniqueIdentifier dictionaryColumnUniqueIdentifier)
-      throws CarbonUtilException {
-    Dictionary reverseDictionary = null;
-    // create column dictionary info object only if dictionary and its
-    // metadata file exists for a given column identifier
-    if (!isFileExistsForGivenColumn(dictionaryColumnUniqueIdentifier)) {
-      throw new CarbonUtilException(
-          "Either dictionary or its metadata does not exist for column identifier :: "
-              + dictionaryColumnUniqueIdentifier.getColumnIdentifier());
-    }
-    String columnIdentifier = dictionaryColumnUniqueIdentifier.getColumnIdentifier().getColumnId();
-    ColumnReverseDictionaryInfo columnReverseDictionaryInfo =
-        getColumnReverseDictionaryInfo(dictionaryColumnUniqueIdentifier, columnIdentifier);
-    // do not load sort index file for reverse dictionary
-    checkAndLoadDictionaryData(dictionaryColumnUniqueIdentifier, columnReverseDictionaryInfo,
-        getLruCacheKey(dictionaryColumnUniqueIdentifier.getColumnIdentifier().getColumnId(),
-            CacheType.REVERSE_DICTIONARY), false);
-    reverseDictionary = new ReverseDictionary(columnReverseDictionaryInfo);
-    return reverseDictionary;
-  }
-
-  /**
-   * This method will check and create columnReverseDictionaryInfo object for the given column
-   *
-   * @param dictionaryColumnUniqueIdentifier
-   * @param columnIdentifier
-   * @return
-   */
-  private ColumnReverseDictionaryInfo getColumnReverseDictionaryInfo(
-      DictionaryColumnUniqueIdentifier dictionaryColumnUniqueIdentifier, String columnIdentifier) {
-    ColumnReverseDictionaryInfo columnReverseDictionaryInfo =
-        (ColumnReverseDictionaryInfo) carbonLRUCache
-            .get(getLruCacheKey(columnIdentifier, CacheType.REVERSE_DICTIONARY));
-    if (null == columnReverseDictionaryInfo) {
-      synchronized (dictionaryColumnUniqueIdentifier) {
-        columnReverseDictionaryInfo = (ColumnReverseDictionaryInfo) carbonLRUCache
-            .get(getLruCacheKey(columnIdentifier, CacheType.REVERSE_DICTIONARY));
-        if (null == columnReverseDictionaryInfo) {
-          columnReverseDictionaryInfo = new ColumnReverseDictionaryInfo();
-        }
-      }
-    }
-    return columnReverseDictionaryInfo;
-  }
-}