annotate agent/src/jetbrains/buildServer/symbols/SymbolsIndexer.java @ 117:d2c79f95c2a6 default tip

remove tailing slash in teamcity server url when constructing symbol server url
author Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
date Fri, 27 May 2016 15:27:30 +0300
parents 8d6bfbd57bd7
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
1 package jetbrains.buildServer.symbols;
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
2
3
53028ba390e0 improved build progress messages
Evgeniy.Koshkin
parents: 2
diff changeset
3 import jetbrains.buildServer.agent.*;
2
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
4 import jetbrains.buildServer.agent.artifacts.ArtifactsWatcher;
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
5 import jetbrains.buildServer.agent.impl.artifacts.ArtifactsBuilderAdapter;
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
6 import jetbrains.buildServer.agent.impl.artifacts.ArtifactsCollection;
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
7 import jetbrains.buildServer.agent.plugins.beans.PluginDescriptor;
27
76ed2d58c871 - reused home path between all srcsrv-related utilities
Evgeniy.Koshkin
parents: 26
diff changeset
8 import jetbrains.buildServer.symbols.tools.JetSymbolsExe;
2
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
9 import jetbrains.buildServer.util.EventDispatcher;
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
10 import jetbrains.buildServer.util.FileUtil;
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
11 import org.apache.log4j.Logger;
101
52fc27842bc1 fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 98
diff changeset
12 import org.jdom.JDOMException;
2
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
13 import org.jetbrains.annotations.NotNull;
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
14 import org.jetbrains.annotations.Nullable;
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
15
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
16 import java.io.File;
101
52fc27842bc1 fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 98
diff changeset
17 import java.io.FileInputStream;
52fc27842bc1 fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 98
diff changeset
18 import java.io.FileOutputStream;
2
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
19 import java.io.IOException;
101
52fc27842bc1 fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 98
diff changeset
20 import java.util.*;
52fc27842bc1 fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 98
diff changeset
21 import java.util.concurrent.ConcurrentHashMap;
2
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
22
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
23 /**
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
24 * @author Evgeniy.Koshkin
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
25 */
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
26 public class SymbolsIndexer extends ArtifactsBuilderAdapter {
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
27
7
Evgeniy.Koshkin
parents: 5
diff changeset
28 private static final Logger LOG = Logger.getLogger(SymbolsIndexer.class);
2
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
29
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
30 public static final String PDB_FILE_EXTENSION = "pdb";
81
384401f7fc24 fixing TW-32984
Evgeniy.Koshkin
parents: 78
diff changeset
31 private static final String X64_SRCSRV = "\\x64\\srcsrv";
384401f7fc24 fixing TW-32984
Evgeniy.Koshkin
parents: 78
diff changeset
32 private static final String X86_SRCSRV = "\\x86\\srcsrv";
2
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
33
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
34 @NotNull private final ArtifactsWatcher myArtifactsWatcher;
110
0d0a3c1aa428 fix TW-45209 - calculate resulting artifacts for published pdb's on agent side
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 104
diff changeset
35 @NotNull private final ArtifactPathHelper myArtifactPathHelper;
0d0a3c1aa428 fix TW-45209 - calculate resulting artifacts for published pdb's on agent side
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 104
diff changeset
36
27
76ed2d58c871 - reused home path between all srcsrv-related utilities
Evgeniy.Koshkin
parents: 26
diff changeset
37 @NotNull private final JetSymbolsExe myJetSymbolsExe;
101
52fc27842bc1 fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 98
diff changeset
38 @NotNull private final Map<File, String> myFileToArtifactMapToProcess = new ConcurrentHashMap<File, String>();
48
c6dfb8e038ce logging improved (fixed TW-31876)
Evgeniy.Koshkin
parents: 41
diff changeset
39
c6dfb8e038ce logging improved (fixed TW-31876)
Evgeniy.Koshkin
parents: 41
diff changeset
40 @Nullable private BuildProgressLogger myProgressLogger;
c6dfb8e038ce logging improved (fixed TW-31876)
Evgeniy.Koshkin
parents: 41
diff changeset
41 @Nullable private File myBuildTempDirectory;
c6dfb8e038ce logging improved (fixed TW-31876)
Evgeniy.Koshkin
parents: 41
diff changeset
42 @Nullable private File mySrcSrvHomeDir;
c6dfb8e038ce logging improved (fixed TW-31876)
Evgeniy.Koshkin
parents: 41
diff changeset
43 @Nullable private FileUrlProvider myFileUrlProvider;
2
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
44
110
0d0a3c1aa428 fix TW-45209 - calculate resulting artifacts for published pdb's on agent side
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 104
diff changeset
45 public SymbolsIndexer(@NotNull final PluginDescriptor pluginDescriptor,
0d0a3c1aa428 fix TW-45209 - calculate resulting artifacts for published pdb's on agent side
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 104
diff changeset
46 @NotNull final EventDispatcher<AgentLifeCycleListener> agentDispatcher,
0d0a3c1aa428 fix TW-45209 - calculate resulting artifacts for published pdb's on agent side
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 104
diff changeset
47 @NotNull final ArtifactsWatcher artifactsWatcher,
0d0a3c1aa428 fix TW-45209 - calculate resulting artifacts for published pdb's on agent side
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 104
diff changeset
48 @NotNull final ArtifactPathHelper artifactPathHelper) {
12
662a0be55de7 - source indexing works!
Evgeniy.Koshkin
parents: 11
diff changeset
49 myArtifactsWatcher = artifactsWatcher;
27
76ed2d58c871 - reused home path between all srcsrv-related utilities
Evgeniy.Koshkin
parents: 26
diff changeset
50 myJetSymbolsExe = new JetSymbolsExe(new File(pluginDescriptor.getPluginRoot(), "bin"));
110
0d0a3c1aa428 fix TW-45209 - calculate resulting artifacts for published pdb's on agent side
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 104
diff changeset
51 myArtifactPathHelper = artifactPathHelper;
12
662a0be55de7 - source indexing works!
Evgeniy.Koshkin
parents: 11
diff changeset
52
2
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
53 agentDispatcher.addListener(new AgentLifeCycleAdapter() {
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
54 @Override
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
55 public void buildStarted(@NotNull final AgentRunningBuild runningBuild) {
98
6d1877c10a3b mention running build id in agent debug logs
Evgeniy.Koshkin
parents: 81
diff changeset
56 final long buildId = runningBuild.getBuildId();
48
c6dfb8e038ce logging improved (fixed TW-31876)
Evgeniy.Koshkin
parents: 41
diff changeset
57 if(runningBuild.getBuildFeaturesOfType(SymbolsConstants.BUILD_FEATURE_TYPE).isEmpty()){
98
6d1877c10a3b mention running build id in agent debug logs
Evgeniy.Koshkin
parents: 81
diff changeset
58 LOG.debug(SymbolsConstants.BUILD_FEATURE_TYPE + " build feature disabled. No indexing will be performed for build with id " + buildId);
48
c6dfb8e038ce logging improved (fixed TW-31876)
Evgeniy.Koshkin
parents: 41
diff changeset
59 return;
c6dfb8e038ce logging improved (fixed TW-31876)
Evgeniy.Koshkin
parents: 41
diff changeset
60 }
98
6d1877c10a3b mention running build id in agent debug logs
Evgeniy.Koshkin
parents: 81
diff changeset
61 LOG.debug(SymbolsConstants.BUILD_FEATURE_TYPE + " build feature enabled for build with id " + buildId);
48
c6dfb8e038ce logging improved (fixed TW-31876)
Evgeniy.Koshkin
parents: 41
diff changeset
62
c6dfb8e038ce logging improved (fixed TW-31876)
Evgeniy.Koshkin
parents: 41
diff changeset
63 myProgressLogger = runningBuild.getBuildLogger();
c6dfb8e038ce logging improved (fixed TW-31876)
Evgeniy.Koshkin
parents: 41
diff changeset
64 myBuildTempDirectory = runningBuild.getBuildTempDirectory();
c6dfb8e038ce logging improved (fixed TW-31876)
Evgeniy.Koshkin
parents: 41
diff changeset
65
81
384401f7fc24 fixing TW-32984
Evgeniy.Koshkin
parents: 78
diff changeset
66 mySrcSrvHomeDir = getSrcSrvHomeDir(runningBuild);
51
39a530910a6a improve logging in case windbg tools weren't found
Evgeniy.Koshkin
parents: 50
diff changeset
67 if (mySrcSrvHomeDir == null) {
98
6d1877c10a3b mention running build id in agent debug logs
Evgeniy.Koshkin
parents: 81
diff changeset
68 LOG.error("Failed to find Source Server tools home directory. No symbol and source indexing will be performed for build with id " + buildId);
51
39a530910a6a improve logging in case windbg tools weren't found
Evgeniy.Koshkin
parents: 50
diff changeset
69 myProgressLogger.error("Failed to find Source Server tools home directory. No symbol and source indexing will be performed.");
39a530910a6a improve logging in case windbg tools weren't found
Evgeniy.Koshkin
parents: 50
diff changeset
70 return;
48
c6dfb8e038ce logging improved (fixed TW-31876)
Evgeniy.Koshkin
parents: 41
diff changeset
71 }
51
39a530910a6a improve logging in case windbg tools weren't found
Evgeniy.Koshkin
parents: 50
diff changeset
72 LOG.debug("Source Server tools home directory located. " + mySrcSrvHomeDir.getAbsolutePath());
39a530910a6a improve logging in case windbg tools weren't found
Evgeniy.Koshkin
parents: 50
diff changeset
73 myProgressLogger.message("Source Server tools home directory located. " + mySrcSrvHomeDir.getAbsolutePath());
48
c6dfb8e038ce logging improved (fixed TW-31876)
Evgeniy.Koshkin
parents: 41
diff changeset
74
c6dfb8e038ce logging improved (fixed TW-31876)
Evgeniy.Koshkin
parents: 41
diff changeset
75 myFileUrlProvider = FileUrlProviderFactory.getProvider(runningBuild, myProgressLogger);
2
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
76 }
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
77
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
78 @Override
5
f7602ee7e8b1 implemented symbols index data publishing
Evgeniy.Koshkin
parents: 3
diff changeset
79 public void afterAtrifactsPublished(@NotNull AgentRunningBuild build, @NotNull BuildFinishedStatus buildStatus) {
f7602ee7e8b1 implemented symbols index data publishing
Evgeniy.Koshkin
parents: 3
diff changeset
80 super.afterAtrifactsPublished(build, buildStatus);
48
c6dfb8e038ce logging improved (fixed TW-31876)
Evgeniy.Koshkin
parents: 41
diff changeset
81 if(!isIndexingApplicable()) return;
101
52fc27842bc1 fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 98
diff changeset
82 if (myFileToArtifactMapToProcess.isEmpty()) {
48
c6dfb8e038ce logging improved (fixed TW-31876)
Evgeniy.Koshkin
parents: 41
diff changeset
83 myProgressLogger.warning("Symbols weren't found in artifacts to be published.");
98
6d1877c10a3b mention running build id in agent debug logs
Evgeniy.Koshkin
parents: 81
diff changeset
84 LOG.debug("Symbols weren't found in artifacts to be published for build with id " + build.getBuildId());
2
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
85 } else {
48
c6dfb8e038ce logging improved (fixed TW-31876)
Evgeniy.Koshkin
parents: 41
diff changeset
86 myProgressLogger.message("Collecting symbol files signatures.");
c6dfb8e038ce logging improved (fixed TW-31876)
Evgeniy.Koshkin
parents: 41
diff changeset
87 LOG.debug("Collecting symbol files signatures.");
2
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
88 try {
101
52fc27842bc1 fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 98
diff changeset
89 final Set<PdbSignatureIndexEntry> signatureLocalFilesData = getSignatures(myFileToArtifactMapToProcess.keySet());
52fc27842bc1 fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 98
diff changeset
90 if(!signatureLocalFilesData.isEmpty()){
52fc27842bc1 fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 98
diff changeset
91 final Set<PdbSignatureIndexEntry> indexData = new HashSet<PdbSignatureIndexEntry>();
52fc27842bc1 fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 98
diff changeset
92 for(PdbSignatureIndexEntry signatureIndexEntry : signatureLocalFilesData){
116
8d6bfbd57bd7 fixed searching of pdb by name in order to restore backward compatibility
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 110
diff changeset
93 final String artifactPath = signatureIndexEntry.getArtifactPath();
8d6bfbd57bd7 fixed searching of pdb by name in order to restore backward compatibility
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 110
diff changeset
94 if(artifactPath == null) continue;
8d6bfbd57bd7 fixed searching of pdb by name in order to restore backward compatibility
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 110
diff changeset
95 final File targetPdbFile = new File(artifactPath);
104
1c462701ed75 fix possible key not found exception
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 101
diff changeset
96 if(myFileToArtifactMapToProcess.containsKey(targetPdbFile)) {
116
8d6bfbd57bd7 fixed searching of pdb by name in order to restore backward compatibility
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 110
diff changeset
97 indexData.add(new PdbSignatureIndexEntry(signatureIndexEntry.getGuid(), targetPdbFile.getName(), myFileToArtifactMapToProcess.get(targetPdbFile)));
104
1c462701ed75 fix possible key not found exception
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 101
diff changeset
98 }
101
52fc27842bc1 fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 98
diff changeset
99 }
52fc27842bc1 fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 98
diff changeset
100 final File indexDataFile = FileUtil.createTempFile(myBuildTempDirectory, SymbolsConstants.SYMBOL_SIGNATURES_FILE_NAME_PREFIX, ".xml", false);
52fc27842bc1 fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 98
diff changeset
101 PdbSignatureIndexUtil.write(new FileOutputStream(indexDataFile), indexData);
48
c6dfb8e038ce logging improved (fixed TW-31876)
Evgeniy.Koshkin
parents: 41
diff changeset
102 myProgressLogger.message("Publishing collected symbol files signatures.");
101
52fc27842bc1 fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 98
diff changeset
103 myArtifactsWatcher.addNewArtifactsPath(indexDataFile + "=>" + ".teamcity/symbols");
5
f7602ee7e8b1 implemented symbols index data publishing
Evgeniy.Koshkin
parents: 3
diff changeset
104 }
101
52fc27842bc1 fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 98
diff changeset
105 } catch (Exception e) {
98
6d1877c10a3b mention running build id in agent debug logs
Evgeniy.Koshkin
parents: 81
diff changeset
106 LOG.error("Error while dumping symbols/binaries signatures for build with id " + build.getBuildId(), e);
48
c6dfb8e038ce logging improved (fixed TW-31876)
Evgeniy.Koshkin
parents: 41
diff changeset
107 myProgressLogger.error("Error while dumping symbols/binaries signatures.");
c6dfb8e038ce logging improved (fixed TW-31876)
Evgeniy.Koshkin
parents: 41
diff changeset
108 myProgressLogger.exception(e);
2
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
109 }
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
110 }
101
52fc27842bc1 fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 98
diff changeset
111 myFileToArtifactMapToProcess.clear();
2
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
112 }
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
113 });
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
114 }
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
115
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
116 @Override
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
117 public void afterCollectingFiles(@NotNull List<ArtifactsCollection> artifacts) {
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
118 super.afterCollectingFiles(artifacts);
48
c6dfb8e038ce logging improved (fixed TW-31876)
Evgeniy.Koshkin
parents: 41
diff changeset
119 if(!isIndexingApplicable()){
51
39a530910a6a improve logging in case windbg tools weren't found
Evgeniy.Koshkin
parents: 50
diff changeset
120 LOG.debug("Symbols and sources indexing skipped.");
2
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
121 return;
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
122 }
41
4c516ddbddf1 located srcsrv tools home dir under win sdk home dir
Evgeniy.Koshkin
parents: 34
diff changeset
123
48
c6dfb8e038ce logging improved (fixed TW-31876)
Evgeniy.Koshkin
parents: 41
diff changeset
124 LOG.debug("Searching for symbol files in publishing artifacts.");
101
52fc27842bc1 fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 98
diff changeset
125 final Map<File, String> pdbFiles = getArtifactPathsByFileExtension(artifacts, PDB_FILE_EXTENSION);
25
f4e0050e2a2f resolve server url from config parameter
Evgeniy.Koshkin
parents: 23
diff changeset
126 if(pdbFiles.isEmpty()) return;
f4e0050e2a2f resolve server url from config parameter
Evgeniy.Koshkin
parents: 23
diff changeset
127
50
89220bce43c8 skipped source indexing of pdb's which weren't built during current build; the reason is that its impossible to construct url's for sources in this case
Evgeniy.Koshkin
parents: 48
diff changeset
128 final PdbFilePatcher pdbFilePatcher = new PdbFilePatcher(myBuildTempDirectory, mySrcSrvHomeDir, new SrcSrvStreamBuilder(myFileUrlProvider, myProgressLogger));
101
52fc27842bc1 fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 98
diff changeset
129 for(File pdbFile : pdbFiles.keySet()){
52fc27842bc1 fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 98
diff changeset
130 if(myFileToArtifactMapToProcess.containsKey(pdbFile)){
26
87b24e4efcc3 fixed multiple indexing of the same pdb file
Evgeniy.Koshkin
parents: 25
diff changeset
131 LOG.debug(String.format("File %s already processed. Skipped.", pdbFile.getAbsolutePath()));
87b24e4efcc3 fixed multiple indexing of the same pdb file
Evgeniy.Koshkin
parents: 25
diff changeset
132 continue;
87b24e4efcc3 fixed multiple indexing of the same pdb file
Evgeniy.Koshkin
parents: 25
diff changeset
133 }
12
662a0be55de7 - source indexing works!
Evgeniy.Koshkin
parents: 11
diff changeset
134 try {
48
c6dfb8e038ce logging improved (fixed TW-31876)
Evgeniy.Koshkin
parents: 41
diff changeset
135 myProgressLogger.message("Indexing sources appeared in file " + pdbFile.getAbsolutePath());
c6dfb8e038ce logging improved (fixed TW-31876)
Evgeniy.Koshkin
parents: 41
diff changeset
136 pdbFilePatcher.patch(pdbFile, myProgressLogger);
110
0d0a3c1aa428 fix TW-45209 - calculate resulting artifacts for published pdb's on agent side
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 104
diff changeset
137 myFileToArtifactMapToProcess.put(pdbFile, myArtifactPathHelper.concatenateArtifactPath(pdbFiles.get(pdbFile), pdbFile.getName()));
12
662a0be55de7 - source indexing works!
Evgeniy.Koshkin
parents: 11
diff changeset
138 } catch (Throwable e) {
662a0be55de7 - source indexing works!
Evgeniy.Koshkin
parents: 11
diff changeset
139 LOG.error("Error occurred while patching symbols file " + pdbFile, e);
48
c6dfb8e038ce logging improved (fixed TW-31876)
Evgeniy.Koshkin
parents: 41
diff changeset
140 myProgressLogger.error("Error occurred while patching symbols file " + pdbFile);
c6dfb8e038ce logging improved (fixed TW-31876)
Evgeniy.Koshkin
parents: 41
diff changeset
141 myProgressLogger.exception(e);
12
662a0be55de7 - source indexing works!
Evgeniy.Koshkin
parents: 11
diff changeset
142 }
662a0be55de7 - source indexing works!
Evgeniy.Koshkin
parents: 11
diff changeset
143 }
2
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
144 }
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
145
101
52fc27842bc1 fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 98
diff changeset
146 private Set<PdbSignatureIndexEntry> getSignatures(Collection<File> files) throws IOException, JDOMException {
52fc27842bc1 fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 98
diff changeset
147 final File guidDumpFile = FileUtil.createTempFile(myBuildTempDirectory, "symbol-signatures-local-", ".xml", false);
52fc27842bc1 fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 98
diff changeset
148 myJetSymbolsExe.dumpGuidsToFile(files, guidDumpFile, myProgressLogger);
52fc27842bc1 fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 98
diff changeset
149 if(guidDumpFile.exists()){
52fc27842bc1 fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 98
diff changeset
150 myArtifactsWatcher.addNewArtifactsPath(guidDumpFile + "=>" + ".teamcity/symbols");
52fc27842bc1 fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 98
diff changeset
151 }
52fc27842bc1 fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 98
diff changeset
152 if(guidDumpFile.isFile())
52fc27842bc1 fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 98
diff changeset
153 return PdbSignatureIndexUtil.read(new FileInputStream(guidDumpFile));
52fc27842bc1 fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 98
diff changeset
154 else
52fc27842bc1 fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 98
diff changeset
155 return Collections.emptySet();
52fc27842bc1 fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 98
diff changeset
156 }
52fc27842bc1 fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 98
diff changeset
157
81
384401f7fc24 fixing TW-32984
Evgeniy.Koshkin
parents: 78
diff changeset
158 @Nullable
384401f7fc24 fixing TW-32984
Evgeniy.Koshkin
parents: 78
diff changeset
159 private File getSrcSrvHomeDir(@NotNull AgentRunningBuild build) {
384401f7fc24 fixing TW-32984
Evgeniy.Koshkin
parents: 78
diff changeset
160 final Map<String,String> agentConfigParameters = build.getAgentConfiguration().getConfigurationParameters();
384401f7fc24 fixing TW-32984
Evgeniy.Koshkin
parents: 78
diff changeset
161 String winDbgHomeDir = agentConfigParameters.get(WinDbgToolsDetector.WIN_DBG_PATH);
384401f7fc24 fixing TW-32984
Evgeniy.Koshkin
parents: 78
diff changeset
162 if(winDbgHomeDir == null){
384401f7fc24 fixing TW-32984
Evgeniy.Koshkin
parents: 78
diff changeset
163 LOG.debug("WinDbg tools are not mentioned in agent configuration.");
384401f7fc24 fixing TW-32984
Evgeniy.Koshkin
parents: 78
diff changeset
164 return null;
384401f7fc24 fixing TW-32984
Evgeniy.Koshkin
parents: 78
diff changeset
165 }
384401f7fc24 fixing TW-32984
Evgeniy.Koshkin
parents: 78
diff changeset
166 File srcSrvHomeDir = new File(winDbgHomeDir, X64_SRCSRV);
384401f7fc24 fixing TW-32984
Evgeniy.Koshkin
parents: 78
diff changeset
167 if (srcSrvHomeDir.isDirectory()) return srcSrvHomeDir;
384401f7fc24 fixing TW-32984
Evgeniy.Koshkin
parents: 78
diff changeset
168 srcSrvHomeDir = new File(winDbgHomeDir, X86_SRCSRV);
384401f7fc24 fixing TW-32984
Evgeniy.Koshkin
parents: 78
diff changeset
169 if (srcSrvHomeDir.isDirectory()) return srcSrvHomeDir;
384401f7fc24 fixing TW-32984
Evgeniy.Koshkin
parents: 78
diff changeset
170 LOG.debug("Failed to find Source Server tools home directory under WinDbg tools home directory detected on path " + winDbgHomeDir);
384401f7fc24 fixing TW-32984
Evgeniy.Koshkin
parents: 78
diff changeset
171 return null;
384401f7fc24 fixing TW-32984
Evgeniy.Koshkin
parents: 78
diff changeset
172 }
384401f7fc24 fixing TW-32984
Evgeniy.Koshkin
parents: 78
diff changeset
173
101
52fc27842bc1 fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 98
diff changeset
174 private Map<File, String> getArtifactPathsByFileExtension(List<ArtifactsCollection> artifactsCollections, String fileExtension){
52fc27842bc1 fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 98
diff changeset
175 final Map<File, String> result = new HashMap<File, String>();
2
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
176 for(ArtifactsCollection artifactsCollection : artifactsCollections){
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
177 if(artifactsCollection.isEmpty()) continue;
101
52fc27842bc1 fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 98
diff changeset
178 final Map<File, String> filePathMap = artifactsCollection.getFilePathMap();
52fc27842bc1 fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 98
diff changeset
179 for (final File artifact : filePathMap.keySet()){
2
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
180 if(FileUtil.getExtension(artifact.getPath()).equalsIgnoreCase(fileExtension))
101
52fc27842bc1 fixing TW-45209, TW-45095; report resulting artifact path for each pdb file instead of file name from build agent
Evgeniy.Koshkin@unit-519.Labs.IntelliJ.Net
parents: 98
diff changeset
181 result.put(artifact, filePathMap.get(artifact));
2
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
182 }
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
183 }
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
184 return result;
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
185 }
48
c6dfb8e038ce logging improved (fixed TW-31876)
Evgeniy.Koshkin
parents: 41
diff changeset
186
c6dfb8e038ce logging improved (fixed TW-31876)
Evgeniy.Koshkin
parents: 41
diff changeset
187 private boolean isIndexingApplicable() {
c6dfb8e038ce logging improved (fixed TW-31876)
Evgeniy.Koshkin
parents: 41
diff changeset
188 return myFileUrlProvider != null && mySrcSrvHomeDir != null;
c6dfb8e038ce logging improved (fixed TW-31876)
Evgeniy.Koshkin
parents: 41
diff changeset
189 }
2
c6ca0a26d93e initial implementation of agent-side symbol indexer
Evgeniy.Koshkin
parents:
diff changeset
190 }