Skip to content

Managed Parameters #58

@fubuloubu

Description

@fubuloubu

Overview

When designing a Silverback app, it is typically very useful to design parameterization into the logic of the app so that you can adjust this behavior. We should have a deeper integration for updating and managing these parameters, both when running live or when starting/restarting the app in a cloud environment.

Specification

We need some way for a user to describe a parameter, and add a method for it to get added to state, so that all worker tasks can see the parameter update:

@app.parameter("something", int, lower_limit=200)  # or `upper_limit=`, defaults to None
def handle_parameter(value, state):
    # NOTE: Raises if not using the same parameter name above
    state.something = value  # or, could generate a more complex handler
    # no return, but task handle will automatically return the update 

# OR, more simply:

app.add_parameter("something", int, lower_limit=...)
# basically the same as above, no ability to handle it specially

After this is done, the parameter becomes a part of both the App's environment variables (e.g. SILVERBACK_APP_something=...) as well as accepts updates triggered by the platform or management dashboard for the app (see #39)

Lastly, when accepting parameter updates, it should be possible to accept a batch of updates and process them at the same time, scheduling the tasks to take effect all before any other tasks are allowed to proceed using the new variables (all updates are atomic when batched)

Dependencies

No dependencies

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions