Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Worker.nuspec
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<id>Microsoft.Azure.Functions.NodeJsWorker</id>
<version>3.10.1</version>
<version>3.11.0</version>
<authors>Microsoft</authors>
<owners>Microsoft</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
Expand Down
2 changes: 2 additions & 0 deletions azure-pipelines/templates/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ jobs:
NODE_VERSION: '20.x'
Node22:
NODE_VERSION: '22.x'
Node24:
NODE_VERSION: '24.x'

steps:
- task: NodeTool@0
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "azure-functions-nodejs-worker",
"author": "Microsoft Corporation",
"version": "3.10.1",
"version": "3.11.0",
"description": "Microsoft Azure Functions NodeJS Worker",
"license": "(MIT OR Apache-2.0)",
"dependencies": {
Expand Down
2 changes: 1 addition & 1 deletion src/constants.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the MIT License.

export const version = '3.10.1';
export const version = '3.11.0';
6 changes: 2 additions & 4 deletions src/coreApi/setProgrammingModel.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,14 @@
import { ProgrammingModel } from '@azure/functions-core';
import { AzureFunctionsRpcMessages as rpc } from '../../azure-functions-language-worker-protobuf/src/rpc';
import { worker } from '../WorkerContext';
import LogCategory = rpc.RpcLog.RpcLogCategory;
import LogLevel = rpc.RpcLog.Level;

export function setProgrammingModel(programmingModel: ProgrammingModel): void {
// Log when setting the programming model, except for the initial default one (partially because the grpc channels aren't fully setup at that time)
if (worker.app.programmingModel) {
worker.log({
message: `Setting Node.js programming model to "${programmingModel.name}" version "${programmingModel.version}"`,
level: LogLevel.Information,
logCategory: LogCategory.System,
level: rpc.RpcLog.Level.Information,
logCategory: rpc.RpcLog.RpcLogCategory.System,
});
} else {
worker.defaultProgrammingModel = programmingModel;
Expand Down
18 changes: 8 additions & 10 deletions src/eventHandlers/FunctionEnvironmentReloadHandler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@ import { worker } from '../WorkerContext';
import { EventHandler } from './EventHandler';
import { getWorkerCapabilities } from './getWorkerCapabilities';
import { getWorkerMetadata } from './getWorkerMetadata';
import LogCategory = rpc.RpcLog.RpcLogCategory;
import LogLevel = rpc.RpcLog.Level;
import CapabilitiesUpdateStrategy = rpc.FunctionEnvironmentReloadResponse.CapabilitiesUpdateStrategy;
import * as path from 'path';

Expand All @@ -31,8 +29,8 @@ export class FunctionEnvironmentReloadHandler extends EventHandler<
if (!msg.functionAppDirectory) {
worker.log({
message: `FunctionEnvironmentReload functionAppDirectory is not defined`,
level: LogLevel.Debug,
logCategory: LogCategory.System,
level: rpc.RpcLog.Level.Debug,
logCategory: rpc.RpcLog.RpcLogCategory.System,
});
}

Expand All @@ -43,8 +41,8 @@ export class FunctionEnvironmentReloadHandler extends EventHandler<
) {
worker.log({
message: `FunctionEnvironmentReload functionAppDirectory has not changed`,
level: LogLevel.Debug,
logCategory: LogCategory.System,
level: rpc.RpcLog.Level.Debug,
logCategory: rpc.RpcLog.RpcLogCategory.System,
});
}

Expand All @@ -56,8 +54,8 @@ export class FunctionEnvironmentReloadHandler extends EventHandler<
const numVariables = (msg.environmentVariables && Object.keys(msg.environmentVariables).length) || 0;
worker.log({
message: `Reloading environment variables. Found ${numVariables} variables to reload.`,
level: LogLevel.Information,
logCategory: LogCategory.System,
level: rpc.RpcLog.Level.Information,
logCategory: rpc.RpcLog.RpcLogCategory.System,
});

// reset existing env vars
Expand All @@ -69,8 +67,8 @@ export class FunctionEnvironmentReloadHandler extends EventHandler<
if (msg.functionAppDirectory) {
worker.log({
message: `Changing current working directory to ${msg.functionAppDirectory}`,
level: LogLevel.Information,
logCategory: LogCategory.System,
level: rpc.RpcLog.Level.Information,
logCategory: rpc.RpcLog.RpcLogCategory.System,
});
process.chdir(msg.functionAppDirectory);
await startApp(msg.functionAppDirectory);
Expand Down
6 changes: 2 additions & 4 deletions src/eventHandlers/FunctionLoadHandler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@ import { loadLegacyFunction } from '../LegacyFunctionLoader';
import { isDefined, nonNullProp } from '../utils/nonNull';
import { worker } from '../WorkerContext';
import { EventHandler } from './EventHandler';
import LogCategory = rpc.RpcLog.RpcLogCategory;
import LogLevel = rpc.RpcLog.Level;

/**
* Worker responds after loading required metadata to load function with the load result
Expand All @@ -27,8 +25,8 @@ export class FunctionLoadHandler extends EventHandler<'functionLoadRequest', 'fu

worker.log({
message: `Worker ${worker.id} received FunctionLoadRequest`,
level: LogLevel.Debug,
logCategory: LogCategory.System,
level: rpc.RpcLog.Level.Debug,
logCategory: rpc.RpcLog.RpcLogCategory.System,
});

if (isDefined(worker.app.blockingAppStartError)) {
Expand Down
6 changes: 2 additions & 4 deletions src/eventHandlers/FunctionsMetadataHandler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@ import { AzureFunctionsRpcMessages as rpc } from '../../azure-functions-language
import { isDefined } from '../utils/nonNull';
import { worker } from '../WorkerContext';
import { EventHandler } from './EventHandler';
import LogCategory = rpc.RpcLog.RpcLogCategory;
import LogLevel = rpc.RpcLog.Level;

export class FunctionsMetadataHandler extends EventHandler<'functionsMetadataRequest', 'functionMetadataResponse'> {
readonly responseName = 'functionMetadataResponse';
Expand All @@ -24,8 +22,8 @@ export class FunctionsMetadataHandler extends EventHandler<'functionsMetadataReq

worker.log({
message: `Worker ${worker.id} received FunctionsMetadataRequest`,
level: LogLevel.Debug,
logCategory: LogCategory.System,
level: rpc.RpcLog.Level.Debug,
logCategory: rpc.RpcLog.RpcLogCategory.System,
});

if (worker.app.isUsingWorkerIndexing) {
Expand Down
14 changes: 6 additions & 8 deletions src/eventHandlers/WorkerInitHandler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@ import { worker } from '../WorkerContext';
import { EventHandler } from './EventHandler';
import { getWorkerCapabilities } from './getWorkerCapabilities';
import { getWorkerMetadata } from './getWorkerMetadata';
import LogCategory = rpc.RpcLog.RpcLogCategory;
import LogLevel = rpc.RpcLog.Level;

/**
* Host sends capabilities/init data to worker and requests the worker to initialize itself
Expand All @@ -30,8 +28,8 @@ export class WorkerInitHandler extends EventHandler<'workerInitRequest', 'worker
if (!msg.functionAppDirectory) {
worker.log({
message: `WorkerInit functionAppDirectory is not defined`,
level: LogLevel.Debug,
logCategory: LogCategory.System,
level: rpc.RpcLog.Level.Debug,
logCategory: rpc.RpcLog.RpcLogCategory.System,
});
}
worker.app.functionAppDirectory = msg.functionAppDirectory;
Expand All @@ -40,8 +38,8 @@ export class WorkerInitHandler extends EventHandler<'workerInitRequest', 'worker

worker.log({
message: `Worker ${worker.id} received WorkerInitRequest`,
level: LogLevel.Debug,
logCategory: LogCategory.System,
level: rpc.RpcLog.Level.Debug,
logCategory: rpc.RpcLog.RpcLogCategory.System,
});

logColdStartWarning();
Expand Down Expand Up @@ -75,8 +73,8 @@ export function logColdStartWarning(delayInMs?: number): void {
worker.log({
message:
'package.json is not found at the root of the Function App in Azure Files - cold start for NodeJs can be affected.',
level: LogLevel.Debug,
logCategory: LogCategory.System,
level: rpc.RpcLog.Level.Debug,
logCategory: rpc.RpcLog.RpcLogCategory.System,
});
}
});
Expand Down
6 changes: 2 additions & 4 deletions src/eventHandlers/terminateWorker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,12 @@ import { AzureFunctionsRpcMessages as rpc } from '../../azure-functions-language
import { ReadOnlyError } from '../errors';
import { executeHooks } from '../hooks/executeHooks';
import { worker } from '../WorkerContext';
import LogCategory = rpc.RpcLog.RpcLogCategory;
import LogLevel = rpc.RpcLog.Level;

export async function terminateWorker(_msg: rpc.IWorkerTerminate) {
worker.log({
message: 'Received workerTerminate message; gracefully shutting down worker',
level: LogLevel.Debug,
logCategory: LogCategory.System,
level: rpc.RpcLog.Level.Debug,
logCategory: rpc.RpcLog.RpcLogCategory.System,
});

const appTerminateContext: AppTerminateContext = {
Expand Down
10 changes: 4 additions & 6 deletions src/hooks/executeHooks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@ import { HookContext } from '@azure/functions-core';
import { AzureFunctionsRpcMessages as rpc } from '../../azure-functions-language-worker-protobuf/src/rpc';
import { worker } from '../WorkerContext';
import { getHooks } from './getHooks';
import LogLevel = rpc.RpcLog.Level;
import LogCategory = rpc.RpcLog.RpcLogCategory;

export async function executeHooks(
hookName: string,
Expand All @@ -18,8 +16,8 @@ export async function executeHooks(
if (callbacks.length > 0) {
worker.log({
message: `Executing ${callbacks.length} "${hookName}" hooks`,
level: LogLevel.Debug,
logCategory: LogCategory.System,
level: rpc.RpcLog.Level.Debug,
logCategory: rpc.RpcLog.RpcLogCategory.System,
invocationId,
category: msgCategory,
});
Expand All @@ -28,8 +26,8 @@ export async function executeHooks(
}
worker.log({
message: `Executed "${hookName}" hooks`,
level: LogLevel.Debug,
logCategory: LogCategory.System,
level: rpc.RpcLog.Level.Debug,
logCategory: rpc.RpcLog.RpcLogCategory.System,
invocationId,
category: msgCategory,
});
Expand Down
18 changes: 8 additions & 10 deletions src/loadScriptFile.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,6 @@ import { AzureFunctionsRpcMessages as rpc } from '../azure-functions-language-wo
import { AzFuncSystemError } from './errors';
import { PackageJson } from './parsers/parsePackageJson';
import { worker } from './WorkerContext';
import LogCategory = rpc.RpcLog.RpcLogCategory;
import LogLevel = rpc.RpcLog.Level;

let hasLoggedAttempt = 0;
let hasLoggedWarning = false;
Expand All @@ -23,8 +21,8 @@ export async function loadScriptFile(filePath: string, packageJson: PackageJson)
if (currentAttempt > 1 && currentAttempt > hasLoggedAttempt) {
worker.log({
message: `Retrying file load. Attempt ${currentAttempt}/${retries + 1}`,
level: LogLevel.Debug,
logCategory: LogCategory.System,
level: rpc.RpcLog.Level.Debug,
logCategory: rpc.RpcLog.RpcLogCategory.System,
});
hasLoggedAttempt = currentAttempt;
}
Expand All @@ -40,8 +38,8 @@ export async function loadScriptFile(filePath: string, packageJson: PackageJson)
} else if (error.retriesLeft > 0 && !hasLoggedWarning) {
worker.log({
message: `Warning: Failed to load file with error "${error.message}"`,
level: LogLevel.Warning,
logCategory: LogCategory.System,
level: rpc.RpcLog.Level.Warning,
logCategory: rpc.RpcLog.RpcLogCategory.System,
});
hasLoggedWarning = true;
}
Expand Down Expand Up @@ -82,13 +80,13 @@ function warnIfLongLoadTime(filePath: string, start: number): void {
) {
worker.log({
message: `Loading "${path.basename(filePath)}" took ${timeElapsed}ms`,
level: LogLevel.Warning,
logCategory: LogCategory.System,
level: rpc.RpcLog.Level.Warning,
logCategory: rpc.RpcLog.RpcLogCategory.System,
});
worker.log({
message: `Set "${rfpName}" to "1" to significantly improve load times. Learn more here: https://aka.ms/AAjon54`,
level: LogLevel.Warning,
logCategory: LogCategory.System,
level: rpc.RpcLog.Level.Warning,
logCategory: rpc.RpcLog.RpcLogCategory.System,
});
}
}
Expand Down
6 changes: 2 additions & 4 deletions src/setupEventStream.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@ import { WorkerInitHandler } from './eventHandlers/WorkerInitHandler';
import { systemError } from './utils/Logger';
import { nonNullProp } from './utils/nonNull';
import { worker } from './WorkerContext';
import LogCategory = rpc.RpcLog.RpcLogCategory;
import LogLevel = rpc.RpcLog.Level;

/**
* Configures handlers for incoming gRPC messages on the client
Expand Down Expand Up @@ -101,8 +99,8 @@ async function handleMessage(inMsg: rpc.StreamingMessage): Promise<void> {
if (error.isAzureFunctionsSystemError && !error.loggedOverRpc) {
worker.log({
message: error.message,
level: LogLevel.Error,
logCategory: LogCategory.System,
level: rpc.RpcLog.Level.Error,
logCategory: rpc.RpcLog.RpcLogCategory.System,
});
}

Expand Down
18 changes: 8 additions & 10 deletions src/startApp.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@ import { isEnvironmentVariableSet, isNode20Plus } from './utils/util';
import { worker } from './WorkerContext';
import globby = require('globby');
import path = require('path');
import LogLevel = rpc.RpcLog.Level;
import LogCategory = rpc.RpcLog.RpcLogCategory;

/**
* Starting an app can happen in two places, depending on if the worker was specialized or not
Expand Down Expand Up @@ -51,8 +49,8 @@ async function updatePackageJson(functionAppDirectory: string): Promise<void> {
const error = ensureErrorType(err);
worker.log({
message: `Worker failed to load package.json: ${error.message}`,
level: LogLevel.Warning,
logCategory: LogCategory.System,
level: rpc.RpcLog.Level.Warning,
logCategory: rpc.RpcLog.RpcLogCategory.System,
});
worker.app.packageJson = {};
}
Expand Down Expand Up @@ -81,8 +79,8 @@ async function loadEntryPointFile(functionAppDirectory: string): Promise<void> {
currentFile = file;
worker.log({
message: `Loading entry point file "${file}"`,
level: LogLevel.Debug,
logCategory: LogCategory.System,
level: rpc.RpcLog.Level.Debug,
logCategory: rpc.RpcLog.RpcLogCategory.System,
});
try {
const entryPointFilePath = path.join(functionAppDirectory, file);
Expand All @@ -93,8 +91,8 @@ async function loadEntryPointFile(functionAppDirectory: string): Promise<void> {
}
worker.log({
message: `Loaded entry point file "${file}"`,
level: LogLevel.Debug,
logCategory: LogCategory.System,
level: rpc.RpcLog.Level.Debug,
logCategory: rpc.RpcLog.RpcLogCategory.System,
});
}
} catch (err) {
Expand All @@ -119,8 +117,8 @@ async function loadEntryPointFile(functionAppDirectory: string): Promise<void> {
// Always log as rpc system log, which goes to our internal telemetry
worker.log({
message: newMessage,
level: LogLevel.Error,
logCategory: LogCategory.System,
level: rpc.RpcLog.Level.Error,
logCategory: rpc.RpcLog.RpcLogCategory.System,
});
error.loggedOverRpc = true;
}
Expand Down
6 changes: 2 additions & 4 deletions src/utils/blockedMonitor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@
// Licensed under the MIT License.

import { AzureFunctionsRpcMessages as rpc } from './../../azure-functions-language-worker-protobuf/src/rpc';
import LogCategory = rpc.RpcLog.RpcLogCategory;
import LogLevel = rpc.RpcLog.Level;
import blockedAt = require('blocked-at');

export function startBlockedMonitor(
Expand All @@ -14,8 +12,8 @@ export function startBlockedMonitor(
function logBlockedWarning(message: string) {
worker.log({
message,
level: LogLevel.Warning,
logCategory: LogCategory.System,
level: rpc.RpcLog.Level.Warning,
logCategory: rpc.RpcLog.RpcLogCategory.System,
});
}

Expand Down
Loading