Compare commits
7 Commits
Author | SHA1 | Date | |
---|---|---|---|
6648d0070c | |||
439954e3ed | |||
|
4e0a4fe698 | ||
|
0a130f42ff | ||
|
c978b3290b | ||
|
22f2fb1628 | ||
|
2d1fa49b2a |
@ -4,4 +4,5 @@ PROVISIONER_NAME = os.getenv("PROVISIONER_NAME", "rawfile.csi.openebs.io")
|
|||||||
PROVISIONER_VERSION = "0.8.0"
|
PROVISIONER_VERSION = "0.8.0"
|
||||||
DATA_DIR = "/data"
|
DATA_DIR = "/data"
|
||||||
CONFIG = {}
|
CONFIG = {}
|
||||||
|
RESOURCE_EXHAUSTED_EXIT_CODE = 101
|
||||||
VOLUME_IN_USE_EXIT_CODE = 102
|
VOLUME_IN_USE_EXIT_CODE = 102
|
||||||
|
@ -8,6 +8,7 @@ import rawfile_util
|
|||||||
from consts import (
|
from consts import (
|
||||||
PROVISIONER_VERSION,
|
PROVISIONER_VERSION,
|
||||||
PROVISIONER_NAME,
|
PROVISIONER_NAME,
|
||||||
|
RESOURCE_EXHAUSTED_EXIT_CODE,
|
||||||
VOLUME_IN_USE_EXIT_CODE,
|
VOLUME_IN_USE_EXIT_CODE,
|
||||||
)
|
)
|
||||||
from csi import csi_pb2, csi_pb2_grpc
|
from csi import csi_pb2, csi_pb2_grpc
|
||||||
@ -191,7 +192,15 @@ class RawFileControllerServicer(csi_pb2_grpc.ControllerServicer):
|
|||||||
grpc.StatusCode.INVALID_ARGUMENT, "Topology key not found... why?"
|
grpc.StatusCode.INVALID_ARGUMENT, "Topology key not found... why?"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
try:
|
||||||
init_rawfile(volume_id=request.name, size=size),
|
init_rawfile(volume_id=request.name, size=size),
|
||||||
|
except CalledProcessError as exc:
|
||||||
|
if exc.returncode == RESOURCE_EXHAUSTED_EXIT_CODE:
|
||||||
|
context.abort(
|
||||||
|
grpc.StatusCode.RESOURCE_EXHAUSTED, "Not enough disk space"
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
raise exc
|
||||||
|
|
||||||
return csi_pb2.CreateVolumeResponse(
|
return csi_pb2.CreateVolumeResponse(
|
||||||
volume=csi_pb2.Volume(
|
volume=csi_pb2.Volume(
|
||||||
@ -225,9 +234,17 @@ class RawFileControllerServicer(csi_pb2_grpc.ControllerServicer):
|
|||||||
node_name = volume_to_node(volume_id)
|
node_name = volume_to_node(volume_id)
|
||||||
size = request.capacity_range.required_bytes
|
size = request.capacity_range.required_bytes
|
||||||
|
|
||||||
|
try:
|
||||||
run_on_node(
|
run_on_node(
|
||||||
expand_rawfile.as_cmd(volume_id=volume_id, size=size), node=node_name
|
expand_rawfile.as_cmd(volume_id=volume_id, size=size), node=node_name
|
||||||
)
|
)
|
||||||
|
except CalledProcessError as exc:
|
||||||
|
if exc.returncode == RESOURCE_EXHAUSTED_EXIT_CODE:
|
||||||
|
context.abort(
|
||||||
|
grpc.StatusCode.RESOURCE_EXHAUSTED, "Not enough disk space"
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
raise exc
|
||||||
|
|
||||||
return csi_pb2.ControllerExpandVolumeResponse(
|
return csi_pb2.ControllerExpandVolumeResponse(
|
||||||
capacity_bytes=size,
|
capacity_bytes=size,
|
||||||
|
@ -129,4 +129,8 @@ def get_volumes_stats() -> [dict]:
|
|||||||
|
|
||||||
|
|
||||||
def get_capacity():
|
def get_capacity():
|
||||||
return path_stats(DATA_DIR)["fs_avail"]
|
disk_free_size = path_stats(DATA_DIR)["fs_avail"]
|
||||||
|
capacity = disk_free_size
|
||||||
|
for volume_stat in get_volumes_stats().values():
|
||||||
|
capacity -= volume_stat["total"] - volume_stat["used"]
|
||||||
|
return capacity
|
||||||
|
@ -34,6 +34,10 @@ def init_rawfile(volume_id, size):
|
|||||||
import rawfile_util
|
import rawfile_util
|
||||||
from volume_schema import LATEST_SCHEMA_VERSION
|
from volume_schema import LATEST_SCHEMA_VERSION
|
||||||
from util import run
|
from util import run
|
||||||
|
from consts import RESOURCE_EXHAUSTED_EXIT_CODE
|
||||||
|
|
||||||
|
if rawfile_util.get_capacity() < size:
|
||||||
|
raise CalledProcessError(returncode=RESOURCE_EXHAUSTED_EXIT_CODE, cmd="")
|
||||||
|
|
||||||
img_dir = rawfile_util.img_dir(volume_id)
|
img_dir = rawfile_util.img_dir(volume_id)
|
||||||
img_dir.mkdir(exist_ok=True)
|
img_dir.mkdir(exist_ok=True)
|
||||||
@ -65,11 +69,14 @@ def expand_rawfile(volume_id, size):
|
|||||||
import rawfile_util
|
import rawfile_util
|
||||||
|
|
||||||
from util import run
|
from util import run
|
||||||
|
from consts import RESOURCE_EXHAUSTED_EXIT_CODE
|
||||||
|
|
||||||
img_file = rawfile_util.img_file(volume_id)
|
img_file = rawfile_util.img_file(volume_id)
|
||||||
size_inc = size - rawfile_util.metadata(volume_id)["size"]
|
size_inc = size - rawfile_util.metadata(volume_id)["size"]
|
||||||
if size_inc <= 0:
|
if size_inc <= 0:
|
||||||
return
|
return
|
||||||
|
if rawfile_util.get_capacity() < size_inc:
|
||||||
|
exit(RESOURCE_EXHAUSTED_EXIT_CODE)
|
||||||
|
|
||||||
rawfile_util.patch_metadata(
|
rawfile_util.patch_metadata(
|
||||||
volume_id,
|
volume_id,
|
||||||
|
Loading…
Reference in New Issue
Block a user