Server[pid=XXXX] is already being debugged
Environment data
OS and version: Windows 11 Python version (& distribution if applicable, e.g. Anaconda): Python 3.10.6 (conda-forge) [MSC v.1929 64 bit (AMD64)] on win32 Using VS Code or Visual Studio: VS Code, Azurite version 3.33
Behavior
Expected @blob_trigger to work, but received Server[pid=XXXX] is already being debugged error
Steps to reproduce:
- Follow AzFunc Quickstart
- Choose blob_trigger
- Create container (sample-workitems)
- Run
- (error message)
The related files are both in gist for easy reading, and in repository for reproduction.
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "python",
"4931ba_STORAGE": "UseDevelopmentStorage=true"
}
}
# function_app.py
import azure.functions as func
import logging
app = func.FunctionApp()
@app.blob_trigger(arg_name="myblob", path="sample-workitems",
connection="4931ba_STORAGE")
def blob_triggered(myblob: func.InputStream):
logging.info(f"Python blob trigger function processed blob"
f"Name: {myblob.name}"
f"Blob Size: {myblob.length} bytes")
...
14 Client <-- Adapter:
{
"seq": 5,
"type": "response",
"request_seq": 2,
"success": false,
"command": "attach",
"message": "Server[pid=4768] is already being debugged."
}
...
Originally opened at https://github.com/microsoft/debugpy/issues/1831
I was able to make it work! The problem was that I was waitting for blob to enter sample-workitems/temp, which does not work. My hypothesis is that temp/ can not be watched.
I have updated the repository as an example, so I invite developers to test the activities below and testing whether both are correctly triggered.
import azure.functions as func
import logging
app = func.FunctionApp()
@app.blob_trigger(arg_name="myblob", path="sample-workitems",
connection="4931ba_STORAGE")
def blob_triggered(myblob: func.InputStream):
# is triggered both for new blobs in `sample-workitems` and
# `sample-workitems/temp`
logging.info(f"Python blob trigger function processed blob"
f"Name: {myblob.name}"
f"Blob Size: {myblob.length} bytes")
@app.blob_trigger(arg_name="myblob", path="sample-workitems/temp",
connection="4931ba_STORAGE")
def temp_triggered(myblob: func.InputStream):
# is not triggered when a blob enters `sample-workitems/temp`
logging.info(f"Python blob trigger function processed blob"
f"Name: {myblob.name}"
f"Blob Size: {myblob.length} bytes")
Hi @felipewhitaker
Thanks for raising this issue! However, I don't see what's the problem of Azurite in this issue.
If you need Azurite support, would you please Share the Azurite version, Azurite debug log, the expected Azurite behavior.
Hi @blueww ,
I thought this would be the best place to raise this issue, but I sincerely do not know whether this is a problem with Azurite or some other component related to developing Azure Functions.
The problem is that the trigger does not work when watching temp/ folder, as the example above:
@app.blob_trigger(arg_name="myblob", path="sample-workitems",
connection="4931ba_STORAGE")
def blob_triggered(myblob: func.InputStream):
# is triggered both for new blobs in `sample-workitems` and
# `sample-workitems/temp`
...
@app.blob_trigger(arg_name="myblob", path="sample-workitems/temp",
connection="4931ba_STORAGE")
def temp_triggered(myblob: func.InputStream):
# is not triggered when a blob enters `sample-workitems/temp`
...
Azurite version: VS Code extension 3.33.0 Expected behavior: be correctly triggered
0 Starting Session:
{
"name": "Attach to Python Functions",
"type": "debugpy",
"request": "attach",
"connect": {
"host": "localhost",
"port": 9091
},
"logToFile": true,
"preLaunchTask": "func: host start",
"__configurationTarget": 6,
"clientOS": "windows",
"debugOptions": [
"RedirectOutput",
"ShowReturnValue"
],
"justMyCode": true,
"showReturnValue": true,
"workspaceFolder": "\\azurite"
}
4 Client <-- Adapter:
{
"seq": 1,
"type": "event",
"event": "output",
"body": {
"category": "telemetry",
"output": "ptvsd",
"data": {
"packageVersion": "1.8.12"
}
}
}
5 Client <-- Adapter:
{
"seq": 2,
"type": "event",
"event": "output",
"body": {
"category": "telemetry",
"output": "debugpy",
"data": {
"packageVersion": "1.8.12"
}
}
}
10 Client --> Adapter:
{
"command": "initialize",
"arguments": {
"clientID": "vscode",
"clientName": "Visual Studio Code",
"adapterID": "debugpy",
"pathFormat": "path",
"linesStartAt1": true,
"columnsStartAt1": true,
"supportsVariableType": true,
"supportsVariablePaging": true,
"supportsRunInTerminalRequest": true,
"locale": "en",
"supportsProgressReporting": true,
"supportsInvalidatedEvent": true,
"supportsMemoryReferences": true,
"supportsArgsCanBeInterpretedByShell": true,
"supportsMemoryEvent": true,
"supportsStartDebuggingRequest": true,
"supportsANSIStyling": true
},
"type": "request",
"seq": 1
}
13 Client <-- Adapter:
{
"seq": 3,
"type": "response",
"request_seq": 1,
"success": true,
"command": "initialize",
"body": {
"supportsCompletionsRequest": true,
"supportsConditionalBreakpoints": true,
"supportsConfigurationDoneRequest": true,
"supportsDebuggerProperties": true,
"supportsDelayedStackTraceLoading": true,
"supportsEvaluateForHovers": true,
"supportsExceptionInfoRequest": true,
"supportsExceptionOptions": true,
"supportsFunctionBreakpoints": true,
"supportsHitConditionalBreakpoints": true,
"supportsLogPoints": true,
"supportsModulesRequest": true,
"supportsSetExpression": true,
"supportsSetVariable": true,
"supportsValueFormattingOptions": true,
"supportsTerminateRequest": true,
"supportsGotoTargetsRequest": true,
"supportsClipboardContext": true,
"exceptionBreakpointFilters": [
{
"filter": "raised",
"label": "Raised Exceptions",
"default": false,
"description": "Break whenever any exception is raised."
},
{
"filter": "uncaught",
"label": "Uncaught Exceptions",
"default": true,
"description": "Break when the process is exiting due to unhandled exception."
},
{
"filter": "userUnhandled",
"label": "User Uncaught Exceptions",
"default": false,
"description": "Break when exception escapes into library code."
}
],
"supportsStepInTargetsRequest": true
}
}
14 Client --> Adapter:
{
"command": "attach",
"arguments": {
"name": "Attach to Python Functions",
"type": "debugpy",
"request": "attach",
"connect": {
"host": "localhost",
"port": 9091
},
"logToFile": true,
"preLaunchTask": "func: host start",
"__configurationTarget": 6,
"clientOS": "windows",
"debugOptions": [
"RedirectOutput",
"ShowReturnValue"
],
"justMyCode": true,
"showReturnValue": true,
"workspaceFolder": "\\azurite",
"__sessionId": "fbe2ed6e-1849-4096-a62f-53ac2a80437e"
},
"type": "request",
"seq": 2
}
15 Client <-- Adapter:
{
"seq": 4,
"type": "event",
"event": "debugpyWaitingForServer",
"body": {
"host": "127.0.0.1",
"port": 51863
}
}
165 Client <-- Adapter:
{
"seq": 5,
"type": "response",
"request_seq": 2,
"success": false,
"command": "attach",
"message": "Server[pid=24812] is already being debugged."
}
166 Client --> Adapter:
{
"command": "disconnect",
"arguments": {
"restart": false
},
"type": "request",
"seq": 3
}
168 Client <-- Adapter:
{
"seq": 6,
"type": "event",
"event": "terminated"
}
168 Client <-- Adapter:
{
"seq": 7,
"type": "response",
"request_seq": 3,
"success": true,
"command": "disconnect"
}
171 Stopping Session
174 Error:
{}
Not sure what's the blob_trigger called rest API. So would you like to first get what's the rest API and server responds difference caused the "trigger does not work when watching temp/ folder", then we can see is this an Azurite issue. You might can contact the team who owns blob_trigger first.