You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
zhongjin 53de9c6c51
first commit
1 year ago
..
leader first commit 1 year ago
maintenance first commit 1 year ago
models first commit 1 year ago
pubsub first commit 1 year ago
scheduler first commit 1 year ago
util first commit 1 year ago
README.md first commit 1 year ago
batch-logger.js first commit 1 year ago
batch.js first commit 1 year ago
index.js first commit 1 year ago
job_backend.js first commit 1 year ago
job_canceller.js first commit 1 year ago
job_queue.js first commit 1 year ago
job_runner.js first commit 1 year ago
job_service.js first commit 1 year ago
job_status.js first commit 1 year ago
query_runner.js first commit 1 year ago
user_database_metadata_service.js first commit 1 year ago

README.md

Batch Queries

This document describes features from Batch Queries, it also details some internals that might be useful for maintainers and developers.

Redis data structures

Jobs definition

Redis Hash: batch:jobs:{UUID}.

Redis DB: 5.

It stores the job definition, the user, and some metadata like the final status, the failure reason, and so.

Job queues

Redis List: batch:queue:{username}.

Redis DB: 5.

It stores a pending list of jobs per user. It points to a job definition with the {UUID}.

Job notifications

Redis Pub/Sub channel: batch:users.

Redis DB: 0.

In order to notify new jobs, it uses a Pub/Sub channel were the username for the queued job is published.

Job types

Format for the currently supported query types, and what they are missing in terms of features.

Simple

{
    "query": "update ..."
}

Does not support main fallback queries. Ideally it should support something like:

{
    "query": "update ...",
    "onsuccess": "select 'general success fallback'",
    "onerror": "select 'general error fallback'"
}

Multiple

{
    "query": [
        "update ...",
        "select ... into ..."
    ]
}

Does not support main fallback queries. Ideally it should support something like:

{
    "query": [
        "update ...",
        "select ... into ..."
    ],
    "onsuccess": "select 'general success fallback'",
    "onerror": "select 'general error fallback'"
}

Fallback

{
    "query": {
        "query": [
            {
                "query": "select 1",
                "onsuccess": "select 'success fallback query 1'",
                "onerror": "select 'error fallback query 1'"
            },
            {
                "query": "select 2",
                "onerror": "select 'error fallback query 2'"
            }
        ],
        "onsuccess": "select 'general success fallback'",
        "onerror": "select 'general error fallback'"
    }
}

It's weird to have two nested query attributes. Also, it's not possible to mix plain with fallback ones. Ideally it should support something like:

{
    "query": [
        {
            "query": "select 1",
            "onsuccess": "select 'success fallback query 1'",
            "onerror": "select 'error fallback query 1'"
        },
        "select 2"
    ],
    "onsuccess": "select 'general success fallback'",
    "onerror": "select 'general error fallback'"
    }
}

Where you don't need a nested query attribute, it's just an array as in Multiple job type, and you can mix objects and plain queries.