Skip to content

Command apify run -i fails to load input on 2nd execution due to leftover metadata files #933

@vdusek

Description

@vdusek

Description

  • When running an Apify Actor twice in a row using apify run -i 'some input', the first execution works as expected, but the second one fails to load the input - it returns None.
  • It appears that metadata files from the previous run remain in local storage, preventing the new input from being correctly loaded.

Reproduction

Very simple Python Actor:

import asyncio
from apify import Actor

async def main() -> None:
    async with Actor:
        actor_input = await Actor.get_input()
        Actor.log.info(f'Input: {actor_input}')

if __name__ == '__main__':
    asyncio.run(main())

Execute it twice in a row:

uv run apify run -i '{ "days_reminder_long": 2000, "days_reminder_short": 2000, "days_urgent": 2000 }'
uv run apify run -i '{ "days_reminder_long": 2000, "days_reminder_short": 2000, "days_urgent": 2000 }'

Expected behavior

  • Each run should receive the provided input, regardless of previous executions.

Actual behavior

  • First run works correctly and logs the input.
  • Second run logs Input: None.
  • It seems that leftover metadata files from the first run are not cleared and interfere with input loading.

Root cause and potential fix

  • The SDK creates a metadata file for each INPUT file:
    • If the CLI creates INPUT.json, the SDK creates INPUT.json.__metadata__.json.
    • If a user manually creates an INPUT file (without extension), the SDK creates INPUT.__metadata__.json.
  • The problem: when the CLI detects an existing INPUT.json.__metadata__.json, it skips creating INPUT.json silently, resulting in a missing input and None being returned.

Additional context

  • Related Slack discussion: link

Metadata

Metadata

Assignees

Labels

bugSomething isn't working.t-dxIssues owned by the DX team.

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions