wmcoredb


Namewmcoredb JSON
Version 0.9.3 PyPI version JSON
download
home_pageNone
SummaryWMCore Database Schema - Database schema definitions for WMCore components
upload_time2025-07-18 03:30:02
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseNone
keywords database schema wmcore oracle mariadb cms workload-management
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            [![SQL Linting](https://github.com/dmwm/wmcoredb/actions/workflows/sql-lint.yml/badge.svg)](https://github.com/dmwm/wmcoredb/actions/workflows/sql-lint.yml)
[![MariaDB Schema Validation](https://github.com/dmwm/wmcoredb/actions/workflows/mariadb-schema-test.yml/badge.svg)](https://github.com/dmwm/wmcoredb/actions/workflows/mariadb-schema-test.yml)
[![Oracle Schema Validation](https://github.com/dmwm/wmcoredb/actions/workflows/oracle-schema-test.yml/badge.svg)](https://github.com/dmwm/wmcoredb/actions/workflows/oracle-schema-test.yml)
[![Test Package Build](https://github.com/dmwm/wmcoredb/actions/workflows/test-build.yml/badge.svg)](https://github.com/dmwm/wmcoredb/actions/workflows/test-build.yml)
[![Release to PyPI](https://github.com/dmwm/wmcoredb/actions/workflows/release.yml/badge.svg)](https://github.com/dmwm/wmcoredb/actions/workflows/release.yml)
[![PyPI](https://img.shields.io/pypi/v/wmcoredb.svg)](https://pypi.org/project/wmcoredb/)

# WMCore Database Schema

Database schema definitions for WMCore components, including both MariaDB and Oracle backends.

WMBS (Workload Management Bookkeeping Service) provides the database schema for managing 
workloads and jobs.

## Python Package

This repository is also available as a Python package on PyPI:

```bash
pip install wmcoredb
```

### Usage

The package provides utility functions to easily locate and access SQL schema files:

```python
import wmcoredb

# Get the path to a specific SQL file
file_path = wmcoredb.get_sql_file("wmbs", "create_wmbs_tables.sql", "mariadb")

# Get the content of a SQL file
sql_content = wmcoredb.get_sql_content("wmbs", "create_wmbs_tables.sql", "mariadb")

# List available modules
modules = wmcoredb.list_modules("mariadb")  # ['agent', 'bossair', 'dbs3buffer', 'resourcecontrol', 'testdb', 'wmbs']

# List SQL files in a module
sql_files = wmcoredb.list_sql_files("wmbs", "mariadb")  # ['create_wmbs_indexes.sql', 'create_wmbs_tables.sql', 'initial_wmbs_data.sql']

# List available backends
backends = wmcoredb.list_backends()  # ['mariadb', 'oracle']
```

### API Reference

- `get_sql_file(module_name, file_name, backend="mariadb")` - Get file path
- `get_sql_content(module_name, file_name, backend="mariadb")` - Get file content
- `list_sql_files(module_name=None, backend="mariadb")` - List SQL files
- `list_modules(backend="mariadb")` - List available modules
- `list_backends()` - List available backends

## Development

For local development and testing:

```bash
# Build the package
python -m build

# Install locally for testing
pip install dist/wmcoredb-*.whl

# Test the package functionality
python -c "import wmcoredb; print(wmcoredb.list_backends())"
```

## CI/CD Pipeline

The continuous integration pipeline is split into five workflows:

### SQL Linting
Validates SQL syntax and formatting using SQLFluff:
* MariaDB files using default SQLFluff rules
* Oracle files using custom rules defined in `.sqlfluff.oracle`
* Enforces consistent SQL style and formatting
* Runs on every push and pull request

### MariaDB Schema Validation
Automatically tests schema deployment in MariaDB:
* Runs only after successful linting
* Tests against multiple MariaDB versions:
  - 10.6 (LTS)
  - 10.11 (LTS)
  - 11.4 (Latest)
* Deploys and validates:
  - TestDB Schema
  - WMBS Schema
  - Agent Schema
  - DBS3Buffer Schema
  - BossAir Schema
  - ResourceControl Schema
* Verifies table structures and relationships
* Checks for any critical database errors

### Oracle Schema Validation
Tests schema deployment in Oracle:
* Runs only after successful linting
* Uses Oracle XE 18.4.0-slim container
* Deploys and validates the same schemas as the MariaDB workflow:
  - TestDB Schema
  - WMBS Schema (tables, indexes, and initial data)
  - Tier0 Schema (tables, indexes, functions, and initial data)
  - Agent Schema
  - DBS3Buffer Schema
  - BossAir Schema
  - ResourceControl Schema
* Comprehensive verification steps:
  - Table structure validation
  - Index creation and type verification
  - Foreign key relationship checks
  - Initial data population verification
  - Cross-database compatibility with MariaDB
* Includes proper error handling and cleanup procedures
* Uses SQL*Plus for schema deployment and verification

### Test Package Build
Validates the Python package build process:
* Builds the package using modern Python packaging tools
* Tests package installation and import functionality
* Verifies SQL file accessibility through the package API
* Runs on every push and pull request

### Release to PyPI
Automatically publishes releases to PyPI:
* Triggers on git tags (e.g., `1.0.0`)
* Updates version in `pyproject.toml` during build
* Publishes to PyPI with proper metadata
* Creates GitHub releases with changelog

## Directory Structure

The database schema files are organized as follows:

```
project_root/
├── src/
│   └── wmcoredb/         # Python package
│       ├── __init__.py   # Package API functions
│       └── sql/          # Database schema files
│           ├── oracle/    # Oracle-specific SQL files
│           │   ├── wmbs/     # WMBS schema definitions
│           │   │   ├── create_wmbs_tables.sql     # Table definitions with constraints
│           │   │   ├── create_wmbs_indexes.sql    # Index definitions
│           │   │   └── initial_wmbs_data.sql      # Static data for some tables
│           │   ├── agent/    # WMCore.Agent.Database schema
│           │   ├── bossair/  # WMCore.BossAir schema
│           │   ├── dbs3buffer/ # WMComponent.DBS3Buffer schema
│           │   ├── resourcecontrol/ # WMCore.ResourceControl schema
│           │   ├── testdb/   # WMQuality.TestDB schema
│           │   └── tier0/    # Tier0 schema definitions
│           │       ├── create_tier0_tables.sql    # Table definitions with constraints
│           │       ├── create_tier0_indexes.sql   # Index definitions
│           │       ├── create_tier0_functions.sql # Helper functions
│           │       └── initial_tier0_data.sql     # Initial data for Tier0 tables
│           └── mariadb/  # MariaDB-specific SQL files
│               ├── wmbs/     # WMBS schema definitions
│               │   ├── create_wmbs_tables.sql     # Table definitions with constraints
│               │   ├── create_wmbs_indexes.sql    # Index definitions
│               │   └── initial_wmbs_data.sql      # Static data for some tables
│               ├── agent/    # WMCore.Agent.Database schema
│               ├── bossair/  # WMCore.BossAir schema
│               ├── dbs3buffer/ # WMComponent.DBS3Buffer schema
│               ├── resourcecontrol/ # WMCore.ResourceControl schema
│               ├── testdb/   # WMQuality.TestDB schema
│               └── tier0/    # Tier0 schema definitions
└── src/python/           # Schema generation code (not included in package)
    └── db/               # Legacy schema generation code
        ├── wmbs/
        ├── agent/
        ├── bossair/
        ├── dbs3buffer/
        ├── resourcecontrol/
        └── testdb/
        └── execute_wmbs_sql.py
```

## Schema Components

The WMAgent database schema consists of several components:
1. **WMBS** (`src/wmcoredb/sql/{oracle,mariadb}/wmbs/`)
   - Core workload and job management
   - Tables for jobs, subscriptions, and file tracking
   - Initial data for job states and subscription types

2. **Agent Database** (`src/wmcoredb/sql/{oracle,mariadb}/agent/`)
   - Core agent functionality
   - Component and worker management

3. **BossAir** (`src/wmcoredb/sql/{oracle,mariadb}/bossair/`)
   - Job submission and tracking
   - Grid and batch system integration

4. **DBS3Buffer** (`src/wmcoredb/sql/{oracle,mariadb}/dbs3buffer/`)
   - Dataset and file management
   - Checksum and location tracking

5. **ResourceControl** (`src/wmcoredb/sql/{oracle,mariadb}/resourcecontrol/`)
   - Site and resource management
   - Threshold control

6. **Test Database** (`src/wmcoredb/sql/{oracle,mariadb}/testdb/`)
   - Simple test tables for database validation
   - Used for testing database connectivity and basic operations
   - Includes tables with different data types and constraints
   - Available for both Oracle and MariaDB backends

7. **Tier0 Schema** (`src/wmcoredb/sql/{oracle,mariadb}/tier0/`)
   - Run management and tracking
   - Stream and dataset associations
   - Lumi section processing
   - Configuration management
   - Workflow monitoring
   - Available only for Oracle

## WMBS Schema Initialization

The WMBS schema is initialized first and consists of three files:

```
src/wmcoredb/sql/{oracle,mariadb}/wmbs/
├── create_wmbs_tables.sql   # Core WMBS tables
├── create_wmbs_indexes.sql  # Indexes for performance
└── initial_wmbs_data.sql    # Initial data for job states
```

These files are executed in order by `execute_wmbs_sql.py` to set up the base WMBS schema before other components are initialized.

## Database Backend Support

The schema supports two database backends:

- **Oracle** (`src/wmcoredb/sql/oracle/`)
  - Uses `NUMBER(11)` for integers
  - Uses `VARCHAR2` strings
  - Uses `GENERATED BY DEFAULT AS IDENTITY` for auto-increment
  - Includes sequences and functions where needed
  - Uses slash (/) as statement terminator for DDL statements (CREATE TABLE, CREATE INDEX)
  - Uses both semicolon (;) and slash (/) for PL/SQL blocks (functions, procedures, packages)
    - Semicolon terminates the PL/SQL block
    - Slash executes the block

- **MariaDB** (`src/wmcoredb/sql/mariadb/`)
  - Uses `INT` for integers
  - Uses `VARCHAR` for strings
  - Uses `AUTO_INCREMENT` for auto-increment
  - Uses `ENGINE=InnoDB ROW_FORMAT=DYNAMIC`
  - Includes equivalent functionality without sequences

## Database Compatibility

The SQL files are designed to be compatible with:

### MariaDB
- 10.6 (LTS)
- 10.11 (LTS)
- 11.4 (Latest)

### Oracle
- Oracle XE 18.4.0-slim container
- Oracle 19c

The CI pipeline automatically tests schema deployment against these versions to ensure compatibility.

## Database Documentation

For detailed database documentation, including Entity Relationship Diagrams (ERD), schema initialization flows, and module-specific diagrams, please refer to the [diagrams documentation](diagrams/README.md).

## Contributing

Please read [CONTRIBUTING.md](CONTRIBUTING.md) for details on our code of conduct and the process for submitting pull requests.

## Usage

### Using the Python Package

The recommended way to access SQL files is through the Python package:

```python
import wmcoredb

# Get SQL content for Oracle WMBS tables
sql_content = wmcoredb.get_sql_content("wmbs", "create_wmbs_tables.sql", "oracle")

# List all available modules for MariaDB
modules = wmcoredb.list_modules("mariadb")

# Get all SQL files for a specific module
files = wmcoredb.list_sql_files("tier0", "oracle")
```

### Direct File Access

To create the database schema directly from SQL files:

#### For Oracle:
```sql
@src/wmcoredb/sql/oracle/testdb/create_testdb.sql
@src/wmcoredb/sql/oracle/tier0/create_tier0_tables.sql
@src/wmcoredb/sql/oracle/tier0/create_tier0_indexes.sql
@src/wmcoredb/sql/oracle/tier0/create_tier0_functions.sql
@src/wmcoredb/sql/oracle/tier0/initial_tier0_data.sql
@src/wmcoredb/sql/oracle/wmbs/create_wmbs_tables.sql
@src/wmcoredb/sql/oracle/wmbs/create_wmbs_indexes.sql
@src/wmcoredb/sql/oracle/wmbs/initial_wmbs_data.sql
```

#### For MariaDB:
```sql
source src/wmcoredb/sql/mariadb/testdb/create_testdb.sql
source src/wmcoredb/sql/mariadb/tier0/create_tier0_tables.sql
source src/wmcoredb/sql/mariadb/tier0/create_tier0_indexes.sql
source src/wmcoredb/sql/mariadb/tier0/create_tier0_functions.sql
source src/wmcoredb/sql/mariadb/tier0/initial_tier0_data.sql
source src/wmcoredb/sql/mariadb/wmbs/create_wmbs_tables.sql
source src/wmcoredb/sql/mariadb/wmbs/create_wmbs_indexes.sql
source src/wmcoredb/sql/mariadb/wmbs/initial_wmbs_data.sql
```

## Schema Generation

The SQL schema files are generated from Python code in `src/python/db/` (not included in the package). Each component has its own schema generation code:

```python
from WMCore.Database.DBCreator import DBCreator

class Create(DBCreator):
    def __init__(self, logger=None, dbi=None, params=None):
        # Schema definition in Python
```

The schema files can be executed using `execute_wmbs_sql.py`, which handles:
- Database backend detection
- Schema file location
- Transaction management
- Error handling

**Note:** The schema generation code in `src/python/db/` is for reference only and is not included in the PyPI package. The package only contains the final SQL files in `src/wmcoredb/sql/`.

## Package Testing

To test the package functionality locally:

```bash
# Build the package
python -m build

# Install locally
pip install dist/wmcoredb-*.whl

# Test basic functionality
python -c
import wmcoredb
print('Backends:', wmcoredb.list_backends())
print('MariaDB modules:', wmcoredb.list_modules('mariadb'))
print(Oracle modules:', wmcoredb.list_modules(oracle'))
print(WMBS files:, wmcoredb.list_sql_files('wmbs, 'mariadb'))
"

# Test SQL content access
python -c
import wmcoredb
content = wmcoredb.get_sql_content('testdb', create_testdb.sql', mariadb')
print(TestDB SQL length:', len(content))
"
```

## Logs

Some relevant logs from the WMAgent 2.3.9 installation:
```
Start: Performing init_agent
init_agent: triggered.
Initializing WMAgent...
init_wmagent: MYSQL database: wmagent has been created
DEBUG:root:Log file ready
DEBUG:root:Using SQLAlchemy v0.10.54INFO:root:Instantiating base WM DBInterface
DEBUG:root:Tables for WMCore.WMBS created
DEBUG:root:Tables for WMCore.Agent.Database created
DEBUG:root:Tables for WMComponent.DBS3Buffer created
DEBUG:root:Tables for WMCore.BossAir created
DEBUG:root:Tables for WMCore.ResourceControl created
checking default database connection
default database connection tested
...
_sql_write_agentid: Preserving the current WMA_BUILD_ID and HostName at database: wmagent.
_sql_write_agentid: Creating wma_init table at database: wmagent
_sql_write_agentid: Inserting current Agent's build id and hostname at database: wmagent
_sql_dumpSchema: Dumping the current SQL schema of database: wmagent to /data/srv/wmagent/2.3.9/config/.wmaSchemaFile.sql
Done: Performing init_agent
```
## WMAgent DB Initialization

It starts in the CMSKubernetes [init.sh](https://github.com/dmwm/CMSKubernetes/blob/master/docker/pypi/wmagent/init.sh#L465pt, which executes `init_agent()` method from the CMSKubernetes [manage](https://github.com/dmwm/CMSKubernetes/blob/master/docker/pypi/wmagent/bin/manage#L112) script.

The database optios are enriched dependent on the database flavor, such as:
```bash
    case $AGENT_FLAVOR inmysql')
            _exec_mysql "create database if not exists $wmaDBName"
            local database_options=--mysql_url=mysql://$MDB_USER:$MDB_PASS@$MDB_HOST/$wmaDBNameoracle')
            local database_options="--coredb_url=oracle://$ORACLE_USER:$ORACLE_PASS@$ORACLE_TNS "
```

It then executes WMCore code, calling a script called [wmagent-mod-config](https://github.com/dmwm/WMCore/blob/master/bin/wmagent-mod-config).

with command line arguments like:
```bash
    wmagent-mod-config $database_options \
                       --input=$WMA_CONFIG_DIR/config-template.py \
                       --output=$WMA_CONFIG_DIR/config.py \
```

which internally parses the command line arguments into `parameters` and modifies the standardWMAgentConfig.py](https://github.com/dmwm/WMCore/blob/master/etc/WMAgentConfig.py), saving it out as the new WMAgent configuration file, with something like:
```
    cfg = modifyConfiguration(cfg, **parameters)
    saveConfiguration(cfg, outputFile)
```

With the WMAgent configuration file properly updated, named `config.py`, now the `manage` script calls [wmcore-db-init](https://github.com/dmwm/WMCore/blob/master/bin/wmcore-db-init), with arguments like:

```bash
wmcore-db-init --config $WMA_CONFIG_DIR/config.py --create --modules=WMCore.WMBS,WMCore.Agent.Database,WMComponent.DBS3Buffer,WMCore.BossAir,WMCore.ResourceControl;
```

This `wmcore-db-init` script itself calls the [WMInit.py](https://github.com/dmwm/WMCore/blob/master/src/python/WMCore/WMInit.py) script, executing basically the next four commands:
```python
wmInit = WMInit()
wmInit.setLogging('wmcoreD', 'wmcoreD', logExists=False, logLevel=logging.DEBUG)
wmInit.setDatabaseConnection(dbConfig=config.CoreDatabase.connectUrl, dialect=dialect, socketLoc=socket)
wmInit.setSchema(modules, params=params)
```

In summary, the WMAgent database schema is an aggregation of the schema defined under each of the following WMAgent python directories:
```
WMCore.WMBS             --> originally under src/python/db/wmbs
WMCore.Agent.Database   --> originally under src/python/db/agent
WMCore.BossAir          --> originally under src/python/db/bossair
WMCore.ResourceControl  --> originally under src/python/db/resourcecontrol
WMComponent.DBS3Buffer  --> originally under src/python/db/dbs3buffer
```

## Tier0 Schema

The Tier0 schema is designed to support the Tier0 data processing system. It includes tables for:

- Run management and tracking
- Stream and dataset associations
- Lumi section processing
- Configuration management
- Workflow monitoring

### Oracle Implementation

The Oracle implementation uses modern features like:
- IDENTITY columns for auto-incrementing IDs
- Inline foreign key constraints
- Organization index tables for performance
- Deterministic functions for state validation

The schema initialization includes:
- Table definitions with constraints
- Index definitions for performance
- Helper functions for state validation
- Initial data for run states, processing styles, and event scenarios

### MariaDB Implementation

The MariaDB implementation provides equivalent functionality using:
- INT and DECIMAL for numeric columns
- VARCHAR for string columns
- InnoDB engine specification
- Compatible comment syntax
- Auto-incrementing primary keys

## Test Database Schema

The Test Database schema provides a simple set of tables for testing database connectivity and basic operations. It includes:

- Tables with different data types (INT, VARCHAR, DECIMAL)
- Primary key constraints
- Table and column comments
- Cross-database compatibility

### Oracle Implementation

The Oracle implementation uses:
- NUMBER for numeric columns
- VARCHAR2 for string columns
- Table and column comments
- Primary key constraints

### MariaDB Implementation

The MariaDB implementation provides equivalent functionality using:
- INT and DECIMAL for numeric columns
- VARCHAR for string columns
- InnoDB engine specification
- Compatible comment syntax

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "wmcoredb",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": "WMCore Team <cms-wmcore-team@cern.ch>",
    "keywords": "database, schema, wmcore, oracle, mariadb, cms, workload-management",
    "author": null,
    "author_email": "WMCore Team <cms-wmcore-team@cern.ch>",
    "download_url": "https://files.pythonhosted.org/packages/83/4c/fae6ad52540b4ceaf1ef3bf939b9854251b734231754b7d825df903a9f57/wmcoredb-0.9.3.tar.gz",
    "platform": null,
    "description": "[![SQL Linting](https://github.com/dmwm/wmcoredb/actions/workflows/sql-lint.yml/badge.svg)](https://github.com/dmwm/wmcoredb/actions/workflows/sql-lint.yml)\n[![MariaDB Schema Validation](https://github.com/dmwm/wmcoredb/actions/workflows/mariadb-schema-test.yml/badge.svg)](https://github.com/dmwm/wmcoredb/actions/workflows/mariadb-schema-test.yml)\n[![Oracle Schema Validation](https://github.com/dmwm/wmcoredb/actions/workflows/oracle-schema-test.yml/badge.svg)](https://github.com/dmwm/wmcoredb/actions/workflows/oracle-schema-test.yml)\n[![Test Package Build](https://github.com/dmwm/wmcoredb/actions/workflows/test-build.yml/badge.svg)](https://github.com/dmwm/wmcoredb/actions/workflows/test-build.yml)\n[![Release to PyPI](https://github.com/dmwm/wmcoredb/actions/workflows/release.yml/badge.svg)](https://github.com/dmwm/wmcoredb/actions/workflows/release.yml)\n[![PyPI](https://img.shields.io/pypi/v/wmcoredb.svg)](https://pypi.org/project/wmcoredb/)\n\n# WMCore Database Schema\n\nDatabase schema definitions for WMCore components, including both MariaDB and Oracle backends.\n\nWMBS (Workload Management Bookkeeping Service) provides the database schema for managing \nworkloads and jobs.\n\n## Python Package\n\nThis repository is also available as a Python package on PyPI:\n\n```bash\npip install wmcoredb\n```\n\n### Usage\n\nThe package provides utility functions to easily locate and access SQL schema files:\n\n```python\nimport wmcoredb\n\n# Get the path to a specific SQL file\nfile_path = wmcoredb.get_sql_file(\"wmbs\", \"create_wmbs_tables.sql\", \"mariadb\")\n\n# Get the content of a SQL file\nsql_content = wmcoredb.get_sql_content(\"wmbs\", \"create_wmbs_tables.sql\", \"mariadb\")\n\n# List available modules\nmodules = wmcoredb.list_modules(\"mariadb\")  # ['agent', 'bossair', 'dbs3buffer', 'resourcecontrol', 'testdb', 'wmbs']\n\n# List SQL files in a module\nsql_files = wmcoredb.list_sql_files(\"wmbs\", \"mariadb\")  # ['create_wmbs_indexes.sql', 'create_wmbs_tables.sql', 'initial_wmbs_data.sql']\n\n# List available backends\nbackends = wmcoredb.list_backends()  # ['mariadb', 'oracle']\n```\n\n### API Reference\n\n- `get_sql_file(module_name, file_name, backend=\"mariadb\")` - Get file path\n- `get_sql_content(module_name, file_name, backend=\"mariadb\")` - Get file content\n- `list_sql_files(module_name=None, backend=\"mariadb\")` - List SQL files\n- `list_modules(backend=\"mariadb\")` - List available modules\n- `list_backends()` - List available backends\n\n## Development\n\nFor local development and testing:\n\n```bash\n# Build the package\npython -m build\n\n# Install locally for testing\npip install dist/wmcoredb-*.whl\n\n# Test the package functionality\npython -c \"import wmcoredb; print(wmcoredb.list_backends())\"\n```\n\n## CI/CD Pipeline\n\nThe continuous integration pipeline is split into five workflows:\n\n### SQL Linting\nValidates SQL syntax and formatting using SQLFluff:\n* MariaDB files using default SQLFluff rules\n* Oracle files using custom rules defined in `.sqlfluff.oracle`\n* Enforces consistent SQL style and formatting\n* Runs on every push and pull request\n\n### MariaDB Schema Validation\nAutomatically tests schema deployment in MariaDB:\n* Runs only after successful linting\n* Tests against multiple MariaDB versions:\n  - 10.6 (LTS)\n  - 10.11 (LTS)\n  - 11.4 (Latest)\n* Deploys and validates:\n  - TestDB Schema\n  - WMBS Schema\n  - Agent Schema\n  - DBS3Buffer Schema\n  - BossAir Schema\n  - ResourceControl Schema\n* Verifies table structures and relationships\n* Checks for any critical database errors\n\n### Oracle Schema Validation\nTests schema deployment in Oracle:\n* Runs only after successful linting\n* Uses Oracle XE 18.4.0-slim container\n* Deploys and validates the same schemas as the MariaDB workflow:\n  - TestDB Schema\n  - WMBS Schema (tables, indexes, and initial data)\n  - Tier0 Schema (tables, indexes, functions, and initial data)\n  - Agent Schema\n  - DBS3Buffer Schema\n  - BossAir Schema\n  - ResourceControl Schema\n* Comprehensive verification steps:\n  - Table structure validation\n  - Index creation and type verification\n  - Foreign key relationship checks\n  - Initial data population verification\n  - Cross-database compatibility with MariaDB\n* Includes proper error handling and cleanup procedures\n* Uses SQL*Plus for schema deployment and verification\n\n### Test Package Build\nValidates the Python package build process:\n* Builds the package using modern Python packaging tools\n* Tests package installation and import functionality\n* Verifies SQL file accessibility through the package API\n* Runs on every push and pull request\n\n### Release to PyPI\nAutomatically publishes releases to PyPI:\n* Triggers on git tags (e.g., `1.0.0`)\n* Updates version in `pyproject.toml` during build\n* Publishes to PyPI with proper metadata\n* Creates GitHub releases with changelog\n\n## Directory Structure\n\nThe database schema files are organized as follows:\n\n```\nproject_root/\n\u251c\u2500\u2500 src/\n\u2502   \u2514\u2500\u2500 wmcoredb/         # Python package\n\u2502       \u251c\u2500\u2500 __init__.py   # Package API functions\n\u2502       \u2514\u2500\u2500 sql/          # Database schema files\n\u2502           \u251c\u2500\u2500 oracle/    # Oracle-specific SQL files\n\u2502           \u2502   \u251c\u2500\u2500 wmbs/     # WMBS schema definitions\n\u2502           \u2502   \u2502   \u251c\u2500\u2500 create_wmbs_tables.sql     # Table definitions with constraints\n\u2502           \u2502   \u2502   \u251c\u2500\u2500 create_wmbs_indexes.sql    # Index definitions\n\u2502           \u2502   \u2502   \u2514\u2500\u2500 initial_wmbs_data.sql      # Static data for some tables\n\u2502           \u2502   \u251c\u2500\u2500 agent/    # WMCore.Agent.Database schema\n\u2502           \u2502   \u251c\u2500\u2500 bossair/  # WMCore.BossAir schema\n\u2502           \u2502   \u251c\u2500\u2500 dbs3buffer/ # WMComponent.DBS3Buffer schema\n\u2502           \u2502   \u251c\u2500\u2500 resourcecontrol/ # WMCore.ResourceControl schema\n\u2502           \u2502   \u251c\u2500\u2500 testdb/   # WMQuality.TestDB schema\n\u2502           \u2502   \u2514\u2500\u2500 tier0/    # Tier0 schema definitions\n\u2502           \u2502       \u251c\u2500\u2500 create_tier0_tables.sql    # Table definitions with constraints\n\u2502           \u2502       \u251c\u2500\u2500 create_tier0_indexes.sql   # Index definitions\n\u2502           \u2502       \u251c\u2500\u2500 create_tier0_functions.sql # Helper functions\n\u2502           \u2502       \u2514\u2500\u2500 initial_tier0_data.sql     # Initial data for Tier0 tables\n\u2502           \u2514\u2500\u2500 mariadb/  # MariaDB-specific SQL files\n\u2502               \u251c\u2500\u2500 wmbs/     # WMBS schema definitions\n\u2502               \u2502   \u251c\u2500\u2500 create_wmbs_tables.sql     # Table definitions with constraints\n\u2502               \u2502   \u251c\u2500\u2500 create_wmbs_indexes.sql    # Index definitions\n\u2502               \u2502   \u2514\u2500\u2500 initial_wmbs_data.sql      # Static data for some tables\n\u2502               \u251c\u2500\u2500 agent/    # WMCore.Agent.Database schema\n\u2502               \u251c\u2500\u2500 bossair/  # WMCore.BossAir schema\n\u2502               \u251c\u2500\u2500 dbs3buffer/ # WMComponent.DBS3Buffer schema\n\u2502               \u251c\u2500\u2500 resourcecontrol/ # WMCore.ResourceControl schema\n\u2502               \u251c\u2500\u2500 testdb/   # WMQuality.TestDB schema\n\u2502               \u2514\u2500\u2500 tier0/    # Tier0 schema definitions\n\u2514\u2500\u2500 src/python/           # Schema generation code (not included in package)\n    \u2514\u2500\u2500 db/               # Legacy schema generation code\n        \u251c\u2500\u2500 wmbs/\n        \u251c\u2500\u2500 agent/\n        \u251c\u2500\u2500 bossair/\n        \u251c\u2500\u2500 dbs3buffer/\n        \u251c\u2500\u2500 resourcecontrol/\n        \u2514\u2500\u2500 testdb/\n        \u2514\u2500\u2500 execute_wmbs_sql.py\n```\n\n## Schema Components\n\nThe WMAgent database schema consists of several components:\n1. **WMBS** (`src/wmcoredb/sql/{oracle,mariadb}/wmbs/`)\n   - Core workload and job management\n   - Tables for jobs, subscriptions, and file tracking\n   - Initial data for job states and subscription types\n\n2. **Agent Database** (`src/wmcoredb/sql/{oracle,mariadb}/agent/`)\n   - Core agent functionality\n   - Component and worker management\n\n3. **BossAir** (`src/wmcoredb/sql/{oracle,mariadb}/bossair/`)\n   - Job submission and tracking\n   - Grid and batch system integration\n\n4. **DBS3Buffer** (`src/wmcoredb/sql/{oracle,mariadb}/dbs3buffer/`)\n   - Dataset and file management\n   - Checksum and location tracking\n\n5. **ResourceControl** (`src/wmcoredb/sql/{oracle,mariadb}/resourcecontrol/`)\n   - Site and resource management\n   - Threshold control\n\n6. **Test Database** (`src/wmcoredb/sql/{oracle,mariadb}/testdb/`)\n   - Simple test tables for database validation\n   - Used for testing database connectivity and basic operations\n   - Includes tables with different data types and constraints\n   - Available for both Oracle and MariaDB backends\n\n7. **Tier0 Schema** (`src/wmcoredb/sql/{oracle,mariadb}/tier0/`)\n   - Run management and tracking\n   - Stream and dataset associations\n   - Lumi section processing\n   - Configuration management\n   - Workflow monitoring\n   - Available only for Oracle\n\n## WMBS Schema Initialization\n\nThe WMBS schema is initialized first and consists of three files:\n\n```\nsrc/wmcoredb/sql/{oracle,mariadb}/wmbs/\n\u251c\u2500\u2500 create_wmbs_tables.sql   # Core WMBS tables\n\u251c\u2500\u2500 create_wmbs_indexes.sql  # Indexes for performance\n\u2514\u2500\u2500 initial_wmbs_data.sql    # Initial data for job states\n```\n\nThese files are executed in order by `execute_wmbs_sql.py` to set up the base WMBS schema before other components are initialized.\n\n## Database Backend Support\n\nThe schema supports two database backends:\n\n- **Oracle** (`src/wmcoredb/sql/oracle/`)\n  - Uses `NUMBER(11)` for integers\n  - Uses `VARCHAR2` strings\n  - Uses `GENERATED BY DEFAULT AS IDENTITY` for auto-increment\n  - Includes sequences and functions where needed\n  - Uses slash (/) as statement terminator for DDL statements (CREATE TABLE, CREATE INDEX)\n  - Uses both semicolon (;) and slash (/) for PL/SQL blocks (functions, procedures, packages)\n    - Semicolon terminates the PL/SQL block\n    - Slash executes the block\n\n- **MariaDB** (`src/wmcoredb/sql/mariadb/`)\n  - Uses `INT` for integers\n  - Uses `VARCHAR` for strings\n  - Uses `AUTO_INCREMENT` for auto-increment\n  - Uses `ENGINE=InnoDB ROW_FORMAT=DYNAMIC`\n  - Includes equivalent functionality without sequences\n\n## Database Compatibility\n\nThe SQL files are designed to be compatible with:\n\n### MariaDB\n- 10.6 (LTS)\n- 10.11 (LTS)\n- 11.4 (Latest)\n\n### Oracle\n- Oracle XE 18.4.0-slim container\n- Oracle 19c\n\nThe CI pipeline automatically tests schema deployment against these versions to ensure compatibility.\n\n## Database Documentation\n\nFor detailed database documentation, including Entity Relationship Diagrams (ERD), schema initialization flows, and module-specific diagrams, please refer to the [diagrams documentation](diagrams/README.md).\n\n## Contributing\n\nPlease read [CONTRIBUTING.md](CONTRIBUTING.md) for details on our code of conduct and the process for submitting pull requests.\n\n## Usage\n\n### Using the Python Package\n\nThe recommended way to access SQL files is through the Python package:\n\n```python\nimport wmcoredb\n\n# Get SQL content for Oracle WMBS tables\nsql_content = wmcoredb.get_sql_content(\"wmbs\", \"create_wmbs_tables.sql\", \"oracle\")\n\n# List all available modules for MariaDB\nmodules = wmcoredb.list_modules(\"mariadb\")\n\n# Get all SQL files for a specific module\nfiles = wmcoredb.list_sql_files(\"tier0\", \"oracle\")\n```\n\n### Direct File Access\n\nTo create the database schema directly from SQL files:\n\n#### For Oracle:\n```sql\n@src/wmcoredb/sql/oracle/testdb/create_testdb.sql\n@src/wmcoredb/sql/oracle/tier0/create_tier0_tables.sql\n@src/wmcoredb/sql/oracle/tier0/create_tier0_indexes.sql\n@src/wmcoredb/sql/oracle/tier0/create_tier0_functions.sql\n@src/wmcoredb/sql/oracle/tier0/initial_tier0_data.sql\n@src/wmcoredb/sql/oracle/wmbs/create_wmbs_tables.sql\n@src/wmcoredb/sql/oracle/wmbs/create_wmbs_indexes.sql\n@src/wmcoredb/sql/oracle/wmbs/initial_wmbs_data.sql\n```\n\n#### For MariaDB:\n```sql\nsource src/wmcoredb/sql/mariadb/testdb/create_testdb.sql\nsource src/wmcoredb/sql/mariadb/tier0/create_tier0_tables.sql\nsource src/wmcoredb/sql/mariadb/tier0/create_tier0_indexes.sql\nsource src/wmcoredb/sql/mariadb/tier0/create_tier0_functions.sql\nsource src/wmcoredb/sql/mariadb/tier0/initial_tier0_data.sql\nsource src/wmcoredb/sql/mariadb/wmbs/create_wmbs_tables.sql\nsource src/wmcoredb/sql/mariadb/wmbs/create_wmbs_indexes.sql\nsource src/wmcoredb/sql/mariadb/wmbs/initial_wmbs_data.sql\n```\n\n## Schema Generation\n\nThe SQL schema files are generated from Python code in `src/python/db/` (not included in the package). Each component has its own schema generation code:\n\n```python\nfrom WMCore.Database.DBCreator import DBCreator\n\nclass Create(DBCreator):\n    def __init__(self, logger=None, dbi=None, params=None):\n        # Schema definition in Python\n```\n\nThe schema files can be executed using `execute_wmbs_sql.py`, which handles:\n- Database backend detection\n- Schema file location\n- Transaction management\n- Error handling\n\n**Note:** The schema generation code in `src/python/db/` is for reference only and is not included in the PyPI package. The package only contains the final SQL files in `src/wmcoredb/sql/`.\n\n## Package Testing\n\nTo test the package functionality locally:\n\n```bash\n# Build the package\npython -m build\n\n# Install locally\npip install dist/wmcoredb-*.whl\n\n# Test basic functionality\npython -c\nimport wmcoredb\nprint('Backends:', wmcoredb.list_backends())\nprint('MariaDB modules:', wmcoredb.list_modules('mariadb'))\nprint(Oracle modules:', wmcoredb.list_modules(oracle'))\nprint(WMBS files:, wmcoredb.list_sql_files('wmbs, 'mariadb'))\n\"\n\n# Test SQL content access\npython -c\nimport wmcoredb\ncontent = wmcoredb.get_sql_content('testdb', create_testdb.sql', mariadb')\nprint(TestDB SQL length:', len(content))\n\"\n```\n\n## Logs\n\nSome relevant logs from the WMAgent 2.3.9 installation:\n```\nStart: Performing init_agent\ninit_agent: triggered.\nInitializing WMAgent...\ninit_wmagent: MYSQL database: wmagent has been created\nDEBUG:root:Log file ready\nDEBUG:root:Using SQLAlchemy v0.10.54INFO:root:Instantiating base WM DBInterface\nDEBUG:root:Tables for WMCore.WMBS created\nDEBUG:root:Tables for WMCore.Agent.Database created\nDEBUG:root:Tables for WMComponent.DBS3Buffer created\nDEBUG:root:Tables for WMCore.BossAir created\nDEBUG:root:Tables for WMCore.ResourceControl created\nchecking default database connection\ndefault database connection tested\n...\n_sql_write_agentid: Preserving the current WMA_BUILD_ID and HostName at database: wmagent.\n_sql_write_agentid: Creating wma_init table at database: wmagent\n_sql_write_agentid: Inserting current Agent's build id and hostname at database: wmagent\n_sql_dumpSchema: Dumping the current SQL schema of database: wmagent to /data/srv/wmagent/2.3.9/config/.wmaSchemaFile.sql\nDone: Performing init_agent\n```\n## WMAgent DB Initialization\n\nIt starts in the CMSKubernetes [init.sh](https://github.com/dmwm/CMSKubernetes/blob/master/docker/pypi/wmagent/init.sh#L465pt, which executes `init_agent()` method from the CMSKubernetes [manage](https://github.com/dmwm/CMSKubernetes/blob/master/docker/pypi/wmagent/bin/manage#L112) script.\n\nThe database optios are enriched dependent on the database flavor, such as:\n```bash\n    case $AGENT_FLAVOR inmysql')\n            _exec_mysql \"create database if not exists $wmaDBName\"\n            local database_options=--mysql_url=mysql://$MDB_USER:$MDB_PASS@$MDB_HOST/$wmaDBNameoracle')\n            local database_options=\"--coredb_url=oracle://$ORACLE_USER:$ORACLE_PASS@$ORACLE_TNS \"\n```\n\nIt then executes WMCore code, calling a script called [wmagent-mod-config](https://github.com/dmwm/WMCore/blob/master/bin/wmagent-mod-config).\n\nwith command line arguments like:\n```bash\n    wmagent-mod-config $database_options \\\n                       --input=$WMA_CONFIG_DIR/config-template.py \\\n                       --output=$WMA_CONFIG_DIR/config.py \\\n```\n\nwhich internally parses the command line arguments into `parameters` and modifies the standardWMAgentConfig.py](https://github.com/dmwm/WMCore/blob/master/etc/WMAgentConfig.py), saving it out as the new WMAgent configuration file, with something like:\n```\n    cfg = modifyConfiguration(cfg, **parameters)\n    saveConfiguration(cfg, outputFile)\n```\n\nWith the WMAgent configuration file properly updated, named `config.py`, now the `manage` script calls [wmcore-db-init](https://github.com/dmwm/WMCore/blob/master/bin/wmcore-db-init), with arguments like:\n\n```bash\nwmcore-db-init --config $WMA_CONFIG_DIR/config.py --create --modules=WMCore.WMBS,WMCore.Agent.Database,WMComponent.DBS3Buffer,WMCore.BossAir,WMCore.ResourceControl;\n```\n\nThis `wmcore-db-init` script itself calls the [WMInit.py](https://github.com/dmwm/WMCore/blob/master/src/python/WMCore/WMInit.py) script, executing basically the next four commands:\n```python\nwmInit = WMInit()\nwmInit.setLogging('wmcoreD', 'wmcoreD', logExists=False, logLevel=logging.DEBUG)\nwmInit.setDatabaseConnection(dbConfig=config.CoreDatabase.connectUrl, dialect=dialect, socketLoc=socket)\nwmInit.setSchema(modules, params=params)\n```\n\nIn summary, the WMAgent database schema is an aggregation of the schema defined under each of the following WMAgent python directories:\n```\nWMCore.WMBS             --> originally under src/python/db/wmbs\nWMCore.Agent.Database   --> originally under src/python/db/agent\nWMCore.BossAir          --> originally under src/python/db/bossair\nWMCore.ResourceControl  --> originally under src/python/db/resourcecontrol\nWMComponent.DBS3Buffer  --> originally under src/python/db/dbs3buffer\n```\n\n## Tier0 Schema\n\nThe Tier0 schema is designed to support the Tier0 data processing system. It includes tables for:\n\n- Run management and tracking\n- Stream and dataset associations\n- Lumi section processing\n- Configuration management\n- Workflow monitoring\n\n### Oracle Implementation\n\nThe Oracle implementation uses modern features like:\n- IDENTITY columns for auto-incrementing IDs\n- Inline foreign key constraints\n- Organization index tables for performance\n- Deterministic functions for state validation\n\nThe schema initialization includes:\n- Table definitions with constraints\n- Index definitions for performance\n- Helper functions for state validation\n- Initial data for run states, processing styles, and event scenarios\n\n### MariaDB Implementation\n\nThe MariaDB implementation provides equivalent functionality using:\n- INT and DECIMAL for numeric columns\n- VARCHAR for string columns\n- InnoDB engine specification\n- Compatible comment syntax\n- Auto-incrementing primary keys\n\n## Test Database Schema\n\nThe Test Database schema provides a simple set of tables for testing database connectivity and basic operations. It includes:\n\n- Tables with different data types (INT, VARCHAR, DECIMAL)\n- Primary key constraints\n- Table and column comments\n- Cross-database compatibility\n\n### Oracle Implementation\n\nThe Oracle implementation uses:\n- NUMBER for numeric columns\n- VARCHAR2 for string columns\n- Table and column comments\n- Primary key constraints\n\n### MariaDB Implementation\n\nThe MariaDB implementation provides equivalent functionality using:\n- INT and DECIMAL for numeric columns\n- VARCHAR for string columns\n- InnoDB engine specification\n- Compatible comment syntax\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "WMCore Database Schema - Database schema definitions for WMCore components",
    "version": "0.9.3",
    "project_urls": {
        "Changelog": "https://github.com/dmwm/wmcoredb/releases",
        "Documentation": "https://github.com/dmwm/wmcoredb#readme",
        "Homepage": "https://github.com/dmwm/wmcoredb",
        "Issues": "https://github.com/dmwm/wmcoredb/issues",
        "Repository": "https://github.com/dmwm/wmcoredb"
    },
    "split_keywords": [
        "database",
        " schema",
        " wmcore",
        " oracle",
        " mariadb",
        " cms",
        " workload-management"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "2d303cd10686fa7c3195ce0024a97066d1bf62e36385b53e52f3b95a863e2df0",
                "md5": "581fbf0a59085715a92fba4b2d271e90",
                "sha256": "21a7a7e15fbf33e875835b9123908fe8b1c3ed9a0e73b5e7b9daf916e8563a7f"
            },
            "downloads": -1,
            "filename": "wmcoredb-0.9.3-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "581fbf0a59085715a92fba4b2d271e90",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 57426,
            "upload_time": "2025-07-18T03:30:00",
            "upload_time_iso_8601": "2025-07-18T03:30:00.299667Z",
            "url": "https://files.pythonhosted.org/packages/2d/30/3cd10686fa7c3195ce0024a97066d1bf62e36385b53e52f3b95a863e2df0/wmcoredb-0.9.3-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "834cfae6ad52540b4ceaf1ef3bf939b9854251b734231754b7d825df903a9f57",
                "md5": "ce12b54c1ff3fc083c9edf94d7eb597b",
                "sha256": "85d6bc8646840062be2ed51743782ccc133b87106fbf7c2ece9172fc042d897f"
            },
            "downloads": -1,
            "filename": "wmcoredb-0.9.3.tar.gz",
            "has_sig": false,
            "md5_digest": "ce12b54c1ff3fc083c9edf94d7eb597b",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 60044,
            "upload_time": "2025-07-18T03:30:02",
            "upload_time_iso_8601": "2025-07-18T03:30:02.119435Z",
            "url": "https://files.pythonhosted.org/packages/83/4c/fae6ad52540b4ceaf1ef3bf939b9854251b734231754b7d825df903a9f57/wmcoredb-0.9.3.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-07-18 03:30:02",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "dmwm",
    "github_project": "wmcoredb",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "wmcoredb"
}
        
Elapsed time: 0.93207s