Port OSD on-node tasks to Celery worker system
Adds Celery versions of the osd_add, osd_replace, osd_refresh, osd_remove, and osd_db_vg_add functions.
This commit is contained in:
@ -35,6 +35,13 @@ from daemon_lib.vm import (
|
||||
vm_worker_attach_device,
|
||||
vm_worker_detach_device,
|
||||
)
|
||||
from daemon_lib.ceph import (
|
||||
osd_worker_add_osd,
|
||||
osd_worker_replace_osd,
|
||||
osd_worker_refresh_osd,
|
||||
osd_worker_remove_osd,
|
||||
osd_worker_add_db_vg,
|
||||
)
|
||||
|
||||
from pvcapid.Daemon import config, strtobool, API_VERSION
|
||||
|
||||
@ -237,6 +244,116 @@ def vm_device_detach(self, domain, xml, run_on=None):
|
||||
return run_vm_device_detach(self, domain, xml)
|
||||
|
||||
|
||||
@celery.task(name="osd.add", bind=True, routing_key="run_on")
|
||||
def osd_add(
|
||||
self,
|
||||
device,
|
||||
weight,
|
||||
ext_db_ratio=None,
|
||||
ext_db_size=None,
|
||||
split_count=None,
|
||||
run_on=None,
|
||||
):
|
||||
@ZKConnection(config)
|
||||
def run_osd_add(
|
||||
zkhandler,
|
||||
self,
|
||||
run_on,
|
||||
device,
|
||||
weight,
|
||||
ext_db_ratio=None,
|
||||
ext_db_size=None,
|
||||
split_count=None,
|
||||
):
|
||||
return osd_worker_add_osd(
|
||||
zkhandler,
|
||||
self,
|
||||
run_on,
|
||||
device,
|
||||
weight,
|
||||
ext_db_ratio,
|
||||
ext_db_size,
|
||||
split_count,
|
||||
)
|
||||
|
||||
return run_osd_add(
|
||||
self, run_on, device, weight, ext_db_ratio, ext_db_size, split_count
|
||||
)
|
||||
|
||||
|
||||
@celery.task(name="osd.replace", bind=True, routing_key="run_on")
|
||||
def osd_replace(
|
||||
self,
|
||||
osd_id,
|
||||
new_device,
|
||||
old_device=None,
|
||||
weight=None,
|
||||
ext_db_ratio=None,
|
||||
ext_db_size=None,
|
||||
run_on=None,
|
||||
):
|
||||
@ZKConnection(config)
|
||||
def run_osd_replace(
|
||||
zkhandler,
|
||||
self,
|
||||
run_on,
|
||||
osd_id,
|
||||
new_device,
|
||||
old_device=None,
|
||||
weight=None,
|
||||
ext_db_ratio=None,
|
||||
ext_db_size=None,
|
||||
):
|
||||
return osd_worker_replace_osd(
|
||||
zkhandler,
|
||||
self,
|
||||
run_on,
|
||||
osd_id,
|
||||
new_device,
|
||||
old_device,
|
||||
weight,
|
||||
ext_db_ratio,
|
||||
ext_db_size,
|
||||
)
|
||||
|
||||
return run_osd_replace(
|
||||
self, run_on, osd_id, new_device, old_device, weight, ext_db_ratio, ext_db_size
|
||||
)
|
||||
|
||||
|
||||
@celery.task(name="osd.refresh", bind=True, routing_key="run_on")
|
||||
def osd_refresh(self, osd_id, device, ext_db_flag=False, run_on=None):
|
||||
@ZKConnection(config)
|
||||
def run_osd_refresh(zkhandler, self, run_on, osd_id, device, ext_db_flag=False):
|
||||
return osd_worker_refresh_osd(
|
||||
zkhandler, self, run_on, osd_id, device, ext_db_flag
|
||||
)
|
||||
|
||||
return run_osd_refresh(self, run_on, osd_id, device, ext_db_flag)
|
||||
|
||||
|
||||
@celery.task(name="osd.remove", bind=True, routing_key="run_on")
|
||||
def osd_remove(self, osd_id, force_flag=False, skip_zap_flag=False, run_on=None):
|
||||
@ZKConnection(config)
|
||||
def run_osd_remove(
|
||||
zkhandler, self, run_on, osd_id, force_flag=False, skip_zap_flag=False
|
||||
):
|
||||
return osd_worker_remove_osd(
|
||||
zkhandler, self, run_on, osd_id, force_flag, skip_zap_flag
|
||||
)
|
||||
|
||||
return run_osd_remove(self, run_on, osd_id, force_flag, skip_zap_flag)
|
||||
|
||||
|
||||
@celery.task(name="osd.add_db_vg", bind=True, routing_key="run_on")
|
||||
def osd_add_db_vg(self, device, run_on=None):
|
||||
@ZKConnection(config)
|
||||
def run_osd_add_db_vg(zkhandler, self, run_on, device):
|
||||
return osd_worker_add_db_vg(zkhandler, self, run_on, device)
|
||||
|
||||
return run_osd_add_db_vg(self, run_on, device)
|
||||
|
||||
|
||||
##########################################################
|
||||
# API Root/Authentication
|
||||
##########################################################
|
||||
@ -738,7 +855,14 @@ class API_Tasks_Element(Resource):
|
||||
"total": 1,
|
||||
"status": "Pending job start",
|
||||
}
|
||||
elif task.state != "FAILURE":
|
||||
elif task.state == "FAILURE":
|
||||
response = {
|
||||
"state": task.state,
|
||||
"current": 1,
|
||||
"total": 1,
|
||||
"status": str(task.info),
|
||||
}
|
||||
else:
|
||||
response = {
|
||||
"state": task.state,
|
||||
"current": task.info.get("current", 0),
|
||||
@ -747,13 +871,6 @@ class API_Tasks_Element(Resource):
|
||||
}
|
||||
if "result" in task.info:
|
||||
response["result"] = task.info["result"]
|
||||
else:
|
||||
response = {
|
||||
"state": task.state,
|
||||
"current": 1,
|
||||
"total": 1,
|
||||
"status": str(task.info),
|
||||
}
|
||||
return response
|
||||
|
||||
|
||||
@ -4374,8 +4491,14 @@ class API_Storage_Ceph_OSDDB_Root(Resource):
|
||||
type: object
|
||||
id: Message
|
||||
"""
|
||||
return api_helper.ceph_osd_db_vg_add(
|
||||
reqargs.get("node", None), reqargs.get("device", None)
|
||||
node = reqargs.get("node", None)
|
||||
|
||||
task = osd_add_db_vg.delay(reqargs.get("device", None), run_on=node)
|
||||
|
||||
return (
|
||||
{"task_id": task.id, "run_on": node},
|
||||
202,
|
||||
{"Location": Api.url_for(api, API_Tasks_Element, task_id=task.id)},
|
||||
)
|
||||
|
||||
|
||||
@ -4565,13 +4688,21 @@ class API_Storage_Ceph_OSD_Root(Resource):
|
||||
type: object
|
||||
id: Message
|
||||
"""
|
||||
return api_helper.ceph_osd_add(
|
||||
reqargs.get("node", None),
|
||||
node = reqargs.get("node", None)
|
||||
|
||||
task = osd_add.delay(
|
||||
reqargs.get("device", None),
|
||||
reqargs.get("weight", None),
|
||||
reqargs.get("ext_db_ratio", None),
|
||||
reqargs.get("ext_db_size", None),
|
||||
reqargs.get("osd_count", None),
|
||||
run_on=node,
|
||||
)
|
||||
|
||||
return (
|
||||
{"task_id": task.id, "run_on": node},
|
||||
202,
|
||||
{"Location": Api.url_for(api, API_Tasks_Element, task_id=task.id)},
|
||||
)
|
||||
|
||||
|
||||
@ -4671,13 +4802,26 @@ class API_Storage_Ceph_OSD_Element(Resource):
|
||||
type: object
|
||||
id: Message
|
||||
"""
|
||||
return api_helper.ceph_osd_replace(
|
||||
osd_node_detail, retcode = api_helper.ceph_osd_node(osdid)
|
||||
if retcode == 200:
|
||||
node = osd_node_detail["node"]
|
||||
else:
|
||||
return osd_node_detail, retcode
|
||||
|
||||
task = osd_replace.delay(
|
||||
osdid,
|
||||
reqargs.get("new_device"),
|
||||
reqargs.get("old_device", None),
|
||||
reqargs.get("weight", None),
|
||||
reqargs.get("ext_db_ratio", None),
|
||||
reqargs.get("ext_db_size", None),
|
||||
run_on=node,
|
||||
)
|
||||
|
||||
return (
|
||||
{"task_id": task.id, "run_on": node},
|
||||
202,
|
||||
{"Location": Api.url_for(api, API_Tasks_Element, task_id=task.id)},
|
||||
)
|
||||
|
||||
@RequestParser(
|
||||
@ -4715,9 +4859,22 @@ class API_Storage_Ceph_OSD_Element(Resource):
|
||||
type: object
|
||||
id: Message
|
||||
"""
|
||||
return api_helper.ceph_osd_refresh(
|
||||
osd_node_detail, retcode = api_helper.ceph_osd_node(osdid)
|
||||
if retcode == 200:
|
||||
node = osd_node_detail["node"]
|
||||
else:
|
||||
return osd_node_detail, retcode
|
||||
|
||||
task = osd_refresh.delay(
|
||||
osdid,
|
||||
reqargs.get("device", None),
|
||||
run_on=node,
|
||||
)
|
||||
|
||||
return (
|
||||
{"task_id": task.id, "run_on": node},
|
||||
202,
|
||||
{"Location": Api.url_for(api, API_Tasks_Element, task_id=task.id)},
|
||||
)
|
||||
|
||||
@RequestParser(
|
||||
@ -4771,7 +4928,23 @@ class API_Storage_Ceph_OSD_Element(Resource):
|
||||
type: object
|
||||
id: Message
|
||||
"""
|
||||
return api_helper.ceph_osd_remove(osdid, reqargs.get("force", False))
|
||||
osd_node_detail, retcode = api_helper.ceph_osd_node(osdid)
|
||||
if retcode == 200:
|
||||
node = osd_node_detail["node"]
|
||||
else:
|
||||
return osd_node_detail, retcode
|
||||
|
||||
task = osd_remove.delay(
|
||||
osdid,
|
||||
force_flag=reqargs.get("force", False),
|
||||
run_on=node,
|
||||
)
|
||||
|
||||
return (
|
||||
{"task_id": task.id, "run_on": node},
|
||||
202,
|
||||
{"Location": Api.url_for(api, API_Tasks_Element, task_id=task.id)},
|
||||
)
|
||||
|
||||
|
||||
api.add_resource(API_Storage_Ceph_OSD_Element, "/storage/ceph/osd/<osdid>")
|
||||
|
@ -1332,6 +1332,36 @@ def ceph_osd_list(zkhandler, limit=None):
|
||||
return retdata, retcode
|
||||
|
||||
|
||||
@pvc_common.Profiler(config)
|
||||
@ZKConnection(config)
|
||||
def ceph_osd_node(zkhandler, osd):
|
||||
"""
|
||||
Return the current node of OSD OSD.
|
||||
"""
|
||||
retflag, retdata = pvc_ceph.get_list_osd(zkhandler, None)
|
||||
|
||||
if retflag:
|
||||
if retdata:
|
||||
osd = [o for o in retdata if o["id"] == osd]
|
||||
if len(osd) < 1:
|
||||
retcode = 404
|
||||
retdata = {"message": "OSD not found."}
|
||||
else:
|
||||
retcode = 200
|
||||
retdata = {
|
||||
"id": osd[0]["id"],
|
||||
"node": osd[0]["node"],
|
||||
}
|
||||
else:
|
||||
retcode = 404
|
||||
retdata = {"message": "OSD not found."}
|
||||
else:
|
||||
retcode = 400
|
||||
retdata = {"message": retdata}
|
||||
|
||||
return retdata, retcode
|
||||
|
||||
|
||||
@ZKConnection(config)
|
||||
def ceph_osd_state(zkhandler, osd):
|
||||
retflag, retdata = pvc_ceph.get_list_osd(zkhandler, osd)
|
||||
|
Reference in New Issue
Block a user