This is an automated email from the ASF dual-hosted git repository. yiguolei pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push: new 6cdaf8ea321 [bugfix](profile) insert into select profile could not build successfully(#27756) 6cdaf8ea321 is described below commit 6cdaf8ea321b4ebe087266c492f030557d4f66d1 Author: yiguolei <676222...@qq.com> AuthorDate: Wed Nov 29 20:44:25 2023 +0800 [bugfix](profile) insert into select profile could not build successfully(#27756) Co-authored-by: yiguolei <yiguo...@gmail.com> --- .../doris/common/profile/ProfileTreeBuilder.java | 42 +++++++++++++--------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/profile/ProfileTreeBuilder.java b/fe/fe-core/src/main/java/org/apache/doris/common/profile/ProfileTreeBuilder.java index f412cec5566..a5beb880f81 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/common/profile/ProfileTreeBuilder.java +++ b/fe/fe-core/src/main/java/org/apache/doris/common/profile/ProfileTreeBuilder.java @@ -56,7 +56,7 @@ public class ProfileTreeBuilder { private static final String PROFILE_NAME_VDATA_STREAM_SENDER = "VDataStreamSender"; private static final String PROFILE_NAME_DATA_BUFFER_SENDER = "DataBufferSender"; private static final String PROFILE_NAME_VDATA_BUFFER_SENDER = "VDataBufferSender"; - private static final String PROFILE_NAME_OLAP_TABLE_SINK = "OlapTableSink"; + private static final String PROFILE_NAME_VOLAP_TABLE_SINK = "VOlapTableSink"; private static final String PROFILE_NAME_BLOCK_MGR = "BlockMgr"; private static final String PROFILE_NAME_BUFFER_POOL = "Buffer pool"; private static final String PROFILE_NAME_EXCHANGE_NODE = "EXCHANGE_NODE"; @@ -95,7 +95,8 @@ public class ProfileTreeBuilder { // Match string like: // Instance e0f7390f5363419e-b416a2a7999608b6 - // (host=TNetworkAddress(hostname:192.168.1.1, port:9060)):(Active: 1s858ms, % non-child: 0.02%) + // (host=TNetworkAddress(hostname:192.168.1.1, port:9060)):(Active: 1s858ms, % + // non-child: 0.02%) // Extract "e0f7390f5363419e-b416a2a7999608b6", "192.168.1.1", "9060" private static final String INSTANCE_PATTERN_STR = "^Instance (.*) \\(.*hostname:(.*), port:([0-9]+).*"; private static final Pattern INSTANCE_PATTERN; @@ -173,7 +174,8 @@ public class ProfileTreeBuilder { } private void analyzeAndBuildLoadChannel(RuntimeProfile loadChannelsProfil) throws UserException { - // TODO, `show load profile` add load channel profile, or add `show load channel profile`. + // TODO, `show load profile` add load channel profile, or add `show load channel + // profile`. } private void analyzeAndBuildFragmentTrees(RuntimeProfile fragmentsProfile) throws UserException { @@ -209,7 +211,8 @@ public class ProfileTreeBuilder { RuntimeProfile.printCounter(maxActiveTimeNs, TUnit.TIME_NS), instanceIdToInstance)); // 2. Build tree for all fragments - // All instance in a fragment are same, so use first instance to build the fragment tree + // All instance in a fragment are same, so use first instance to build the + // fragment tree RuntimeProfile instanceProfile = fragmentChildren.get(0).first; ProfileTreeNode instanceTreeRoot = buildSingleInstanceTree(instanceProfile, fragmentId, null); instanceTreeRoot.setMaxInstanceActiveTime(RuntimeProfile.printCounter(maxActiveTimeNs, TUnit.TIME_NS)); @@ -229,10 +232,11 @@ public class ProfileTreeBuilder { this.instanceTreeMap.put(fragmentId, instanceTrees); } - // If instanceId is null, which means this profile tree node is for building the entire fragment tree. + // If instanceId is null, which means this profile tree node is for building the + // entire fragment tree. // So that we need to add sender and exchange node to the auxiliary structure. private ProfileTreeNode buildSingleInstanceTree(RuntimeProfile instanceProfile, String fragmentId, - String instanceId) throws UserException { + String instanceId) throws UserException { List<Pair<RuntimeProfile, Boolean>> instanceChildren = instanceProfile.getChildList(); ProfileTreeNode senderNode = null; List<ProfileTreeNode> childrenNodes = Lists.newArrayList(); @@ -242,7 +246,7 @@ public class ProfileTreeBuilder { || profile.getName().startsWith(PROFILE_NAME_VDATA_STREAM_SENDER) || profile.getName().startsWith(PROFILE_NAME_VDATA_BUFFER_SENDER) || profile.getName().startsWith(PROFILE_NAME_DATA_BUFFER_SENDER) - || profile.getName().startsWith(PROFILE_NAME_OLAP_TABLE_SINK)) { + || profile.getName().startsWith(PROFILE_NAME_VOLAP_TABLE_SINK)) { senderNode = buildTreeNode(profile, null, fragmentId, instanceId); if (instanceId == null) { senderNodes.add(senderNode); @@ -257,8 +261,10 @@ public class ProfileTreeBuilder { } } if (senderNode == null || childrenNodes.isEmpty()) { - // FE will constantly update the total profile after receiving the instance profile reported by BE. - // Writing a profile will result in an empty instance profile until all instance profiles are received + // FE will constantly update the total profile after receiving the instance + // profile reported by BE. + // Writing a profile will result in an empty instance profile until all instance + // profiles are received // at least once. // Issue: https://github.com/apache/doris/issues/10095 StringBuilder sb = new StringBuilder(); @@ -266,10 +272,10 @@ public class ProfileTreeBuilder { if (LOG.isDebugEnabled()) { LOG.debug( "Invalid instance profile, sender is null: {}," - + "childrenNodes is empty: {}, instance profile: {}", + + "childrenNodes is empty: {}, instance profile: {}", (senderNode == null), childrenNodes.isEmpty(), sb.toString()); } - throw new UserException("Invalid instance profile, without sender or exec node: " + instanceProfile); + throw new UserException("Invalid instance profile, without sender or exec node: \n" + instanceProfile); } for (ProfileTreeNode execNode : childrenNodes) { senderNode.addChild(execNode); @@ -283,7 +289,7 @@ public class ProfileTreeBuilder { } private ProfileTreeNode buildTreeNode(RuntimeProfile profile, ProfileTreeNode root, - String fragmentId, String instanceId) { + String fragmentId, String instanceId) { String name = profile.getName(); if (name.startsWith(PROFILE_NAME_BUFFER_POOL)) { // skip Buffer pool, and buffer pool does not has child @@ -295,7 +301,8 @@ public class ProfileTreeBuilder { String extractId; if ((!m.find() && finalSenderName == null) || m.groupCount() != 2) { // DataStreamBuffer name like: - // "DataBufferSender (dst_fragment_instance_id=d95356f9219b4831-986b4602b41683ca):" + // "DataBufferSender + // (dst_fragment_instance_id=d95356f9219b4831-986b4602b41683ca):" // So it has no id. // Other profile should has id like: // EXCHANGE_NODE (id=3):(Active: 103.899ms, % non-child: 2.27%) @@ -316,7 +323,7 @@ public class ProfileTreeBuilder { if (!profile.getInfoStrings().isEmpty()) { ArrayList<String> infoStrings = new ArrayList<String>(); for (Map.Entry<String, String> entry : profile.getInfoStrings().entrySet()) { - infoStrings.add(entry.getKey() + ": " + entry.getValue()); + infoStrings.add(entry.getKey() + ": " + entry.getValue()); } node.setInfoStrings(infoStrings); } @@ -347,13 +354,14 @@ public class ProfileTreeBuilder { return node; } - // Check if the given node name is from final node, like DATA_BUFFER_SENDER or OLAP_TABLE_SINK + // Check if the given node name is from final node, like DATA_BUFFER_SENDER or + // OLAP_TABLE_SINK // If yes, return that name, if not, return null; private String checkAndGetFinalSenderName(String name) { if (name.startsWith(PROFILE_NAME_DATA_BUFFER_SENDER)) { return PROFILE_NAME_DATA_BUFFER_SENDER; - } else if (name.startsWith(PROFILE_NAME_OLAP_TABLE_SINK)) { - return PROFILE_NAME_OLAP_TABLE_SINK; + } else if (name.startsWith(PROFILE_NAME_VOLAP_TABLE_SINK)) { + return PROFILE_NAME_VOLAP_TABLE_SINK; } else if (name.startsWith(PROFILE_NAME_VDATA_BUFFER_SENDER)) { return PROFILE_NAME_VDATA_BUFFER_SENDER; } else { --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org