Search in sources :

Example 1 with SerializedCompositeKeyBuilder

use of org.apache.flink.runtime.state.SerializedCompositeKeyBuilder in project flink by apache.

the class RocksDBMapState method getSerializedValue.

@Override
public byte[] getSerializedValue(final byte[] serializedKeyAndNamespace, final TypeSerializer<K> safeKeySerializer, final TypeSerializer<N> safeNamespaceSerializer, final TypeSerializer<Map<UK, UV>> safeValueSerializer) throws Exception {
    Preconditions.checkNotNull(serializedKeyAndNamespace);
    Preconditions.checkNotNull(safeKeySerializer);
    Preconditions.checkNotNull(safeNamespaceSerializer);
    Preconditions.checkNotNull(safeValueSerializer);
    // TODO make KvStateSerializer key-group aware to save this round trip and key-group
    // computation
    Tuple2<K, N> keyAndNamespace = KvStateSerializer.deserializeKeyAndNamespace(serializedKeyAndNamespace, safeKeySerializer, safeNamespaceSerializer);
    int keyGroup = KeyGroupRangeAssignment.assignToKeyGroup(keyAndNamespace.f0, backend.getNumberOfKeyGroups());
    SerializedCompositeKeyBuilder<K> keyBuilder = new SerializedCompositeKeyBuilder<>(safeKeySerializer, backend.getKeyGroupPrefixBytes(), 32);
    keyBuilder.setKeyAndKeyGroup(keyAndNamespace.f0, keyGroup);
    final byte[] keyPrefixBytes = keyBuilder.buildCompositeKeyNamespace(keyAndNamespace.f1, namespaceSerializer);
    final MapSerializer<UK, UV> serializer = (MapSerializer<UK, UV>) safeValueSerializer;
    final TypeSerializer<UK> dupUserKeySerializer = serializer.getKeySerializer();
    final TypeSerializer<UV> dupUserValueSerializer = serializer.getValueSerializer();
    final DataInputDeserializer inputView = new DataInputDeserializer();
    final Iterator<Map.Entry<UK, UV>> iterator = new RocksDBMapIterator<Map.Entry<UK, UV>>(backend.db, keyPrefixBytes, dupUserKeySerializer, dupUserValueSerializer, inputView) {

        @Override
        public Map.Entry<UK, UV> next() {
            return nextEntry();
        }
    };
    // Return null to make the behavior consistent with other backends
    if (!iterator.hasNext()) {
        return null;
    }
    return KvStateSerializer.serializeMap(() -> iterator, dupUserKeySerializer, dupUserValueSerializer);
}
Also used : SerializedCompositeKeyBuilder(org.apache.flink.runtime.state.SerializedCompositeKeyBuilder) MapSerializer(org.apache.flink.api.common.typeutils.base.MapSerializer) Map(java.util.Map) DataInputDeserializer(org.apache.flink.core.memory.DataInputDeserializer)

Aggregations

Map (java.util.Map)1 MapSerializer (org.apache.flink.api.common.typeutils.base.MapSerializer)1 DataInputDeserializer (org.apache.flink.core.memory.DataInputDeserializer)1 SerializedCompositeKeyBuilder (org.apache.flink.runtime.state.SerializedCompositeKeyBuilder)1