[ 
https://issues.apache.org/jira/browse/FLINK-5480?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15823919#comment-15823919
 ] 

ASF GitHub Bot commented on FLINK-5480:
---------------------------------------

Github user zentol commented on a diff in the pull request:

    https://github.com/apache/flink/pull/3117#discussion_r96222946
  
    --- Diff: 
flink-streaming-java/src/main/java/org/apache/flink/streaming/api/graph/StreamGraphUserHashHasher.java
 ---
    @@ -0,0 +1,74 @@
    +/*
    + * 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.streaming.api.graph;
    +
    +import org.apache.flink.streaming.api.operators.ChainingStrategy;
    +import org.apache.flink.streaming.api.operators.StreamOperator;
    +import org.apache.flink.streaming.runtime.partitioner.ForwardPartitioner;
    +import org.apache.flink.util.StringUtils;
    +
    +import java.util.HashMap;
    +import java.util.Map;
    +
    +/**
    + * StreamGraphHasher that works with user provided hashes.
    + */
    +public class StreamGraphUserHashHasher implements StreamGraphHasher {
    +   @Override
    +   public Map<Integer, byte[]> 
traverseStreamGraphAndGenerateHashes(StreamGraph streamGraph) {
    +           HashMap<Integer, byte[]> hashResult = new HashMap<>();
    +           for (StreamNode streamNode : streamGraph.getStreamNodes()) {
    +                   String userHash = streamNode.getUserHash();
    +                   if (null != userHash) {
    +
    +                           for (StreamEdge inEdge : 
streamNode.getInEdges()) {
    +                                   if (isChainable(inEdge, 
streamGraph.isChainingEnabled())) {
    +                                           throw new 
UnsupportedOperationException("Cannot assign user-specified hash "
    +                                                           + "to 
intermediate node in chain. This will be supported in future "
    +                                                           + "versions of 
Flink. As a work around start new chain at task "
    +                                                           + 
streamNode.getOperatorName() + ".");
    +                                   }
    +                           }
    +
    +                           hashResult.put(streamNode.getId(), 
StringUtils.hexStringToByte(userHash));
    +                   }
    +           }
    +
    +           return hashResult;
    +   }
    +
    +   private boolean isChainable(StreamEdge edge, boolean isChainingEnabled) 
{
    --- End diff --
    
    Can't we reuse the ```isChainable``` method in the 
```StreamJobGraphGenerator``` instead? Otherwise we risk these conditions going 
out of sync.


> User-provided hashes for operators
> ----------------------------------
>
>                 Key: FLINK-5480
>                 URL: https://issues.apache.org/jira/browse/FLINK-5480
>             Project: Flink
>          Issue Type: Improvement
>          Components: DataStream API
>    Affects Versions: 1.2.0
>            Reporter: Stefan Richter
>            Assignee: Stefan Richter
>
> We could allow users to provided (alternative) hashes for operators in a 
> StreamGraph. This can make migration between Flink versions easier, in case 
> the automatically produced hashes between versions are incompatible. For 
> example, users could just copy the old hashes from the web ui to their job.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to