소스 검색

删除操作计算hash值的情况没有考虑,导致删除时的分区和插入时的分区不一致 (#1848)

Marsss___ 6 년 전
부모
커밋
37fc248ebf
1개의 변경된 파일18개의 추가작업 그리고 3개의 파일을 삭제
  1. 18 3
      server/src/main/java/com/alibaba/otter/canal/common/MQMessageUtils.java

+ 18 - 3
server/src/main/java/com/alibaba/otter/canal/common/MQMessageUtils.java

@@ -230,10 +230,25 @@ public class MQMessageUtils {
                                     }
                                     }
                                 }
                                 }
                             } else {
                             } else {
-                                for (CanalEntry.Column column : rowData.getAfterColumnsList()) {
-                                    if (checkPkNamesHasContain(hashMode.pkNames, column.getName())) {
-                                        hashCode = hashCode ^ column.getValue().hashCode();
+                                try {
+                                    CanalEntry.EventType eventType = RowChange.parseFrom(entry.getStoreValue()).getEventType();
+                                    if(eventType == CanalEntry.EventType.DELETE){
+                                        for (CanalEntry.Column column : rowData.getBeforeColumnsList()) {
+                                            if (checkPkNamesHasContain(hashMode.pkNames, column.getName())) {
+                                                hashCode = hashCode ^ column.getValue().hashCode();
+                                            }
+                                        }
                                     }
                                     }
+                                    else {
+                                        for (CanalEntry.Column column : rowData.getAfterColumnsList()) {
+                                            if (checkPkNamesHasContain(hashMode.pkNames, column.getName())) {
+                                                hashCode = hashCode ^ column.getValue().hashCode();
+                                            }
+                                        }
+                                    }
+                                }
+                                catch (InvalidProtocolBufferException e) {
+                                    e.printStackTrace();
                                 }
                                 }
                             }
                             }