Skip to content

Commit 723264b

Browse files
committed
Merge branch 'dev' into jviau/abort-channel
2 parents 68106cf + c33151c commit 723264b

File tree

393 files changed

+6081
-3986
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

393 files changed

+6081
-3986
lines changed

WebJobs.Script.sln

Lines changed: 75 additions & 65 deletions
Large diffs are not rendered by default.

eng/build/Workers.Java.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project>
22

33
<ItemGroup>
4-
<PackageReference Include="Microsoft.Azure.Functions.JavaWorker" Version="2.19.0" />
4+
<PackageReference Include="Microsoft.Azure.Functions.JavaWorker" Version="2.19.2" />
55
</ItemGroup>
66

77
</Project>

eng/build/Workers.Python.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<ItemGroup>
44
<!-- Python worker does not ship with the host for windows. -->
5-
<PackageReference Include="Microsoft.Azure.Functions.PythonWorker" Version="4.37.0" Condition="!$(RuntimeIdentifier.StartsWith('win'))" />
5+
<PackageReference Include="Microsoft.Azure.Functions.PythonWorker" Version="4.38.0" Condition="!$(RuntimeIdentifier.StartsWith('win'))" />
66
</ItemGroup>
77

88
</Project>

eng/ci/host.coldstart.yml

Lines changed: 160 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,35 @@ schedules:
1313
always: true
1414

1515
parameters:
16+
17+
# Function apps to include in the run.
18+
- name: includeHelloHttpNet9
19+
displayName: Include HelloHttpNet9 (.NET9 Web Application)
20+
type: boolean
21+
default: true
22+
- name: includeHelloHttpNet9NoProxy
23+
displayName: Include HelloHttpNet9NoProxy (.NET9 Worker Application)
24+
type: boolean
25+
default: true
26+
- name: includeHelloHttpNode
27+
displayName: Include HelloHttpNode (Node Application)
28+
type: boolean
29+
default: false
30+
31+
# Dotnet trace profile collection & jit trace generation.
32+
- name: collectNetTrace
33+
displayName: Collect DotNet trace
34+
type: boolean
35+
default: false
36+
- name: netTraceCollectArguments
37+
displayName: DotNet trace profile collection arguments (Valid only if "Collect DotNet trace" is true)). Example `-n Microsoft.Azure.WebJobs.Script.WebHost --profile cpu-sampling --duration 00:00:00:10`
38+
type: string
39+
default: '-n Microsoft.Azure.WebJobs.Script.WebHost --providers Microsoft-Diagnostics-DiagnosticSource:0xfffffffffffff7ff:5,Microsoft-Windows-DotNETRuntime:0xC0001801F9:5,FunctionsSystemLogsEventSource:0xFFFFFFFFFFFFFFFF:5 --stopping-event-provider-name Microsoft-Diagnostics-DiagnosticSource --stopping-event-event-name Activity1/Stop'
40+
- name: createJitTrace
41+
displayName: Create Jit trace (Ensure "Collect DotNet trace" is set to true)
42+
type: boolean
43+
default: false
44+
1645
- name: collectPerfViewProfileOnWindows
1746
displayName: Collect PerfView Profile (on Windows)
1847
type: boolean
@@ -36,6 +65,11 @@ resources:
3665
variables:
3766
- template: /eng/ci/templates/variables/coldstart.yml@self
3867
- template: /ci/variables/cfs.yml@eng
68+
- name: shouldCollectPerfViewProfileOnWindows
69+
${{ if eq(variables['Build.Reason'], 'Schedule') }}: # We always collect PerfView profile on nightly runs.
70+
value: true
71+
${{ if ne(variables['Build.Reason'], 'Schedule') }}:
72+
value: ${{ parameters.collectPerfViewProfileOnWindows }}
3973

4074
extends:
4175
template: v1/1ES.Unofficial.PipelineTemplate.yml@1es
@@ -50,72 +84,151 @@ extends:
5084
displayName: Record latency(Windows)
5185
jobs:
5286
- ${{ each appId in split(variables.runInstances, ',') }}:
53-
- template: /eng/ci/templates/official/jobs/run-coldstart.yml@self
54-
parameters:
55-
description: .NET9 Web Application
56-
functionAppName: HelloHttpNet9
57-
instanceId: ${{ appId }}
58-
collectPerfViewProfileOnWindows: ${{ parameters.collectPerfViewProfileOnWindows }}
59-
perfViewCollectArguments: ${{ parameters.perfViewCollectArguments }}
60-
- template: /eng/ci/templates/official/jobs/run-coldstart.yml@self
61-
parameters:
62-
description: .NET9 Worker Application
63-
functionAppName: HelloHttpNet9NoProxy
64-
instanceId: ${{ appId }}
65-
collectPerfViewProfileOnWindows: ${{ parameters.collectPerfViewProfileOnWindows }}
66-
perfViewCollectArguments: ${{ parameters.perfViewCollectArguments }}
87+
- ${{ if eq(parameters.includeHelloHttpNet9, true) }}:
88+
- template: /eng/ci/templates/official/jobs/run-coldstart.yml@self
89+
parameters:
90+
description: .NET9 Web Application
91+
functionAppName: HelloHttpNet9
92+
instanceId: ${{ appId }}
93+
collectPerfViewProfileOnWindows: ${{ variables.shouldCollectPerfViewProfileOnWindows }}
94+
perfViewCollectArguments: ${{ parameters.perfViewCollectArguments }}
95+
netTraceCollectArguments: ${{ parameters.netTraceCollectArguments }}
96+
collectNetTrace: ${{ parameters.collectNetTrace }}
97+
createJitTrace: ${{ parameters.createJitTrace }}
98+
- ${{ if eq(parameters.includeHelloHttpNet9NoProxy, true) }}:
99+
- template: /eng/ci/templates/official/jobs/run-coldstart.yml@self
100+
parameters:
101+
description: .NET9 Worker Application
102+
functionAppName: HelloHttpNet9NoProxy
103+
instanceId: ${{ appId }}
104+
collectPerfViewProfileOnWindows: ${{ variables.shouldCollectPerfViewProfileOnWindows }}
105+
perfViewCollectArguments: ${{ parameters.perfViewCollectArguments }}
106+
netTraceCollectArguments: ${{ parameters.netTraceCollectArguments }}
107+
collectNetTrace: ${{ parameters.collectNetTrace }}
108+
createJitTrace: ${{ parameters.createJitTrace }}
109+
- ${{ if eq(parameters.includeHelloHttpNode, true) }}:
110+
- template: /eng/ci/templates/official/jobs/run-coldstart.yml@self
111+
parameters:
112+
description: Node Application
113+
functionAppName: HelloHttpNode
114+
instanceId: ${{ appId }}
115+
collectPerfViewProfileOnWindows: ${{ variables.shouldCollectPerfViewProfileOnWindows }}
116+
perfViewCollectArguments: ${{ parameters.perfViewCollectArguments }}
117+
netTraceCollectArguments: ${{ parameters.netTraceCollectArguments }}
118+
collectNetTrace: ${{ parameters.collectNetTrace }}
119+
createJitTrace: ${{ parameters.createJitTrace }}
67120

68121
- stage: CalculateWindows
69122
displayName: Process results(Windows)
70123
dependsOn: RunWindows
124+
condition: always()
71125
jobs:
72-
- template: /eng/ci/templates/official/jobs/process-coldstart.yml@self
73-
parameters:
74-
functionAppName: HelloHttpNet9
75-
description: .NET9 Web Application
76-
runInstances:
77-
items: ${{ split(variables.runInstances, ',') }}
78-
- template: /eng/ci/templates/official/jobs/process-coldstart.yml@self
79-
parameters:
80-
functionAppName: HelloHttpNet9NoProxy
81-
description: .NET9 Worker Application
82-
runInstances:
83-
items: ${{ split(variables.runInstances, ',') }}
126+
- ${{ if eq(parameters.includeHelloHttpNet9, true) }}:
127+
- template: /eng/ci/templates/official/jobs/process-coldstart.yml@self
128+
parameters:
129+
functionAppName: HelloHttpNet9
130+
description: .NET9 Web Application
131+
runInstances:
132+
items: ${{ split(variables.runInstances, ',') }}
133+
- ${{ if eq(parameters.includeHelloHttpNet9NoProxy, true) }}:
134+
- template: /eng/ci/templates/official/jobs/process-coldstart.yml@self
135+
parameters:
136+
functionAppName: HelloHttpNet9NoProxy
137+
description: .NET9 Worker Application
138+
runInstances:
139+
items: ${{ split(variables.runInstances, ',') }}
140+
- ${{ if eq(parameters.includeHelloHttpNode, true) }}:
141+
- template: /eng/ci/templates/official/jobs/process-coldstart.yml@self
142+
parameters:
143+
functionAppName: HelloHttpNode
144+
description: Node Application
145+
runInstances:
146+
items: ${{ split(variables.runInstances, ',') }}
84147

85148
# # LINUX
86149
- stage: RunLinux
87150
dependsOn: []
88151
displayName: Record latency(Linux)
89152
jobs:
90153
- ${{ each appId in split(variables.runInstances, ',') }}:
91-
- template: /eng/ci/templates/official/jobs/run-coldstart.yml@self
154+
- ${{ if eq(parameters.includeHelloHttpNet9, true) }}:
155+
- template: /eng/ci/templates/official/jobs/run-coldstart.yml@self
156+
parameters:
157+
description: .NET9 Web Application
158+
functionAppName: HelloHttpNet9
159+
instanceId: ${{ appId }}
160+
os: Linux
161+
collectNetTrace: ${{ parameters.collectNetTrace }}
162+
netTraceCollectArguments: ${{ parameters.netTraceCollectArguments }}
163+
createJitTrace: ${{ parameters.createJitTrace }}
164+
- ${{ if eq(parameters.includeHelloHttpNet9NoProxy, true) }}:
165+
- template: /eng/ci/templates/official/jobs/run-coldstart.yml@self
166+
parameters:
167+
description: .NET9 Worker Application
168+
functionAppName: HelloHttpNet9NoProxy
169+
instanceId: ${{ appId }}
170+
os: Linux
171+
collectNetTrace: ${{ parameters.collectNetTrace }}
172+
netTraceCollectArguments: ${{ parameters.netTraceCollectArguments }}
173+
createJitTrace: ${{ parameters.createJitTrace }}
174+
- ${{ if eq(parameters.includeHelloHttpNode, true) }}:
175+
- template: /eng/ci/templates/official/jobs/run-coldstart.yml@self
176+
parameters:
177+
description: Node Application
178+
functionAppName: HelloHttpNode
179+
instanceId: ${{ appId }}
180+
os: Linux
181+
collectNetTrace: ${{ parameters.collectNetTrace }}
182+
netTraceCollectArguments: ${{ parameters.netTraceCollectArguments }}
183+
createJitTrace: ${{ parameters.createJitTrace }}
184+
185+
- stage: CalculateLinux
186+
displayName: Process results(Linux)
187+
dependsOn: RunLinux
188+
condition: always()
189+
jobs:
190+
- ${{ if eq(parameters.includeHelloHttpNet9, true) }}:
191+
- template: /eng/ci/templates/official/jobs/process-coldstart.yml@self
92192
parameters:
93-
description: .NET9 Web Application
94193
functionAppName: HelloHttpNet9
95-
instanceId: ${{ appId }}
194+
description: .NET9 Web Application
96195
os: Linux
97-
- template: /eng/ci/templates/official/jobs/run-coldstart.yml@self
196+
runInstances:
197+
items: ${{ split(variables.runInstances, ',') }}
198+
- ${{ if eq(parameters.includeHelloHttpNet9NoProxy, true) }}:
199+
- template: /eng/ci/templates/official/jobs/process-coldstart.yml@self
98200
parameters:
99-
description: .NET9 Worker Application
100201
functionAppName: HelloHttpNet9NoProxy
101-
instanceId: ${{ appId }}
202+
description: .NET9 Worker Application
102203
os: Linux
103-
104-
- stage: CalculateLinux
105-
displayName: Process results(Linux)
106-
dependsOn: RunLinux
204+
runInstances:
205+
items: ${{ split(variables.runInstances, ',') }}
206+
- ${{ if eq(parameters.includeHelloHttpNode, true) }}:
207+
- template: /eng/ci/templates/official/jobs/process-coldstart.yml@self
208+
parameters:
209+
functionAppName: HelloHttpNode
210+
description: Node Application
211+
os: Linux
212+
runInstances:
213+
items: ${{ split(variables.runInstances, ',') }}
214+
215+
# Merge JIT traces from different function apps and dedupe.
216+
- stage: MergeWindowsJitTraceFiles
217+
displayName: Create jit trace(Windows)
218+
condition: and(succeeded(), eq('${{ parameters.createJitTrace }}', true))
219+
dependsOn:
220+
- CalculateWindows
107221
jobs:
108-
- template: /eng/ci/templates/official/jobs/process-coldstart.yml@self
222+
- template: /eng/ci/templates/official/jobs/merge-jittrace.yml@self
109223
parameters:
110-
functionAppName: HelloHttpNet9
111-
description: .NET9 Web Application
112-
os: Linux
113-
runInstances:
114-
items: ${{ split(variables.runInstances, ',') }}
115-
- template: /eng/ci/templates/official/jobs/process-coldstart.yml@self
224+
os: Windows
225+
226+
- stage: MergeLinuxJitTraceFiles
227+
displayName: Create jit trace(Linux)
228+
condition: and(succeeded(), eq('${{ parameters.createJitTrace }}', true))
229+
dependsOn:
230+
- CalculateLinux
231+
jobs:
232+
- template: /eng/ci/templates/official/jobs/merge-jittrace.yml@self
116233
parameters:
117-
functionAppName: HelloHttpNet9NoProxy
118-
description: .NET9 Worker Application
119234
os: Linux
120-
runInstances:
121-
items: ${{ split(variables.runInstances, ',') }}

eng/ci/public-build.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# This build is used for public PR and CI builds.
22

3+
parameters:
4+
- name: privateSiteExt
5+
displayName: Build private site extension
6+
type: boolean
7+
default: false
8+
39
trigger:
410
batch: true
511
branches:
@@ -64,3 +70,9 @@ extends:
6470
- stage: Test
6571
jobs:
6672
- template: /eng/ci/templates/jobs/run-unit-tests.yml@self
73+
74+
- ${{ if eq(parameters.privateSiteExt, true) }}:
75+
- stage: Build
76+
dependsOn: []
77+
jobs:
78+
- template: /eng/ci/templates/jobs/build-private-site-ext.yml@self
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
jobs:
2+
- job: PrivateSiteExt
3+
displayName: Build Private Site Extension
4+
5+
variables:
6+
drop_path: $(Build.ArtifactStagingDirectory)
7+
site_ext_path: $(drop_path)/site_ext
8+
windows_drop_path: $(drop_path)/windows
9+
10+
templateContext:
11+
outputParentDirectory: $(drop_path)
12+
outputs:
13+
- output: pipelineArtifact
14+
displayName: Publish windows artifacts
15+
path: $(windows_drop_path)
16+
artifact: drop_windows
17+
18+
steps:
19+
- template: /eng/ci/templates/install-dotnet.yml@self
20+
- template: /eng/ci/templates/steps/build-site-ext.yml@self
21+
parameters:
22+
publishDir: $(site_ext_path)
23+
24+
- pwsh: |
25+
cd $(site_ext_path) | Out-Null
26+
New-Item -Path $(windows_drop_path) -ItemType Directory -Force | Out-Null
27+
./New-PrivateSiteExtension.ps1 -OutputPath '$(windows_drop_path)' -AppendOutputName
28+
Write-Host "##vso[build.addbuildtag]private-site-ext"
29+
displayName: Compress private site extension
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
parameters:
2+
- name: os
3+
type: string
4+
default: Windows
5+
values:
6+
- Windows
7+
- Linux
8+
- name: functionAppNames
9+
type: object
10+
default:
11+
- HelloHttpNet9
12+
- HelloHttpNet9NoProxy
13+
- HelloHttpNode
14+
15+
jobs:
16+
- job: ${{ parameters.os }}
17+
pool:
18+
name: 1es-pool-azfunc-benchmarking-large
19+
image: 1es-windows-2022-benchmark-runner-vanilla
20+
os: windows
21+
22+
variables:
23+
mergedJitTraceOutputDirectory: $(Build.ArtifactStagingDirectory)/MergedJitTraces
24+
mergedJitTraceFilePath: $(mergedJitTraceOutputDirectory)/$(Build.BuildNumber)_${{ parameters.os }}_coldstart.jittrace
25+
26+
templateContext:
27+
outputParentDirectory: $(Build.ArtifactStagingDirectory)
28+
outputs:
29+
- output: pipelineArtifact
30+
displayName: Publish benchmark results
31+
path: $(mergedJitTraceFilePath)
32+
artifact: Functions_JitTrace_${{ parameters.os }}
33+
34+
steps:
35+
- pwsh: |
36+
New-Item -ItemType Directory -Path $(mergedJitTraceOutputDirectory)
37+
displayName: Create directories
38+
39+
- ${{ each functionApp in parameters.functionAppNames }}:
40+
- task: DownloadPipelineArtifact@2
41+
displayName: Download PerfTraceData artifacts for ${{ parameters.os }} ${{ functionApp }}
42+
inputs:
43+
artifact: AzFunc_${{ parameters.os }}_${{ functionApp }}
44+
patterns: '**/*.jittrace'
45+
path: '$(Pipeline.Workspace)/${{ parameters.os }}_jittrace/${{ functionApp }}'
46+
continueOnError: true
47+
48+
- pwsh: |
49+
$output = "$(mergedJitTraceFilePath)"
50+
$files = Get-ChildItem -Path "$(Pipeline.Workspace)/${{ parameters.os }}_jittrace" -Recurse -Filter *.jittrace
51+
Write-Host "Merging the following .jittrace files:"
52+
$files | ForEach-Object { Write-Host $_.FullName }
53+
$files | Get-Content | Sort-Object -Unique | Set-Content $output
54+
$lineCount = (Get-Content $output | Measure-Object -Line).Lines
55+
Write-Host "Final merged file line count: $lineCount"
56+
displayName: Merge all .jittrace files ${{ parameters.os }}

0 commit comments

Comments
 (0)