HBASE-1189 Changing the map type used internally for HbaseMapWritable
git-svn-id: https://svn.apache.org/repos/asf/hadoop/hbase/trunk@748256 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
5a9bdffadb
commit
e52b1ac411
|
@ -61,6 +61,8 @@ Release 0.20.0 - Unreleased
|
||||||
(Lars George via Stack)
|
(Lars George via Stack)
|
||||||
HBASE-1221 When using ant -projecthelp to build HBase not all the important
|
HBASE-1221 When using ant -projecthelp to build HBase not all the important
|
||||||
options show up (Erik Holstad via Stack)
|
options show up (Erik Holstad via Stack)
|
||||||
|
HBASE-1189 Changing the map type used internally for HbaseMapWritable
|
||||||
|
(Erik Holstad via Stack)
|
||||||
|
|
||||||
Release 0.19.0 - 01/21/2009
|
Release 0.19.0 - 01/21/2009
|
||||||
INCOMPATIBLE CHANGES
|
INCOMPATIBLE CHANGES
|
||||||
|
|
|
@ -0,0 +1,71 @@
|
||||||
|
/**
|
||||||
|
* Copyright 2009 The Apache Software Foundation
|
||||||
|
*
|
||||||
|
* 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;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A Static Interface.
|
||||||
|
* Instead of having this code in the the HbaseMapWritable code, where it
|
||||||
|
* blocks the possibility of altering the variables and changing their types,
|
||||||
|
* it is put here in this static interface where the static final Maps are
|
||||||
|
* loaded one time. Only byte[] and Cell are supported at this time.
|
||||||
|
*/
|
||||||
|
public interface CodeToClassAndBack {
|
||||||
|
/**
|
||||||
|
* Static map that contains mapping from code to class
|
||||||
|
*/
|
||||||
|
public static final Map<Byte, Class<?>> CODE_TO_CLASS =
|
||||||
|
new HashMap<Byte, Class<?>>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Static map that contains mapping from class to code
|
||||||
|
*/
|
||||||
|
public static final Map<Class<?>, Byte> CLASS_TO_CODE =
|
||||||
|
new HashMap<Class<?>, Byte>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class list for supported classes
|
||||||
|
*/
|
||||||
|
public Class[] classList = {byte[].class, Cell.class};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The static loader that is used instead of the static constructor in
|
||||||
|
* HbaseMapWritable.
|
||||||
|
*/
|
||||||
|
public InternalStaticLoader sl =
|
||||||
|
new InternalStaticLoader(classList, CODE_TO_CLASS, CLASS_TO_CODE);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class that loads the static maps with their values.
|
||||||
|
*/
|
||||||
|
public class InternalStaticLoader{
|
||||||
|
InternalStaticLoader(Class[] classList, Map<Byte, Class<?>> CODE_TO_CLASS,
|
||||||
|
Map<Class<?>, Byte> CLASS_TO_CODE){
|
||||||
|
byte code = 1;
|
||||||
|
for(int i=0; i<classList.length; i++){
|
||||||
|
CLASS_TO_CODE.put(classList[i], code);
|
||||||
|
CODE_TO_CLASS.put(code, classList[i]);
|
||||||
|
code++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -24,7 +24,6 @@ import java.io.DataOutput;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.SortedMap;
|
import java.util.SortedMap;
|
||||||
|
@ -33,9 +32,7 @@ import java.util.concurrent.atomic.AtomicReference;
|
||||||
|
|
||||||
import org.apache.hadoop.conf.Configurable;
|
import org.apache.hadoop.conf.Configurable;
|
||||||
import org.apache.hadoop.conf.Configuration;
|
import org.apache.hadoop.conf.Configuration;
|
||||||
import org.apache.hadoop.hbase.HStoreKey;
|
|
||||||
import org.apache.hadoop.hbase.util.Bytes;
|
import org.apache.hadoop.hbase.util.Bytes;
|
||||||
import org.apache.hadoop.io.Text;
|
|
||||||
import org.apache.hadoop.io.Writable;
|
import org.apache.hadoop.io.Writable;
|
||||||
import org.apache.hadoop.util.ReflectionUtils;
|
import org.apache.hadoop.util.ReflectionUtils;
|
||||||
|
|
||||||
|
@ -48,37 +45,45 @@ import org.apache.hadoop.util.ReflectionUtils;
|
||||||
* @param <K> <byte []> key TODO: Parameter K is never used, could be removed.
|
* @param <K> <byte []> key TODO: Parameter K is never used, could be removed.
|
||||||
* @param <V> value Expects a Writable or byte [].
|
* @param <V> value Expects a Writable or byte [].
|
||||||
*/
|
*/
|
||||||
public class HbaseMapWritable <K, V>
|
public class HbaseMapWritable <K,V>
|
||||||
implements SortedMap<byte [], V>, Writable, Configurable {
|
implements SortedMap<byte[],V>, Configurable, Writable,
|
||||||
private AtomicReference<Configuration> conf =
|
CodeToClassAndBack{
|
||||||
new AtomicReference<Configuration>();
|
|
||||||
|
private AtomicReference<Configuration> conf = null;
|
||||||
|
protected SortedMap<byte [], V> instance = null;
|
||||||
|
|
||||||
// Static maps of code to class and vice versa. Includes types used in hbase
|
// Static maps of code to class and vice versa. Includes types used in hbase
|
||||||
// only.
|
// only. These maps are now initialized in a static loader interface instead
|
||||||
static final Map<Byte, Class<?>> CODE_TO_CLASS =
|
// of in a static contructor for this class, this is done so that it is
|
||||||
new HashMap<Byte, Class<?>>();
|
// possible to have a regular contructor here, so that different params can
|
||||||
static final Map<Class<?>, Byte> CLASS_TO_CODE =
|
// be used.
|
||||||
new HashMap<Class<?>, Byte>();
|
|
||||||
|
// Removed the old types like Text from the maps, if needed to add more types
|
||||||
|
// this can be done in the StaticHBaseMapWritableLoader interface. Only
|
||||||
|
// byte[] and Cell are supported now.
|
||||||
|
// static final Map<Byte, Class<?>> CODE_TO_CLASS =
|
||||||
|
// new HashMap<Byte, Class<?>>();
|
||||||
|
// static final Map<Class<?>, Byte> CLASS_TO_CODE =
|
||||||
|
// new HashMap<Class<?>, Byte>();
|
||||||
|
|
||||||
static {
|
/**
|
||||||
byte code = 0;
|
* The default contructor where a TreeMap is used
|
||||||
addToMap(HStoreKey.class, code++);
|
**/
|
||||||
addToMap(ImmutableBytesWritable.class, code++);
|
public HbaseMapWritable(){
|
||||||
addToMap(Text.class, code++);
|
this (new TreeMap<byte [], V>(Bytes.BYTES_COMPARATOR));
|
||||||
addToMap(Cell.class, code++);
|
}
|
||||||
addToMap(byte [].class, code++);
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("boxing")
|
/**
|
||||||
private static void addToMap(final Class<?> clazz,
|
* Contructor where another SortedMap can be used
|
||||||
final byte code) {
|
*
|
||||||
CLASS_TO_CODE.put(clazz, code);
|
* @param map the SortedMap to be used
|
||||||
CODE_TO_CLASS.put(code, clazz);
|
**/
|
||||||
|
public HbaseMapWritable(SortedMap<byte[], V> map){
|
||||||
|
conf = new AtomicReference<Configuration>();
|
||||||
|
instance = map;
|
||||||
}
|
}
|
||||||
|
|
||||||
private SortedMap<byte [], V> instance =
|
|
||||||
new TreeMap<byte [], V>(Bytes.BYTES_COMPARATOR);
|
|
||||||
|
|
||||||
/** @return the conf */
|
/** @return the conf */
|
||||||
public Configuration getConf() {
|
public Configuration getConf() {
|
||||||
return conf.get();
|
return conf.get();
|
||||||
|
@ -228,4 +233,4 @@ implements SortedMap<byte [], V>, Writable, Configurable {
|
||||||
this.instance.put(key, value);
|
this.instance.put(key, value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue