Add test format versioning to storage benchmarks

Adds a test_format database column and a value in the API return for the
test format version, starting at 0 for the existing format as of 0.9.37.

References #143
This commit is contained in:
Joshua Boniface 2021-10-02 00:53:27 -04:00
parent 3e8a85b029
commit 5b27e438a9
5 changed files with 46 additions and 3 deletions

View File

@ -0,0 +1,28 @@
"""PVC version 0.9.37
Revision ID: 5c2109dbbeae
Revises: bae4d5a77c74
Create Date: 2021-10-02 00:47:29.693579
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = '5c2109dbbeae'
down_revision = 'bae4d5a77c74'
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.add_column('storage_benchmarks', sa.Column('test_format', sa.Integer(), server_default='0', nullable=False))
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.drop_column('storage_benchmarks', 'test_format')
# ### end Alembic commands ###

View File

@ -95,6 +95,7 @@ def list_benchmarks(job=None):
benchmark_data = dict() benchmark_data = dict()
benchmark_data['id'] = benchmark['id'] benchmark_data['id'] = benchmark['id']
benchmark_data['job'] = benchmark['job'] benchmark_data['job'] = benchmark['job']
benchmark_data['test_format'] = benchmark['test_format']
benchmark_data['benchmark_result'] = loads(benchmark['result']) benchmark_data['benchmark_result'] = loads(benchmark['result'])
# Append the new data to our actual output structure # Append the new data to our actual output structure
data.append(benchmark_data) data.append(benchmark_data)
@ -111,6 +112,9 @@ def run_benchmark(self, pool):
import json import json
from datetime import datetime from datetime import datetime
# Define the current test format
TEST_FORMAT = 0
time.sleep(2) time.sleep(2)
# Phase 0 - connect to databases # Phase 0 - connect to databases
@ -135,8 +139,8 @@ def run_benchmark(self, pool):
print("Storing running status for job '{}' in database".format(job_name)) print("Storing running status for job '{}' in database".format(job_name))
try: try:
query = "INSERT INTO storage_benchmarks (job, result) VALUES (%s, %s);" query = "INSERT INTO storage_benchmarks (job, test_format, result) VALUES (%s, %s);"
args = (job_name, "Running",) args = (job_name, TEST_FORMAT, "Running",)
db_cur.execute(query, args) db_cur.execute(query, args)
db_conn.commit() db_conn.commit()
except Exception as e: except Exception as e:

View File

@ -3420,8 +3420,12 @@ class API_Storage_Ceph_Benchmark(Resource):
job: job:
type: string type: string
description: The job name (an ISO date) of the test result description: The job name (an ISO date) of the test result
test_format:
type: integer
description: The PVC benchmark format of the results
benchmark_result: benchmark_result:
type: object type: object
description: A format 0 test result
properties: properties:
test_name: test_name:
type: object type: object

View File

@ -231,11 +231,13 @@ class DBStorageBenchmarks(db.Model):
id = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
job = db.Column(db.Text, nullable=False) job = db.Column(db.Text, nullable=False)
test_format = db.Column(db.Integer, nullable=False, default=0, server_default='0')
result = db.Column(db.Text, nullable=False) result = db.Column(db.Text, nullable=False)
def __init__(self, job, result): def __init__(self, job, result, test_format):
self.job = job self.job = job
self.result = result self.result = result
self.test_format = test_format
def __repr__(self): def __repr__(self):
return '<id {}>'.format(self.id) return '<id {}>'.format(self.id)

View File

@ -961,6 +961,7 @@
"storagebenchmark": { "storagebenchmark": {
"properties": { "properties": {
"benchmark_result": { "benchmark_result": {
"description": "A format 0 test result",
"properties": { "properties": {
"test_name": { "test_name": {
"properties": { "properties": {
@ -1094,6 +1095,10 @@
"job": { "job": {
"description": "The job name (an ISO date) of the test result", "description": "The job name (an ISO date) of the test result",
"type": "string" "type": "string"
},
"test_format": {
"description": "The PVC benchmark format of the results",
"type": "integer"
} }
}, },
"type": "object" "type": "object"