All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.flink.runtime.state.gemini.engine.page.PageSerdeFlink2KeyImpl Maven / Gradle / Ivy

There is a newer version: 1.5.1
Show newest version
/*
 * 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.flink.runtime.state.gemini.engine.page;

import org.apache.flink.api.common.typeutils.TypeSerializer;
import org.apache.flink.runtime.state.gemini.engine.exceptions.GeminiRuntimeException;
import org.apache.flink.runtime.state.gemini.engine.page.bmap.GComparator;
import org.apache.flink.runtime.state.gemini.engine.page.bmap.GComparatorBytesImpl;
import org.apache.flink.runtime.state.gemini.engine.page.bmap.GComparatorType;
import org.apache.flink.runtime.state.gemini.engine.page.bmap.GComparatorUserImpl;

import java.util.Comparator;

/**
 * PageSerdeFlink2KeyImpl.
 */
public class PageSerdeFlink2KeyImpl extends PageSerdeFlinkImpl implements PageSerdeFlink2Key {

	private final TypeSerializer key2Serde;
	private final GComparator mapComparator;
	private final AbstractGMapValueTypeSerializer gMapValueTypeSerialiZer;

	public PageSerdeFlink2KeyImpl(
		TypeSerializer keySerde,
		TypeSerializer key2Serde,
		TypeSerializer valueSerce,
		GComparator mapComparator,
		boolean checksumEnable) {
		super(keySerde, valueSerce);
		this.key2Serde = key2Serde;
		this.mapComparator = mapComparator;
		this.gMapValueTypeSerialiZer = mapComparator == null ? new GMapValueTypeSerializer<>(key2Serde,
			valueSerce,
			checksumEnable) : new GSortedMapValueTypeSerialiZer<>(key2Serde, valueSerce, mapComparator, checksumEnable);
	}

	@Override
	public TypeSerializer getKey2Serde() {
		return this.key2Serde;
	}

	@Override
	public GComparator getMapComparator() {
		return this.mapComparator;
	}

	@Override
	public AbstractGMapValueTypeSerializer getMapValueTypeSerializer() {
		return this.gMapValueTypeSerialiZer;
	}

	public static  PageSerdeFlink2KeyImpl of(
		TypeSerializer keySerializer,
		TypeSerializer mapKeySerializer,
		TypeSerializer mapValueSerializer,
		Comparator userComparator,
		GComparatorType gComparatorType,
		boolean checksumEnable) {
		GComparator mapComparator = userComparator == null
			? null
			: buildGComparator(userComparator, gComparatorType, mapKeySerializer);
		return new PageSerdeFlink2KeyImpl<>(keySerializer,
			mapKeySerializer,
			mapValueSerializer,
			mapComparator,
			checksumEnable);
	}

	private static  GComparator buildGComparator(
		Comparator userComparator, GComparatorType gComparatorType, TypeSerializer mapKeySerializer) {
		switch (gComparatorType) {
			case bytes:
				return new GComparatorBytesImpl<>(userComparator, mapKeySerializer);
			case user:
				return new GComparatorUserImpl<>(userComparator, mapKeySerializer);
			default:
				throw new GeminiRuntimeException("invalid GComparatorType:" + gComparatorType);
		}
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy