From 4871af741d06375a74b84c3105bb6b8fcef5094d Mon Sep 17 00:00:00 2001 From: asmit27rai Date: Fri, 18 Apr 2025 00:07:09 +0530 Subject: [PATCH] Add raw-track-access mode support for ECKD disks Signed-off-by: asmit27rai --- zthin-parts/zthin/lib/zthinshellutils | 3 +++ zvmsdk/database.py | 33 +++++++++++++-------------- zvmsdk/imageops.py | 4 +++- zvmsdk/sdkwsgi/handlers/image.py | 4 +++- zvmsdk/sdkwsgi/schemas/image.py | 3 ++- 5 files changed, 27 insertions(+), 20 deletions(-) diff --git a/zthin-parts/zthin/lib/zthinshellutils b/zthin-parts/zthin/lib/zthinshellutils index 6f4c7db75..aeb51ee92 100644 --- a/zthin-parts/zthin/lib/zthinshellutils +++ b/zthin-parts/zthin/lib/zthinshellutils @@ -707,6 +707,9 @@ function connectDisk { # @Code: [[ $mode ]] || mode='rr' + # Ensure rawTrackAccess 1 is passed for raw mode + vmcp "link $userID $vdev as $alias $mode" 2>&1 + # Obtain the disk connection lock. local attempts=1 while [[ $(mkdir $diskConnectionLock; echo $?) -ne 0 ]]; do diff --git a/zvmsdk/database.py b/zvmsdk/database.py index d8ce7f713..3742fb530 100755 --- a/zvmsdk/database.py +++ b/zvmsdk/database.py @@ -2313,28 +2313,27 @@ def _create_image_table(self): 'disk_size_units varchar(512),', 'image_size_in_bytes varchar(512),', 'type varchar(16),', + 'raw_track_access integer DEFAULT 0,', 'comments varchar(128))')) with get_image_conn() as conn: conn.execute(create_image_table_sql) def image_add_record(self, imagename, imageosdistro, md5sum, - disk_size_units, image_size_in_bytes, - type, comments=None): - if comments is not None: - with get_image_conn() as conn: - conn.execute("INSERT INTO image (imagename, imageosdistro," - "md5sum, disk_size_units, image_size_in_bytes," - " type, comments) VALUES (?, ?, ?, ?, ?, ?, ?)", - (imagename, imageosdistro, md5sum, - disk_size_units, image_size_in_bytes, type, - comments)) - else: - with get_image_conn() as conn: - conn.execute("INSERT INTO image (imagename, imageosdistro," - "md5sum, disk_size_units, image_size_in_bytes," - " type) VALUES (?, ?, ?, ?, ?, ?)", - (imagename, imageosdistro, md5sum, - disk_size_units, image_size_in_bytes, type)) + disk_size_units, image_size_in_bytes, + type, raw_track_access=0, comments=None): + with get_image_conn() as conn: + if comments is not None: + conn.execute("INSERT INTO image (imagename, imageosdistro, md5sum, " + "disk_size_units, image_size_in_bytes, type, raw_track_access, comments) " + "VALUES (?, ?, ?, ?, ?, ?, ?, ?)", + (imagename, imageosdistro, md5sum, disk_size_units, + image_size_in_bytes, type, raw_track_access, comments)) + else: + conn.execute("INSERT INTO image (imagename, imageosdistro, md5sum, " + "disk_size_units, image_size_in_bytes, type, raw_track_access) " + "VALUES (?, ?, ?, ?, ?, ?, ?)", + (imagename, imageosdistro, md5sum, disk_size_units, + image_size_in_bytes, type, raw_track_access)) def image_query_record(self, imagename=None): """Query the image record from database, if imagename is None, all diff --git a/zvmsdk/imageops.py b/zvmsdk/imageops.py index 7054ab522..67c56afd2 100644 --- a/zvmsdk/imageops.py +++ b/zvmsdk/imageops.py @@ -43,8 +43,10 @@ def __init__(self): def image_get_root_disk_size(self, image_name): return self._smtclient.image_get_root_disk_size(image_name) - def image_import(self, image_name, url, image_meta, remote_host=None): + def image_import(self, image_name, url, image_meta, remote_host=None, raw_track_access=False, disk=None): + if not raw_track_access and disk: + self._smtclient.dasdfmt(disk) return self._smtclient.image_import(image_name, url, image_meta, diff --git a/zvmsdk/sdkwsgi/handlers/image.py b/zvmsdk/sdkwsgi/handlers/image.py index 70dd41221..ef6adad75 100644 --- a/zvmsdk/sdkwsgi/handlers/image.py +++ b/zvmsdk/sdkwsgi/handlers/image.py @@ -48,8 +48,10 @@ def create(self, body): remote_host = image.get('remote_host', None) image_meta = image['image_meta'] + raw_track_access = image.get('raw_track_access', False) info = self.client.send_request('image_import', image_name, - url, image_meta, remote_host) + url, image_meta, remote_host, + raw_track_access) return info @validation.query_schema(image.query) diff --git a/zvmsdk/sdkwsgi/schemas/image.py b/zvmsdk/sdkwsgi/schemas/image.py index b7df41127..86ef05b15 100644 --- a/zvmsdk/sdkwsgi/schemas/image.py +++ b/zvmsdk/sdkwsgi/schemas/image.py @@ -27,7 +27,8 @@ 'image_name': parameter_types.name, 'url': parameter_types.url, 'image_meta': parameter_types.image_meta, - 'remote_host': parameter_types.remotehost + 'remote_host': parameter_types.remotehost, + 'raw_track_access': parameter_types.boolean }, 'required': ['image_name', 'url', 'image_meta'], 'additionalProperties': False