Skip to content

Commit

Permalink
Change block encoding factory to not be type specific
Browse files Browse the repository at this point in the history
  • Loading branch information
dain committed Jul 29, 2014
1 parent d960f53 commit 3783cb0
Show file tree
Hide file tree
Showing 28 changed files with 54 additions and 204 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
import com.facebook.presto.spi.block.BlockEncoding;
import com.facebook.presto.spi.block.BlockEncodingFactory;
import com.facebook.presto.spi.block.BlockEncodingSerde;
import com.facebook.presto.serde.TypeSerde;
import com.facebook.presto.spi.type.TypeSerde;
import com.facebook.presto.spi.type.Type;
import com.facebook.presto.spi.type.TypeManager;
import io.airlift.slice.Slice;
Expand Down Expand Up @@ -96,7 +96,7 @@ public SnappyBlockEncoding readEncoding(TypeManager manager, BlockEncodingSerde
@Override
public void writeEncoding(BlockEncodingSerde serde, SliceOutput output, SnappyBlockEncoding blockEncoding)
{
TypeSerde.writeInfo(output, blockEncoding.type);
TypeSerde.writeType(output, blockEncoding.type);
serde.writeBlockEncoding(output, blockEncoding.uncompressedBlockEncoding);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,21 +56,10 @@
import com.facebook.presto.spi.ConnectorSplit;
import com.facebook.presto.spi.block.BlockEncodingFactory;
import com.facebook.presto.spi.block.BlockEncodingSerde;
import com.facebook.presto.spi.type.BigintType;
import com.facebook.presto.spi.type.BooleanType;
import com.facebook.presto.spi.type.DateType;
import com.facebook.presto.spi.type.DoubleType;
import com.facebook.presto.spi.type.HyperLogLogType;
import com.facebook.presto.spi.type.IntervalDayTimeType;
import com.facebook.presto.spi.type.IntervalYearMonthType;
import com.facebook.presto.spi.type.TimeType;
import com.facebook.presto.spi.type.TimeWithTimeZoneType;
import com.facebook.presto.spi.type.TimestampType;
import com.facebook.presto.spi.type.TimestampWithTimeZoneType;
import com.facebook.presto.spi.block.FixedWidthBlockEncoding;
import com.facebook.presto.spi.block.VariableWidthBlockEncoding;
import com.facebook.presto.spi.type.Type;
import com.facebook.presto.spi.type.TypeManager;
import com.facebook.presto.spi.type.VarbinaryType;
import com.facebook.presto.spi.type.VarcharType;
import com.facebook.presto.split.ConnectorDataStreamProvider;
import com.facebook.presto.split.DataStreamManager;
import com.facebook.presto.split.DataStreamProvider;
Expand All @@ -86,10 +75,8 @@
import com.facebook.presto.sql.planner.optimizations.PlanOptimizer;
import com.facebook.presto.sql.tree.Expression;
import com.facebook.presto.sql.tree.FunctionCall;
import com.facebook.presto.type.ColorType;
import com.facebook.presto.type.TypeDeserializer;
import com.facebook.presto.type.TypeRegistry;
import com.facebook.presto.type.UnknownType;
import com.google.common.base.Supplier;
import com.google.common.collect.ImmutableSet;
import com.google.inject.Binder;
Expand Down Expand Up @@ -267,24 +254,11 @@ protected void setup(Binder binder)
binder.bind(BlockEncodingManager.class).in(Scopes.SINGLETON);
binder.bind(BlockEncodingSerde.class).to(BlockEncodingManager.class).in(Scopes.SINGLETON);
Multibinder<BlockEncodingFactory<?>> blockEncodingFactoryBinder = newSetBinder(binder, new TypeLiteral<BlockEncodingFactory<?>>() {});
blockEncodingFactoryBinder.addBinding().toInstance(UnknownType.BLOCK_ENCODING_FACTORY);
blockEncodingFactoryBinder.addBinding().toInstance(BooleanType.BLOCK_ENCODING_FACTORY);
blockEncodingFactoryBinder.addBinding().toInstance(BigintType.BLOCK_ENCODING_FACTORY);
blockEncodingFactoryBinder.addBinding().toInstance(DoubleType.BLOCK_ENCODING_FACTORY);
blockEncodingFactoryBinder.addBinding().toInstance(VarcharType.BLOCK_ENCODING_FACTORY);
blockEncodingFactoryBinder.addBinding().toInstance(VarbinaryType.BLOCK_ENCODING_FACTORY);
blockEncodingFactoryBinder.addBinding().toInstance(DateType.BLOCK_ENCODING_FACTORY);
blockEncodingFactoryBinder.addBinding().toInstance(TimeType.BLOCK_ENCODING_FACTORY);
blockEncodingFactoryBinder.addBinding().toInstance(TimeWithTimeZoneType.BLOCK_ENCODING_FACTORY);
blockEncodingFactoryBinder.addBinding().toInstance(TimestampType.BLOCK_ENCODING_FACTORY);
blockEncodingFactoryBinder.addBinding().toInstance(TimestampWithTimeZoneType.BLOCK_ENCODING_FACTORY);
blockEncodingFactoryBinder.addBinding().toInstance(IntervalYearMonthType.BLOCK_ENCODING_FACTORY);
blockEncodingFactoryBinder.addBinding().toInstance(IntervalDayTimeType.BLOCK_ENCODING_FACTORY);
blockEncodingFactoryBinder.addBinding().toInstance(VariableWidthBlockEncoding.FACTORY);
blockEncodingFactoryBinder.addBinding().toInstance(FixedWidthBlockEncoding.FACTORY);
blockEncodingFactoryBinder.addBinding().toInstance(RunLengthBlockEncoding.FACTORY);
blockEncodingFactoryBinder.addBinding().toInstance(DictionaryBlockEncoding.FACTORY);
blockEncodingFactoryBinder.addBinding().toInstance(SnappyBlockEncoding.FACTORY);
blockEncodingFactoryBinder.addBinding().toInstance(HyperLogLogType.BLOCK_ENCODING_FACTORY);
blockEncodingFactoryBinder.addBinding().toInstance(ColorType.BLOCK_ENCODING_FACTORY);

// thread visualizer
jaxrsBinder(binder).bind(ThreadResource.class);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,22 +18,9 @@
import com.facebook.presto.block.rle.RunLengthBlockEncoding;
import com.facebook.presto.block.snappy.SnappyBlockEncoding;
import com.facebook.presto.spi.block.BlockEncodingSerde;
import com.facebook.presto.spi.type.BigintType;
import com.facebook.presto.spi.type.BooleanType;
import com.facebook.presto.spi.type.DateType;
import com.facebook.presto.spi.type.DoubleType;
import com.facebook.presto.spi.type.HyperLogLogType;
import com.facebook.presto.spi.type.IntervalDayTimeType;
import com.facebook.presto.spi.type.IntervalYearMonthType;
import com.facebook.presto.spi.type.TimeType;
import com.facebook.presto.spi.type.TimeWithTimeZoneType;
import com.facebook.presto.spi.type.TimestampType;
import com.facebook.presto.spi.type.TimestampWithTimeZoneType;
import com.facebook.presto.spi.type.VarbinaryType;
import com.facebook.presto.spi.type.VarcharType;
import com.facebook.presto.type.ColorType;
import com.facebook.presto.spi.block.FixedWidthBlockEncoding;
import com.facebook.presto.spi.block.VariableWidthBlockEncoding;
import com.facebook.presto.type.TypeRegistry;
import com.facebook.presto.type.UnknownType;

public final class TestingBlockEncodingManager
{
Expand All @@ -45,23 +32,10 @@ public static BlockEncodingSerde createTestingBlockEncodingManager()
{
return new BlockEncodingManager(
new TypeRegistry(),
UnknownType.BLOCK_ENCODING_FACTORY,
BooleanType.BLOCK_ENCODING_FACTORY,
BigintType.BLOCK_ENCODING_FACTORY,
DoubleType.BLOCK_ENCODING_FACTORY,
VarcharType.BLOCK_ENCODING_FACTORY,
VarbinaryType.BLOCK_ENCODING_FACTORY,
DateType.BLOCK_ENCODING_FACTORY,
TimeType.BLOCK_ENCODING_FACTORY,
TimeWithTimeZoneType.BLOCK_ENCODING_FACTORY,
TimestampType.BLOCK_ENCODING_FACTORY,
TimestampWithTimeZoneType.BLOCK_ENCODING_FACTORY,
IntervalYearMonthType.BLOCK_ENCODING_FACTORY,
IntervalDayTimeType.BLOCK_ENCODING_FACTORY,
VariableWidthBlockEncoding.FACTORY,
FixedWidthBlockEncoding.FACTORY,
RunLengthBlockEncoding.FACTORY,
DictionaryBlockEncoding.FACTORY,
SnappyBlockEncoding.FACTORY,
HyperLogLogType.BLOCK_ENCODING_FACTORY,
ColorType.BLOCK_ENCODING_FACTORY);
SnappyBlockEncoding.FACTORY);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,7 @@
import com.facebook.presto.spi.block.Block;
import com.facebook.presto.spi.block.BlockBuilder;
import com.facebook.presto.spi.block.BlockBuilderStatus;
import com.facebook.presto.spi.block.BlockEncodingFactory;
import com.facebook.presto.spi.block.FixedWidthBlockBuilder;
import com.facebook.presto.spi.block.FixedWidthBlockEncoding.FixedWidthBlockEncodingFactory;
import com.facebook.presto.spi.type.FixedWidthType;
import com.google.common.base.Preconditions;
import io.airlift.slice.Slice;
Expand All @@ -33,8 +31,6 @@ public class ColorType
{
public static final ColorType COLOR = new ColorType();

public static final BlockEncodingFactory<?> BLOCK_ENCODING_FACTORY = new FixedWidthBlockEncodingFactory(COLOR);

public static ColorType getInstance()
{
return COLOR;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,7 @@
import com.facebook.presto.spi.block.Block;
import com.facebook.presto.spi.block.BlockBuilder;
import com.facebook.presto.spi.block.BlockBuilderStatus;
import com.facebook.presto.spi.block.BlockEncodingFactory;
import com.facebook.presto.spi.block.FixedWidthBlockBuilder;
import com.facebook.presto.spi.block.FixedWidthBlockEncoding.FixedWidthBlockEncodingFactory;
import com.facebook.presto.spi.type.FixedWidthType;
import io.airlift.slice.Slice;
import io.airlift.slice.SliceOutput;
Expand All @@ -29,8 +27,6 @@ public final class UnknownType
{
public static final UnknownType UNKNOWN = new UnknownType();

public static final BlockEncodingFactory<?> BLOCK_ENCODING_FACTORY = new FixedWidthBlockEncodingFactory(UNKNOWN);

private UnknownType()
{
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ public void testBigintSerializedSize()
// empty page
Page page = new Page(builder.build());
int pageSize = serializedSize(page);
assertEquals(pageSize, 26); // page overhead
assertEquals(pageSize, 41); // page overhead

// page with one value
page = new Page(builder.appendLong(123).build());
Expand All @@ -84,7 +84,7 @@ public void testVarcharSerializedSize()
// empty page
Page page = new Page(builder.build());
int pageSize = serializedSize(page);
assertEquals(pageSize, 27); // page overhead
assertEquals(pageSize, 45); // page overhead

// page with one value
page = new Page(builder.appendSlice(Slices.utf8Slice("alice")).build());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@
import io.airlift.slice.DynamicSliceOutput;
import org.testng.annotations.Test;

import static com.facebook.presto.serde.TypeSerde.readType;
import static com.facebook.presto.serde.TypeSerde.writeInfo;
import static com.facebook.presto.spi.type.TypeSerde.readType;
import static com.facebook.presto.spi.type.TypeSerde.writeType;
import static com.facebook.presto.spi.type.BooleanType.BOOLEAN;
import static org.testng.Assert.assertEquals;

Expand All @@ -29,7 +29,7 @@ public class TestTypeSerde
public void testRoundTrip()
{
DynamicSliceOutput sliceOutput = new DynamicSliceOutput(1024);
writeInfo(sliceOutput, BOOLEAN);
writeType(sliceOutput, BOOLEAN);
Type actualType = readType(new TypeRegistry(), sliceOutput.slice().getInput());
assertEquals(actualType, BOOLEAN);
}
Expand Down
5 changes: 0 additions & 5 deletions presto-ml/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -78,11 +78,6 @@
<scope>provided</scope>
</dependency>

<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
</dependency>

<!-- for testing -->
<dependency>
<groupId>org.testng</groupId>
Expand Down
23 changes: 0 additions & 23 deletions presto-ml/src/main/java/com/facebook/presto/ml/MLPlugin.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,46 +13,23 @@
*/
package com.facebook.presto.ml;

import com.facebook.presto.block.BlockEncodingManager;
import com.facebook.presto.metadata.FunctionFactory;
import com.facebook.presto.ml.type.ClassifierType;
import com.facebook.presto.ml.type.ModelType;
import com.facebook.presto.ml.type.RegressorType;
import com.facebook.presto.spi.Plugin;
import com.facebook.presto.spi.type.Type;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;

import javax.inject.Inject;

import java.util.List;
import java.util.Map;

import static com.google.common.base.Preconditions.checkNotNull;

public class MLPlugin
implements Plugin
{
private Map<String, String> optionalConfig = ImmutableMap.of();

@Override
public synchronized void setOptionalConfig(Map<String, String> optionalConfig)
{
this.optionalConfig = ImmutableMap.copyOf(checkNotNull(optionalConfig, "optionalConfig is null"));
}

public synchronized Map<String, String> getOptionalConfig()
{
return optionalConfig;
}

@Inject
public void setBlockEncodingManager(BlockEncodingManager blockEncodingManager)
{
checkNotNull(blockEncodingManager, "blockEncodingManager is null");
blockEncodingManager.addBlockEncodingFactory(ModelType.BLOCK_ENCODING_FACTORY);
blockEncodingManager.addBlockEncodingFactory(ClassifierType.BLOCK_ENCODING_FACTORY);
blockEncodingManager.addBlockEncodingFactory(RegressorType.BLOCK_ENCODING_FACTORY);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@
*/
package com.facebook.presto.ml.type;

import com.facebook.presto.spi.block.BlockEncodingFactory;
import com.facebook.presto.spi.block.VariableWidthBlockEncoding;
import com.fasterxml.jackson.annotation.JsonCreator;

// Layout is <size>:<model>, where
Expand All @@ -25,8 +23,6 @@ public class ClassifierType
{
public static final ClassifierType CLASSIFIER = new ClassifierType();

public static final BlockEncodingFactory<?> BLOCK_ENCODING_FACTORY = new VariableWidthBlockEncoding.VariableWidthBlockEncodingFactory(CLASSIFIER);

@JsonCreator
public ClassifierType()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,7 @@
import com.facebook.presto.spi.block.Block;
import com.facebook.presto.spi.block.BlockBuilder;
import com.facebook.presto.spi.block.BlockBuilderStatus;
import com.facebook.presto.spi.block.BlockEncodingFactory;
import com.facebook.presto.spi.block.VariableWidthBlockBuilder;
import com.facebook.presto.spi.block.VariableWidthBlockEncoding;
import com.facebook.presto.spi.type.VariableWidthType;
import com.fasterxml.jackson.annotation.JsonCreator;
import io.airlift.slice.Slice;
Expand All @@ -33,8 +31,6 @@ public class ModelType
{
public static final ModelType MODEL = new ModelType();

public static final BlockEncodingFactory<?> BLOCK_ENCODING_FACTORY = new VariableWidthBlockEncoding.VariableWidthBlockEncodingFactory(MODEL);

@JsonCreator
public ModelType()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@
*/
package com.facebook.presto.ml.type;

import com.facebook.presto.spi.block.BlockEncodingFactory;
import com.facebook.presto.spi.block.VariableWidthBlockEncoding;
import com.fasterxml.jackson.annotation.JsonCreator;

// Layout is <size>:<model>, where
Expand All @@ -25,8 +23,6 @@ public class RegressorType
{
public static final RegressorType REGRESSOR = new RegressorType();

public static final BlockEncodingFactory<?> BLOCK_ENCODING_FACTORY = new VariableWidthBlockEncoding.VariableWidthBlockEncodingFactory(REGRESSOR);

@JsonCreator
public RegressorType()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,16 @@
import io.airlift.slice.SliceInput;
import io.airlift.slice.SliceOutput;

import static com.facebook.presto.spi.type.TypeSerde.readType;
import static com.facebook.presto.spi.type.TypeSerde.writeType;
import static java.util.Objects.requireNonNull;

public class FixedWidthBlockEncoding
implements BlockEncoding
{
public static final BlockEncodingFactory<FixedWidthBlockEncoding> FACTORY = new FixedWidthBlockEncodingFactory();
private static final String NAME = "FIXED_WIDTH";

private final FixedWidthType type;

public FixedWidthBlockEncoding(Type type)
Expand All @@ -35,7 +40,7 @@ public FixedWidthBlockEncoding(Type type)
@Override
public String getName()
{
return type.getName();
return NAME;
}

@Override
Expand Down Expand Up @@ -123,30 +128,24 @@ public Block readBlock(SliceInput sliceInput)
}

public static class FixedWidthBlockEncodingFactory
implements BlockEncodingFactory<BlockEncoding>
implements BlockEncodingFactory<FixedWidthBlockEncoding>
{
private final Type type;

public FixedWidthBlockEncodingFactory(Type type)
{
this.type = type;
}

@Override
public String getName()
{
return type.getName();
return NAME;
}

@Override
public BlockEncoding readEncoding(TypeManager manager, BlockEncodingSerde serde, SliceInput input)
public FixedWidthBlockEncoding readEncoding(TypeManager manager, BlockEncodingSerde serde, SliceInput input)
{
return new FixedWidthBlockEncoding(type);
return new FixedWidthBlockEncoding(readType(manager, input));
}

@Override
public void writeEncoding(BlockEncodingSerde serde, SliceOutput output, BlockEncoding blockEncoding)
public void writeEncoding(BlockEncodingSerde serde, SliceOutput output, FixedWidthBlockEncoding blockEncoding)
{
writeType(output, blockEncoding.getType());
}
}
}
Loading

0 comments on commit 3783cb0

Please sign in to comment.