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.
CartoDB-SQL-API/lib/batch
Daniel García Aubert 53f69dd6e4
fix: add cdb-user field to data ingestion and batch queries logs
4 years ago
..
leader fix: be able to run test in development env w/o requiring a different dokerfile image 4 years ago
maintenance fix: be able to run test in development env w/o requiring a different dokerfile image 4 years ago
models Breaking changes: 4 years ago
pubsub Node.js 12 support: 4 years ago
scheduler eslint errors 5 years ago
util Run eslint --fix 5 years ago
README.md fix: be able to run test in development env w/o requiring a different dokerfile image 4 years ago
batch.js fix: add cdb-user field to data ingestion and batch queries logs 4 years ago
index.js Breaking changes: 4 years ago
job-backend.js fix: be able to run test in development env w/o requiring a different dokerfile image 4 years ago
job-canceller.js Eslint errors 5 years ago
job-queue.js fix: be able to run test in development env w/o requiring a different dokerfile image 4 years ago
job-runner.js fix: be able to run test in development env w/o requiring a different dokerfile image 4 years ago
job-service.js Eslint errors 5 years ago
job-status.js Run eslint --fix 5 years ago
query-runner.js eslint errors 5 years ago
user-database-metadata-service.js Run eslint --fix 5 years 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: global.settings.batch_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: global.settings.batch_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.