From 97581dee807db734b853f26020008d5c7683a447 Mon Sep 17 00:00:00 2001
From: Miguel Barros <miguel.veloso.barros@cern.ch>
Date: Mon, 28 Feb 2022 14:42:08 +0100
Subject: [PATCH] Resolve "Remove deprecated tape drive tables."

---
 catalogue/5.0/oracle_catalogue_schema.sql     |  63 +-----
 catalogue/5.0/postgres_catalogue_schema.sql   |  63 +-----
 catalogue/5.0/sqlite_catalogue_schema.sql     |  63 +-----
 catalogue/AllCatalogueSchema.hpp              | 189 +-----------------
 catalogue/CatalogueTest.cpp                   |  28 +--
 catalogue/DummyCatalogue.hpp                  |  21 +-
 catalogue/RdbmsCatalogue.cpp                  |  29 +--
 catalogue/TapeDrivesCatalogueState.cpp        |   5 +-
 catalogue/common_catalogue_schema.sql         |  63 +-----
 .../migrations/liquibase/oracle/4.5to5.0.sql  |  69 +++++++
 common/dataStructures/TapeDrive.cpp           |  17 +-
 common/dataStructures/TapeDrive.hpp           |   6 +-
 xroot_plugins/XrdCtaDriveLs.hpp               |   4 +-
 13 files changed, 151 insertions(+), 469 deletions(-)

diff --git a/catalogue/5.0/oracle_catalogue_schema.sql b/catalogue/5.0/oracle_catalogue_schema.sql
index e5a9d1ab34..37bd86ea89 100644
--- a/catalogue/5.0/oracle_catalogue_schema.sql
+++ b/catalogue/5.0/oracle_catalogue_schema.sql
@@ -421,63 +421,6 @@ CREATE TABLE DRIVE_CONFIG (
   CONSTRAINT DRIVE_CONFIG_DN_PK PRIMARY KEY(KEY_NAME, DRIVE_NAME)
 );
 
-CREATE TABLE TAPE_DRIVE (
-  DRIVE_NAME                  VARCHAR2(100)       CONSTRAINT DRIVE_STATE_DN_NN NOT NULL,
-  HOST                        VARCHAR2(100)       CONSTRAINT DRIVE_STATE_H_NN  NOT NULL,
-  LOGICAL_LIBRARY             VARCHAR2(100)       CONSTRAINT DRIVE_STATE_LL_NN NOT NULL,
-  SESSION_ID                  NUMERIC(20, 0),
-  BYTES_TRANSFERED_IN_SESSION NUMERIC(20, 0),
-  FILES_TRANSFERED_IN_SESSION NUMERIC(20, 0),
-  LATEST_BANDWIDTH            VARCHAR2(100),
-  SESSION_START_TIME          NUMERIC(20, 0),
-  MOUNT_START_TIME            NUMERIC(20, 0),
-  TRANSFER_START_TIME         NUMERIC(20, 0),
-  UNLOAD_START_TIME           NUMERIC(20, 0),
-  UNMOUNT_START_TIME          NUMERIC(20, 0),
-  DRAINING_START_TIME         NUMERIC(20, 0),
-  DOWN_OR_UP_START_TIME       NUMERIC(20, 0),
-  PROBE_START_TIME            NUMERIC(20, 0),
-  CLEANUP_START_TIME          NUMERIC(20, 0),
-  START_START_TIME            NUMERIC(20, 0),
-  SHUTDOWN_TIME               NUMERIC(20, 0),
-  MOUNT_TYPE                  NUMERIC(10, 0)      CONSTRAINT DRIVE_STATE_MT_NN NOT NULL,
-  DRIVE_STATUS                VARCHAR2(100)    DEFAULT 'UNKNOWN' CONSTRAINT DRIVE_STATE_DS_NN NOT NULL,
-  DESIRED_UP                  CHAR(1)         DEFAULT '0' CONSTRAINT DRIVE_STATE_DU_NN  NOT NULL,
-  DESIRED_FORCE_DOWN          CHAR(1)         DEFAULT '0' CONSTRAINT DRIVE_STATE_DFD_NN NOT NULL,
-  REASON_UP_DOWN              VARCHAR2(1000),
-  CURRENT_VID                 VARCHAR2(100),
-  CTA_VERSION                 VARCHAR2(100),
-  CURRENT_PRIORITY            NUMERIC(20, 0),
-  CURRENT_ACTIVITY            VARCHAR2(100),
-  CURRENT_ACTIVITY_WEIGHT     VARCHAR2(100),
-  CURRENT_TAPE_POOL           VARCHAR2(100),
-  NEXT_MOUNT_TYPE             NUMERIC(10, 0),
-  NEXT_VID                    VARCHAR2(100),
-  NEXT_TAPE_POOL              VARCHAR2(100),
-  NEXT_PRIORITY               NUMERIC(20, 0),
-  NEXT_ACTIVITY               VARCHAR2(100),
-  NEXT_ACTIVITY_WEIGHT        VARCHAR2(100),
-  DEV_FILE_NAME               VARCHAR2(100),
-  RAW_LIBRARY_SLOT            VARCHAR2(100),
-  CURRENT_VO                  VARCHAR2(100),
-  NEXT_VO                     VARCHAR2(100),
-  USER_COMMENT                VARCHAR2(1000),
-  CREATION_LOG_USER_NAME      VARCHAR2(100),
-  CREATION_LOG_HOST_NAME      VARCHAR2(100),
-  CREATION_LOG_TIME           NUMERIC(20, 0),
-  LAST_UPDATE_USER_NAME       VARCHAR2(100),
-  LAST_UPDATE_HOST_NAME       VARCHAR2(100),
-  LAST_UPDATE_TIME            NUMERIC(20, 0),
-  DISK_SYSTEM_NAME            VARCHAR2(100)       CONSTRAINT DRIVE_STATE_DSN_NN NOT NULL,
-  RESERVED_BYTES              NUMERIC(20, 0)         CONSTRAINT DRIVE_STATE_RB_NN  NOT NULL,
-  CONSTRAINT DRIVE_STATE_DN_PK PRIMARY KEY(DRIVE_NAME),
-  CONSTRAINT DRIVE_STATE_DU_BOOL_CK CHECK(DESIRED_UP IN ('0', '1')),
-  CONSTRAINT DRIVE_STATE_DFD_BOOL_CK CHECK(DESIRED_FORCE_DOWN IN ('0', '1')),
-  CONSTRAINT DRIVE_STATE_DS_STRING_CK CHECK(DRIVE_STATUS IN ('DOWN', 'UP', 'PROBING', 'STARTING',
-  'MOUNTING', 'TRANSFERING', 'UNLOADING', 'UNMOUNTING', 'DRAININGTODISK', 'CLEANINGUP', 'SHUTDOWN',
-  'UNKNOWN'))
-);
-
 CREATE TABLE DRIVE_STATE (
   DRIVE_NAME                  VARCHAR2(100)       CONSTRAINT DRIVE_DN_NN NOT NULL,
   HOST                        VARCHAR2(100)       CONSTRAINT DRIVE_H_NN  NOT NULL,
@@ -523,9 +466,9 @@ CREATE TABLE DRIVE_STATE (
   LAST_UPDATE_USER_NAME       VARCHAR2(100),
   LAST_UPDATE_HOST_NAME       VARCHAR2(100),
   LAST_UPDATE_TIME            NUMERIC(20, 0),
-  DISK_SYSTEM_NAME            VARCHAR2(100)       CONSTRAINT DRIVE_DSN_NN NOT NULL,
-  RESERVED_BYTES              NUMERIC(20, 0)         CONSTRAINT DRIVE_RB_NN  NOT NULL,
-  RESERVATION_SESSION_ID      NUMERIC(20, 0)         CONSTRAINT DRIVE_RSI_NN  NOT NULL,
+  DISK_SYSTEM_NAME            VARCHAR2(100),
+  RESERVED_BYTES              NUMERIC(20, 0),
+  RESERVATION_SESSION_ID      NUMERIC(20, 0),
   CONSTRAINT DRIVE_DN_PK PRIMARY KEY(DRIVE_NAME),
   CONSTRAINT DRIVE_DU_BOOL_CK CHECK(DESIRED_UP IN ('0', '1')),
   CONSTRAINT DRIVE_DFD_BOOL_CK CHECK(DESIRED_FORCE_DOWN IN ('0', '1')),
diff --git a/catalogue/5.0/postgres_catalogue_schema.sql b/catalogue/5.0/postgres_catalogue_schema.sql
index 813a1e25ba..e7b5434a8c 100644
--- a/catalogue/5.0/postgres_catalogue_schema.sql
+++ b/catalogue/5.0/postgres_catalogue_schema.sql
@@ -403,63 +403,6 @@ CREATE TABLE DRIVE_CONFIG (
   CONSTRAINT DRIVE_CONFIG_DN_PK PRIMARY KEY(KEY_NAME, DRIVE_NAME)
 );
 
-CREATE TABLE TAPE_DRIVE (
-  DRIVE_NAME                  VARCHAR(100)       CONSTRAINT DRIVE_STATE_DN_NN NOT NULL,
-  HOST                        VARCHAR(100)       CONSTRAINT DRIVE_STATE_H_NN  NOT NULL,
-  LOGICAL_LIBRARY             VARCHAR(100)       CONSTRAINT DRIVE_STATE_LL_NN NOT NULL,
-  SESSION_ID                  NUMERIC(20, 0),
-  BYTES_TRANSFERED_IN_SESSION NUMERIC(20, 0),
-  FILES_TRANSFERED_IN_SESSION NUMERIC(20, 0),
-  LATEST_BANDWIDTH            VARCHAR(100),
-  SESSION_START_TIME          NUMERIC(20, 0),
-  MOUNT_START_TIME            NUMERIC(20, 0),
-  TRANSFER_START_TIME         NUMERIC(20, 0),
-  UNLOAD_START_TIME           NUMERIC(20, 0),
-  UNMOUNT_START_TIME          NUMERIC(20, 0),
-  DRAINING_START_TIME         NUMERIC(20, 0),
-  DOWN_OR_UP_START_TIME       NUMERIC(20, 0),
-  PROBE_START_TIME            NUMERIC(20, 0),
-  CLEANUP_START_TIME          NUMERIC(20, 0),
-  START_START_TIME            NUMERIC(20, 0),
-  SHUTDOWN_TIME               NUMERIC(20, 0),
-  MOUNT_TYPE                  NUMERIC(10, 0)      CONSTRAINT DRIVE_STATE_MT_NN NOT NULL,
-  DRIVE_STATUS                VARCHAR(100)    DEFAULT 'UNKNOWN' CONSTRAINT DRIVE_STATE_DS_NN NOT NULL,
-  DESIRED_UP                  CHAR(1)         DEFAULT '0' CONSTRAINT DRIVE_STATE_DU_NN  NOT NULL,
-  DESIRED_FORCE_DOWN          CHAR(1)         DEFAULT '0' CONSTRAINT DRIVE_STATE_DFD_NN NOT NULL,
-  REASON_UP_DOWN              VARCHAR(1000),
-  CURRENT_VID                 VARCHAR(100),
-  CTA_VERSION                 VARCHAR(100),
-  CURRENT_PRIORITY            NUMERIC(20, 0),
-  CURRENT_ACTIVITY            VARCHAR(100),
-  CURRENT_ACTIVITY_WEIGHT     VARCHAR(100),
-  CURRENT_TAPE_POOL           VARCHAR(100),
-  NEXT_MOUNT_TYPE             NUMERIC(10, 0),
-  NEXT_VID                    VARCHAR(100),
-  NEXT_TAPE_POOL              VARCHAR(100),
-  NEXT_PRIORITY               NUMERIC(20, 0),
-  NEXT_ACTIVITY               VARCHAR(100),
-  NEXT_ACTIVITY_WEIGHT        VARCHAR(100),
-  DEV_FILE_NAME               VARCHAR(100),
-  RAW_LIBRARY_SLOT            VARCHAR(100),
-  CURRENT_VO                  VARCHAR(100),
-  NEXT_VO                     VARCHAR(100),
-  USER_COMMENT                VARCHAR(1000),
-  CREATION_LOG_USER_NAME      VARCHAR(100),
-  CREATION_LOG_HOST_NAME      VARCHAR(100),
-  CREATION_LOG_TIME           NUMERIC(20, 0),
-  LAST_UPDATE_USER_NAME       VARCHAR(100),
-  LAST_UPDATE_HOST_NAME       VARCHAR(100),
-  LAST_UPDATE_TIME            NUMERIC(20, 0),
-  DISK_SYSTEM_NAME            VARCHAR(100)       CONSTRAINT DRIVE_STATE_DSN_NN NOT NULL,
-  RESERVED_BYTES              NUMERIC(20, 0)         CONSTRAINT DRIVE_STATE_RB_NN  NOT NULL,
-  CONSTRAINT DRIVE_STATE_DN_PK PRIMARY KEY(DRIVE_NAME),
-  CONSTRAINT DRIVE_STATE_DU_BOOL_CK CHECK(DESIRED_UP IN ('0', '1')),
-  CONSTRAINT DRIVE_STATE_DFD_BOOL_CK CHECK(DESIRED_FORCE_DOWN IN ('0', '1')),
-  CONSTRAINT DRIVE_STATE_DS_STRING_CK CHECK(DRIVE_STATUS IN ('DOWN', 'UP', 'PROBING', 'STARTING',
-  'MOUNTING', 'TRANSFERING', 'UNLOADING', 'UNMOUNTING', 'DRAININGTODISK', 'CLEANINGUP', 'SHUTDOWN',
-  'UNKNOWN'))
-);
-
 CREATE TABLE DRIVE_STATE (
   DRIVE_NAME                  VARCHAR(100)       CONSTRAINT DRIVE_DN_NN NOT NULL,
   HOST                        VARCHAR(100)       CONSTRAINT DRIVE_H_NN  NOT NULL,
@@ -505,9 +448,9 @@ CREATE TABLE DRIVE_STATE (
   LAST_UPDATE_USER_NAME       VARCHAR(100),
   LAST_UPDATE_HOST_NAME       VARCHAR(100),
   LAST_UPDATE_TIME            NUMERIC(20, 0),
-  DISK_SYSTEM_NAME            VARCHAR(100)       CONSTRAINT DRIVE_DSN_NN NOT NULL,
-  RESERVED_BYTES              NUMERIC(20, 0)         CONSTRAINT DRIVE_RB_NN  NOT NULL,
-  RESERVATION_SESSION_ID      NUMERIC(20, 0)         CONSTRAINT DRIVE_RSI_NN  NOT NULL,
+  DISK_SYSTEM_NAME            VARCHAR(100),
+  RESERVED_BYTES              NUMERIC(20, 0),
+  RESERVATION_SESSION_ID      NUMERIC(20, 0),
   CONSTRAINT DRIVE_DN_PK PRIMARY KEY(DRIVE_NAME),
   CONSTRAINT DRIVE_DU_BOOL_CK CHECK(DESIRED_UP IN ('0', '1')),
   CONSTRAINT DRIVE_DFD_BOOL_CK CHECK(DESIRED_FORCE_DOWN IN ('0', '1')),
diff --git a/catalogue/5.0/sqlite_catalogue_schema.sql b/catalogue/5.0/sqlite_catalogue_schema.sql
index 624b7fc78b..14dc362a62 100644
--- a/catalogue/5.0/sqlite_catalogue_schema.sql
+++ b/catalogue/5.0/sqlite_catalogue_schema.sql
@@ -375,63 +375,6 @@ CREATE TABLE DRIVE_CONFIG (
   CONSTRAINT DRIVE_CONFIG_DN_PK PRIMARY KEY(KEY_NAME, DRIVE_NAME)
 );
 
-CREATE TABLE TAPE_DRIVE (
-  DRIVE_NAME                  VARCHAR(100)       CONSTRAINT DRIVE_STATE_DN_NN NOT NULL,
-  HOST                        VARCHAR(100)       CONSTRAINT DRIVE_STATE_H_NN  NOT NULL,
-  LOGICAL_LIBRARY             VARCHAR(100)       CONSTRAINT DRIVE_STATE_LL_NN NOT NULL,
-  SESSION_ID                  INTEGER,
-  BYTES_TRANSFERED_IN_SESSION INTEGER,
-  FILES_TRANSFERED_IN_SESSION INTEGER,
-  LATEST_BANDWIDTH            VARCHAR(100),
-  SESSION_START_TIME          INTEGER,
-  MOUNT_START_TIME            INTEGER,
-  TRANSFER_START_TIME         INTEGER,
-  UNLOAD_START_TIME           INTEGER,
-  UNMOUNT_START_TIME          INTEGER,
-  DRAINING_START_TIME         INTEGER,
-  DOWN_OR_UP_START_TIME       INTEGER,
-  PROBE_START_TIME            INTEGER,
-  CLEANUP_START_TIME          INTEGER,
-  START_START_TIME            INTEGER,
-  SHUTDOWN_TIME               INTEGER,
-  MOUNT_TYPE                  INTEGER      CONSTRAINT DRIVE_STATE_MT_NN NOT NULL,
-  DRIVE_STATUS                VARCHAR(100)    DEFAULT 'UNKNOWN' CONSTRAINT DRIVE_STATE_DS_NN NOT NULL,
-  DESIRED_UP                  CHAR(1)         DEFAULT '0' CONSTRAINT DRIVE_STATE_DU_NN  NOT NULL,
-  DESIRED_FORCE_DOWN          CHAR(1)         DEFAULT '0' CONSTRAINT DRIVE_STATE_DFD_NN NOT NULL,
-  REASON_UP_DOWN              VARCHAR(1000),
-  CURRENT_VID                 VARCHAR(100),
-  CTA_VERSION                 VARCHAR(100),
-  CURRENT_PRIORITY            INTEGER,
-  CURRENT_ACTIVITY            VARCHAR(100),
-  CURRENT_ACTIVITY_WEIGHT     VARCHAR(100),
-  CURRENT_TAPE_POOL           VARCHAR(100),
-  NEXT_MOUNT_TYPE             INTEGER,
-  NEXT_VID                    VARCHAR(100),
-  NEXT_TAPE_POOL              VARCHAR(100),
-  NEXT_PRIORITY               INTEGER,
-  NEXT_ACTIVITY               VARCHAR(100),
-  NEXT_ACTIVITY_WEIGHT        VARCHAR(100),
-  DEV_FILE_NAME               VARCHAR(100),
-  RAW_LIBRARY_SLOT            VARCHAR(100),
-  CURRENT_VO                  VARCHAR(100),
-  NEXT_VO                     VARCHAR(100),
-  USER_COMMENT                VARCHAR(1000),
-  CREATION_LOG_USER_NAME      VARCHAR(100),
-  CREATION_LOG_HOST_NAME      VARCHAR(100),
-  CREATION_LOG_TIME           INTEGER,
-  LAST_UPDATE_USER_NAME       VARCHAR(100),
-  LAST_UPDATE_HOST_NAME       VARCHAR(100),
-  LAST_UPDATE_TIME            INTEGER,
-  DISK_SYSTEM_NAME            VARCHAR(100)       CONSTRAINT DRIVE_STATE_DSN_NN NOT NULL,
-  RESERVED_BYTES              INTEGER         CONSTRAINT DRIVE_STATE_RB_NN  NOT NULL,
-  CONSTRAINT DRIVE_STATE_DN_PK PRIMARY KEY(DRIVE_NAME),
-  CONSTRAINT DRIVE_STATE_DU_BOOL_CK CHECK(DESIRED_UP IN ('0', '1')),
-  CONSTRAINT DRIVE_STATE_DFD_BOOL_CK CHECK(DESIRED_FORCE_DOWN IN ('0', '1')),
-  CONSTRAINT DRIVE_STATE_DS_STRING_CK CHECK(DRIVE_STATUS IN ('DOWN', 'UP', 'PROBING', 'STARTING',
-  'MOUNTING', 'TRANSFERING', 'UNLOADING', 'UNMOUNTING', 'DRAININGTODISK', 'CLEANINGUP', 'SHUTDOWN',
-  'UNKNOWN'))
-);
-
 CREATE TABLE DRIVE_STATE (
   DRIVE_NAME                  VARCHAR(100)       CONSTRAINT DRIVE_DN_NN NOT NULL,
   HOST                        VARCHAR(100)       CONSTRAINT DRIVE_H_NN  NOT NULL,
@@ -477,9 +420,9 @@ CREATE TABLE DRIVE_STATE (
   LAST_UPDATE_USER_NAME       VARCHAR(100),
   LAST_UPDATE_HOST_NAME       VARCHAR(100),
   LAST_UPDATE_TIME            INTEGER,
-  DISK_SYSTEM_NAME            VARCHAR(100)       CONSTRAINT DRIVE_DSN_NN NOT NULL,
-  RESERVED_BYTES              INTEGER         CONSTRAINT DRIVE_RB_NN  NOT NULL,
-  RESERVATION_SESSION_ID      INTEGER         CONSTRAINT DRIVE_RSI_NN  NOT NULL,
+  DISK_SYSTEM_NAME            VARCHAR(100),
+  RESERVED_BYTES              INTEGER,
+  RESERVATION_SESSION_ID      INTEGER,
   CONSTRAINT DRIVE_DN_PK PRIMARY KEY(DRIVE_NAME),
   CONSTRAINT DRIVE_DU_BOOL_CK CHECK(DESIRED_UP IN ('0', '1')),
   CONSTRAINT DRIVE_DFD_BOOL_CK CHECK(DESIRED_FORCE_DOWN IN ('0', '1')),
diff --git a/catalogue/AllCatalogueSchema.hpp b/catalogue/AllCatalogueSchema.hpp
index ad52a5c523..8ebf83c13d 100644
--- a/catalogue/AllCatalogueSchema.hpp
+++ b/catalogue/AllCatalogueSchema.hpp
@@ -15222,63 +15222,6 @@ namespace catalogue{
   "  CONSTRAINT DRIVE_CONFIG_DN_PK PRIMARY KEY(KEY_NAME, DRIVE_NAME)"
   ");"
   ""
-  "CREATE TABLE TAPE_DRIVE ("
-  "  DRIVE_NAME                  VARCHAR2(100)       CONSTRAINT DRIVE_STATE_DN_NN NOT NULL,"
-  "  HOST                        VARCHAR2(100)       CONSTRAINT DRIVE_STATE_H_NN  NOT NULL,"
-  "  LOGICAL_LIBRARY             VARCHAR2(100)       CONSTRAINT DRIVE_STATE_LL_NN NOT NULL,"
-  "  SESSION_ID                  NUMERIC(20, 0),"
-  "  BYTES_TRANSFERED_IN_SESSION NUMERIC(20, 0),"
-  "  FILES_TRANSFERED_IN_SESSION NUMERIC(20, 0),"
-  "  LATEST_BANDWIDTH            VARCHAR2(100),"
-  "  SESSION_START_TIME          NUMERIC(20, 0),"
-  "  MOUNT_START_TIME            NUMERIC(20, 0),"
-  "  TRANSFER_START_TIME         NUMERIC(20, 0),"
-  "  UNLOAD_START_TIME           NUMERIC(20, 0),"
-  "  UNMOUNT_START_TIME          NUMERIC(20, 0),"
-  "  DRAINING_START_TIME         NUMERIC(20, 0),"
-  "  DOWN_OR_UP_START_TIME       NUMERIC(20, 0),"
-  "  PROBE_START_TIME            NUMERIC(20, 0),"
-  "  CLEANUP_START_TIME          NUMERIC(20, 0),"
-  "  START_START_TIME            NUMERIC(20, 0),"
-  "  SHUTDOWN_TIME               NUMERIC(20, 0),"
-  "  MOUNT_TYPE                  NUMERIC(10, 0)      CONSTRAINT DRIVE_STATE_MT_NN NOT NULL,"
-  "  DRIVE_STATUS                VARCHAR2(100)    DEFAULT 'UNKNOWN' CONSTRAINT DRIVE_STATE_DS_NN NOT NULL,"
-  "  DESIRED_UP                  CHAR(1)         DEFAULT '0' CONSTRAINT DRIVE_STATE_DU_NN  NOT NULL,"
-  "  DESIRED_FORCE_DOWN          CHAR(1)         DEFAULT '0' CONSTRAINT DRIVE_STATE_DFD_NN NOT NULL,"
-  "  REASON_UP_DOWN              VARCHAR2(1000),"
-  "  CURRENT_VID                 VARCHAR2(100),"
-  "  CTA_VERSION                 VARCHAR2(100),"
-  "  CURRENT_PRIORITY            NUMERIC(20, 0),"
-  "  CURRENT_ACTIVITY            VARCHAR2(100),"
-  "  CURRENT_ACTIVITY_WEIGHT     VARCHAR2(100),"
-  "  CURRENT_TAPE_POOL           VARCHAR2(100),"
-  "  NEXT_MOUNT_TYPE             NUMERIC(10, 0),"
-  "  NEXT_VID                    VARCHAR2(100),"
-  "  NEXT_TAPE_POOL              VARCHAR2(100),"
-  "  NEXT_PRIORITY               NUMERIC(20, 0),"
-  "  NEXT_ACTIVITY               VARCHAR2(100),"
-  "  NEXT_ACTIVITY_WEIGHT        VARCHAR2(100),"
-  "  DEV_FILE_NAME               VARCHAR2(100),"
-  "  RAW_LIBRARY_SLOT            VARCHAR2(100),"
-  "  CURRENT_VO                  VARCHAR2(100),"
-  "  NEXT_VO                     VARCHAR2(100),"
-  "  USER_COMMENT                VARCHAR2(1000),"
-  "  CREATION_LOG_USER_NAME      VARCHAR2(100),"
-  "  CREATION_LOG_HOST_NAME      VARCHAR2(100),"
-  "  CREATION_LOG_TIME           NUMERIC(20, 0),"
-  "  LAST_UPDATE_USER_NAME       VARCHAR2(100),"
-  "  LAST_UPDATE_HOST_NAME       VARCHAR2(100),"
-  "  LAST_UPDATE_TIME            NUMERIC(20, 0),"
-  "  DISK_SYSTEM_NAME            VARCHAR2(100)       CONSTRAINT DRIVE_STATE_DSN_NN NOT NULL,"
-  "  RESERVED_BYTES              NUMERIC(20, 0)         CONSTRAINT DRIVE_STATE_RB_NN  NOT NULL,"
-  "  CONSTRAINT DRIVE_STATE_DN_PK PRIMARY KEY(DRIVE_NAME),"
-  "  CONSTRAINT DRIVE_STATE_DU_BOOL_CK CHECK(DESIRED_UP IN ('0', '1')),"
-  "  CONSTRAINT DRIVE_STATE_DFD_BOOL_CK CHECK(DESIRED_FORCE_DOWN IN ('0', '1')),"
-  "  CONSTRAINT DRIVE_STATE_DS_STRING_CK CHECK(DRIVE_STATUS IN ('DOWN', 'UP', 'PROBING', 'STARTING',"
-  "  'MOUNTING', 'TRANSFERING', 'UNLOADING', 'UNMOUNTING', 'DRAININGTODISK', 'CLEANINGUP', 'SHUTDOWN',"
-  "  'UNKNOWN'))"
-  ");"
-  ""
   "CREATE TABLE DRIVE_STATE ("
   "  DRIVE_NAME                  VARCHAR2(100)       CONSTRAINT DRIVE_DN_NN NOT NULL,"
   "  HOST                        VARCHAR2(100)       CONSTRAINT DRIVE_H_NN  NOT NULL,"
@@ -15324,9 +15267,9 @@ namespace catalogue{
   "  LAST_UPDATE_USER_NAME       VARCHAR2(100),"
   "  LAST_UPDATE_HOST_NAME       VARCHAR2(100),"
   "  LAST_UPDATE_TIME            NUMERIC(20, 0),"
-  "  DISK_SYSTEM_NAME            VARCHAR2(100)       CONSTRAINT DRIVE_DSN_NN NOT NULL,"
-  "  RESERVED_BYTES              NUMERIC(20, 0)         CONSTRAINT DRIVE_RB_NN  NOT NULL,"
-  "  RESERVATION_SESSION_ID      NUMERIC(20, 0)         CONSTRAINT DRIVE_RSI_NN  NOT NULL,"
+  "  DISK_SYSTEM_NAME            VARCHAR2(100),"
+  "  RESERVED_BYTES              NUMERIC(20, 0),"
+  "  RESERVATION_SESSION_ID      NUMERIC(20, 0),"
   "  CONSTRAINT DRIVE_DN_PK PRIMARY KEY(DRIVE_NAME),"
   "  CONSTRAINT DRIVE_DU_BOOL_CK CHECK(DESIRED_UP IN ('0', '1')),"
   "  CONSTRAINT DRIVE_DFD_BOOL_CK CHECK(DESIRED_FORCE_DOWN IN ('0', '1')),"
@@ -15727,63 +15670,6 @@ namespace catalogue{
   "  CONSTRAINT DRIVE_CONFIG_DN_PK PRIMARY KEY(KEY_NAME, DRIVE_NAME)"
   ");"
   ""
-  "CREATE TABLE TAPE_DRIVE ("
-  "  DRIVE_NAME                  VARCHAR(100)       CONSTRAINT DRIVE_STATE_DN_NN NOT NULL,"
-  "  HOST                        VARCHAR(100)       CONSTRAINT DRIVE_STATE_H_NN  NOT NULL,"
-  "  LOGICAL_LIBRARY             VARCHAR(100)       CONSTRAINT DRIVE_STATE_LL_NN NOT NULL,"
-  "  SESSION_ID                  INTEGER,"
-  "  BYTES_TRANSFERED_IN_SESSION INTEGER,"
-  "  FILES_TRANSFERED_IN_SESSION INTEGER,"
-  "  LATEST_BANDWIDTH            VARCHAR(100),"
-  "  SESSION_START_TIME          INTEGER,"
-  "  MOUNT_START_TIME            INTEGER,"
-  "  TRANSFER_START_TIME         INTEGER,"
-  "  UNLOAD_START_TIME           INTEGER,"
-  "  UNMOUNT_START_TIME          INTEGER,"
-  "  DRAINING_START_TIME         INTEGER,"
-  "  DOWN_OR_UP_START_TIME       INTEGER,"
-  "  PROBE_START_TIME            INTEGER,"
-  "  CLEANUP_START_TIME          INTEGER,"
-  "  START_START_TIME            INTEGER,"
-  "  SHUTDOWN_TIME               INTEGER,"
-  "  MOUNT_TYPE                  INTEGER      CONSTRAINT DRIVE_STATE_MT_NN NOT NULL,"
-  "  DRIVE_STATUS                VARCHAR(100)    DEFAULT 'UNKNOWN' CONSTRAINT DRIVE_STATE_DS_NN NOT NULL,"
-  "  DESIRED_UP                  CHAR(1)         DEFAULT '0' CONSTRAINT DRIVE_STATE_DU_NN  NOT NULL,"
-  "  DESIRED_FORCE_DOWN          CHAR(1)         DEFAULT '0' CONSTRAINT DRIVE_STATE_DFD_NN NOT NULL,"
-  "  REASON_UP_DOWN              VARCHAR(1000),"
-  "  CURRENT_VID                 VARCHAR(100),"
-  "  CTA_VERSION                 VARCHAR(100),"
-  "  CURRENT_PRIORITY            INTEGER,"
-  "  CURRENT_ACTIVITY            VARCHAR(100),"
-  "  CURRENT_ACTIVITY_WEIGHT     VARCHAR(100),"
-  "  CURRENT_TAPE_POOL           VARCHAR(100),"
-  "  NEXT_MOUNT_TYPE             INTEGER,"
-  "  NEXT_VID                    VARCHAR(100),"
-  "  NEXT_TAPE_POOL              VARCHAR(100),"
-  "  NEXT_PRIORITY               INTEGER,"
-  "  NEXT_ACTIVITY               VARCHAR(100),"
-  "  NEXT_ACTIVITY_WEIGHT        VARCHAR(100),"
-  "  DEV_FILE_NAME               VARCHAR(100),"
-  "  RAW_LIBRARY_SLOT            VARCHAR(100),"
-  "  CURRENT_VO                  VARCHAR(100),"
-  "  NEXT_VO                     VARCHAR(100),"
-  "  USER_COMMENT                VARCHAR(1000),"
-  "  CREATION_LOG_USER_NAME      VARCHAR(100),"
-  "  CREATION_LOG_HOST_NAME      VARCHAR(100),"
-  "  CREATION_LOG_TIME           INTEGER,"
-  "  LAST_UPDATE_USER_NAME       VARCHAR(100),"
-  "  LAST_UPDATE_HOST_NAME       VARCHAR(100),"
-  "  LAST_UPDATE_TIME            INTEGER,"
-  "  DISK_SYSTEM_NAME            VARCHAR(100)       CONSTRAINT DRIVE_STATE_DSN_NN NOT NULL,"
-  "  RESERVED_BYTES              INTEGER         CONSTRAINT DRIVE_STATE_RB_NN  NOT NULL,"
-  "  CONSTRAINT DRIVE_STATE_DN_PK PRIMARY KEY(DRIVE_NAME),"
-  "  CONSTRAINT DRIVE_STATE_DU_BOOL_CK CHECK(DESIRED_UP IN ('0', '1')),"
-  "  CONSTRAINT DRIVE_STATE_DFD_BOOL_CK CHECK(DESIRED_FORCE_DOWN IN ('0', '1')),"
-  "  CONSTRAINT DRIVE_STATE_DS_STRING_CK CHECK(DRIVE_STATUS IN ('DOWN', 'UP', 'PROBING', 'STARTING',"
-  "  'MOUNTING', 'TRANSFERING', 'UNLOADING', 'UNMOUNTING', 'DRAININGTODISK', 'CLEANINGUP', 'SHUTDOWN',"
-  "  'UNKNOWN'))"
-  ");"
-  ""
   "CREATE TABLE DRIVE_STATE ("
   "  DRIVE_NAME                  VARCHAR(100)       CONSTRAINT DRIVE_DN_NN NOT NULL,"
   "  HOST                        VARCHAR(100)       CONSTRAINT DRIVE_H_NN  NOT NULL,"
@@ -15829,9 +15715,9 @@ namespace catalogue{
   "  LAST_UPDATE_USER_NAME       VARCHAR(100),"
   "  LAST_UPDATE_HOST_NAME       VARCHAR(100),"
   "  LAST_UPDATE_TIME            INTEGER,"
-  "  DISK_SYSTEM_NAME            VARCHAR(100)       CONSTRAINT DRIVE_DSN_NN NOT NULL,"
-  "  RESERVED_BYTES              INTEGER         CONSTRAINT DRIVE_RB_NN  NOT NULL,"
-  "  RESERVATION_SESSION_ID      INTEGER         CONSTRAINT DRIVE_RSI_NN  NOT NULL,"
+  "  DISK_SYSTEM_NAME            VARCHAR(100),"
+  "  RESERVED_BYTES              INTEGER,"
+  "  RESERVATION_SESSION_ID      INTEGER,"
   "  CONSTRAINT DRIVE_DN_PK PRIMARY KEY(DRIVE_NAME),"
   "  CONSTRAINT DRIVE_DU_BOOL_CK CHECK(DESIRED_UP IN ('0', '1')),"
   "  CONSTRAINT DRIVE_DFD_BOOL_CK CHECK(DESIRED_FORCE_DOWN IN ('0', '1')),"
@@ -16257,63 +16143,6 @@ namespace catalogue{
   "  CONSTRAINT DRIVE_CONFIG_DN_PK PRIMARY KEY(KEY_NAME, DRIVE_NAME)"
   ");"
   ""
-  "CREATE TABLE TAPE_DRIVE ("
-  "  DRIVE_NAME                  VARCHAR(100)       CONSTRAINT DRIVE_STATE_DN_NN NOT NULL,"
-  "  HOST                        VARCHAR(100)       CONSTRAINT DRIVE_STATE_H_NN  NOT NULL,"
-  "  LOGICAL_LIBRARY             VARCHAR(100)       CONSTRAINT DRIVE_STATE_LL_NN NOT NULL,"
-  "  SESSION_ID                  NUMERIC(20, 0),"
-  "  BYTES_TRANSFERED_IN_SESSION NUMERIC(20, 0),"
-  "  FILES_TRANSFERED_IN_SESSION NUMERIC(20, 0),"
-  "  LATEST_BANDWIDTH            VARCHAR(100),"
-  "  SESSION_START_TIME          NUMERIC(20, 0),"
-  "  MOUNT_START_TIME            NUMERIC(20, 0),"
-  "  TRANSFER_START_TIME         NUMERIC(20, 0),"
-  "  UNLOAD_START_TIME           NUMERIC(20, 0),"
-  "  UNMOUNT_START_TIME          NUMERIC(20, 0),"
-  "  DRAINING_START_TIME         NUMERIC(20, 0),"
-  "  DOWN_OR_UP_START_TIME       NUMERIC(20, 0),"
-  "  PROBE_START_TIME            NUMERIC(20, 0),"
-  "  CLEANUP_START_TIME          NUMERIC(20, 0),"
-  "  START_START_TIME            NUMERIC(20, 0),"
-  "  SHUTDOWN_TIME               NUMERIC(20, 0),"
-  "  MOUNT_TYPE                  NUMERIC(10, 0)      CONSTRAINT DRIVE_STATE_MT_NN NOT NULL,"
-  "  DRIVE_STATUS                VARCHAR(100)    DEFAULT 'UNKNOWN' CONSTRAINT DRIVE_STATE_DS_NN NOT NULL,"
-  "  DESIRED_UP                  CHAR(1)         DEFAULT '0' CONSTRAINT DRIVE_STATE_DU_NN  NOT NULL,"
-  "  DESIRED_FORCE_DOWN          CHAR(1)         DEFAULT '0' CONSTRAINT DRIVE_STATE_DFD_NN NOT NULL,"
-  "  REASON_UP_DOWN              VARCHAR(1000),"
-  "  CURRENT_VID                 VARCHAR(100),"
-  "  CTA_VERSION                 VARCHAR(100),"
-  "  CURRENT_PRIORITY            NUMERIC(20, 0),"
-  "  CURRENT_ACTIVITY            VARCHAR(100),"
-  "  CURRENT_ACTIVITY_WEIGHT     VARCHAR(100),"
-  "  CURRENT_TAPE_POOL           VARCHAR(100),"
-  "  NEXT_MOUNT_TYPE             NUMERIC(10, 0),"
-  "  NEXT_VID                    VARCHAR(100),"
-  "  NEXT_TAPE_POOL              VARCHAR(100),"
-  "  NEXT_PRIORITY               NUMERIC(20, 0),"
-  "  NEXT_ACTIVITY               VARCHAR(100),"
-  "  NEXT_ACTIVITY_WEIGHT        VARCHAR(100),"
-  "  DEV_FILE_NAME               VARCHAR(100),"
-  "  RAW_LIBRARY_SLOT            VARCHAR(100),"
-  "  CURRENT_VO                  VARCHAR(100),"
-  "  NEXT_VO                     VARCHAR(100),"
-  "  USER_COMMENT                VARCHAR(1000),"
-  "  CREATION_LOG_USER_NAME      VARCHAR(100),"
-  "  CREATION_LOG_HOST_NAME      VARCHAR(100),"
-  "  CREATION_LOG_TIME           NUMERIC(20, 0),"
-  "  LAST_UPDATE_USER_NAME       VARCHAR(100),"
-  "  LAST_UPDATE_HOST_NAME       VARCHAR(100),"
-  "  LAST_UPDATE_TIME            NUMERIC(20, 0),"
-  "  DISK_SYSTEM_NAME            VARCHAR(100)       CONSTRAINT DRIVE_STATE_DSN_NN NOT NULL,"
-  "  RESERVED_BYTES              NUMERIC(20, 0)         CONSTRAINT DRIVE_STATE_RB_NN  NOT NULL,"
-  "  CONSTRAINT DRIVE_STATE_DN_PK PRIMARY KEY(DRIVE_NAME),"
-  "  CONSTRAINT DRIVE_STATE_DU_BOOL_CK CHECK(DESIRED_UP IN ('0', '1')),"
-  "  CONSTRAINT DRIVE_STATE_DFD_BOOL_CK CHECK(DESIRED_FORCE_DOWN IN ('0', '1')),"
-  "  CONSTRAINT DRIVE_STATE_DS_STRING_CK CHECK(DRIVE_STATUS IN ('DOWN', 'UP', 'PROBING', 'STARTING',"
-  "  'MOUNTING', 'TRANSFERING', 'UNLOADING', 'UNMOUNTING', 'DRAININGTODISK', 'CLEANINGUP', 'SHUTDOWN',"
-  "  'UNKNOWN'))"
-  ");"
-  ""
   "CREATE TABLE DRIVE_STATE ("
   "  DRIVE_NAME                  VARCHAR(100)       CONSTRAINT DRIVE_DN_NN NOT NULL,"
   "  HOST                        VARCHAR(100)       CONSTRAINT DRIVE_H_NN  NOT NULL,"
@@ -16359,9 +16188,9 @@ namespace catalogue{
   "  LAST_UPDATE_USER_NAME       VARCHAR(100),"
   "  LAST_UPDATE_HOST_NAME       VARCHAR(100),"
   "  LAST_UPDATE_TIME            NUMERIC(20, 0),"
-  "  DISK_SYSTEM_NAME            VARCHAR(100)       CONSTRAINT DRIVE_DSN_NN NOT NULL,"
-  "  RESERVED_BYTES              NUMERIC(20, 0)         CONSTRAINT DRIVE_RB_NN  NOT NULL,"
-  "  RESERVATION_SESSION_ID      NUMERIC(20, 0)         CONSTRAINT DRIVE_RSI_NN  NOT NULL,"
+  "  DISK_SYSTEM_NAME            VARCHAR(100),"
+  "  RESERVED_BYTES              NUMERIC(20, 0),"
+  "  RESERVATION_SESSION_ID      NUMERIC(20, 0),"
   "  CONSTRAINT DRIVE_DN_PK PRIMARY KEY(DRIVE_NAME),"
   "  CONSTRAINT DRIVE_DU_BOOL_CK CHECK(DESIRED_UP IN ('0', '1')),"
   "  CONSTRAINT DRIVE_DFD_BOOL_CK CHECK(DESIRED_FORCE_DOWN IN ('0', '1')),"
diff --git a/catalogue/CatalogueTest.cpp b/catalogue/CatalogueTest.cpp
index 640d7fdee2..1ae8f83a61 100644
--- a/catalogue/CatalogueTest.cpp
+++ b/catalogue/CatalogueTest.cpp
@@ -229,9 +229,6 @@ namespace {
     tapeDrive.driveStatus = cta::common::dataStructures::DriveStatus::Up;
     tapeDrive.desiredUp = false;
     tapeDrive.desiredForceDown = false;
-    tapeDrive.diskSystemName = "dummyDiskSystemName";
-    tapeDrive.reservedBytes = 694498291384;
-    tapeDrive.reservationSessionId = 0;
     return tapeDrive;
   }
 
@@ -17542,8 +17539,9 @@ TEST_P(cta_catalogue_CatalogueTest, updateTapeDriveStatusSameAsPrevious) {
   ASSERT_FALSE(storedTapeDrive.value().bytesTransferedInSession);
   ASSERT_FALSE(storedTapeDrive.value().filesTransferedInSession);
   // Disk reservations are not updated by updateTapeDriveStatus()
-  ASSERT_EQ(tapeDrive.diskSystemName, storedTapeDrive.value().diskSystemName);
-  ASSERT_EQ(tapeDrive.reservedBytes, storedTapeDrive.value().reservedBytes);
+  ASSERT_FALSE(storedTapeDrive.value().diskSystemName);
+  ASSERT_FALSE(storedTapeDrive.value().reservedBytes);
+  ASSERT_FALSE(storedTapeDrive.value().reservationSessionId);
 
   m_catalogue->deleteTapeDrive(tapeDrive.driveName);
 }
@@ -17592,8 +17590,9 @@ TEST_P(cta_catalogue_CatalogueTest, updateTapeDriveStatusSameTransferingAsPrevio
   ASSERT_EQ(inputs.byteTransferred, storedTapeDrive.value().bytesTransferedInSession.value());
   ASSERT_EQ(inputs.filesTransferred, storedTapeDrive.value().filesTransferedInSession.value());
   // It will keep names and bytes, because it isn't in state UP
-  ASSERT_NE(storedTapeDrive.value().reservedBytes, 0);
-  ASSERT_NE(storedTapeDrive.value().diskSystemName, "");
+  ASSERT_FALSE(storedTapeDrive.value().reservedBytes);
+  ASSERT_FALSE(storedTapeDrive.value().reservationSessionId);
+  ASSERT_FALSE(storedTapeDrive.value().diskSystemName);
   ASSERT_EQ(storedTapeDrive.value().sessionElapsedTime.value(), inputs.reportTime - tapeDrive.sessionStartTime.value()); // Check elapsed time
 
   m_catalogue->deleteTapeDrive(tapeDrive.driveName);
@@ -17787,8 +17786,9 @@ TEST_P(cta_catalogue_CatalogueTest, updateTapeDriveStatusUpCleanSpaceReservation
     tapeDrivesState->updateDriveStatus(driveInfo, inputs, dummyLc);
   }
   const auto storedTapeDrive = m_catalogue->getTapeDrive(tapeDrive.driveName);
-  ASSERT_TRUE(storedTapeDrive.value().diskSystemName.empty());
-  ASSERT_EQ(storedTapeDrive.value().reservedBytes, 0);
+  ASSERT_FALSE(storedTapeDrive.value().diskSystemName);
+  ASSERT_FALSE(storedTapeDrive.value().reservedBytes);
+  ASSERT_FALSE(storedTapeDrive.value().reservationSessionId);
 
   m_catalogue->deleteTapeDrive(tapeDrive.driveName);
 }
@@ -17799,8 +17799,9 @@ TEST_P(cta_catalogue_CatalogueTest, updateTapeDriveStatusUpDontCleanSpaceReserva
   const std::string tapeDriveName = "VDSTK11";
   auto tapeDrive = getTapeDriveWithMandatoryElements(tapeDriveName);
   tapeDrive.driveStatus = common::dataStructures::DriveStatus::Down;  // To force a change of state
-  tapeDrive.diskSystemName = "";
-  tapeDrive.reservedBytes = 123456789;
+  tapeDrive.diskSystemName = nullopt_t();
+  tapeDrive.reservedBytes = nullopt_t();
+  tapeDrive.reservationSessionId = nullopt_t();
   m_catalogue->createTapeDrive(tapeDrive);
 
   ReportDriveStatusInputs inputs;
@@ -17825,8 +17826,9 @@ TEST_P(cta_catalogue_CatalogueTest, updateTapeDriveStatusUpDontCleanSpaceReserva
     tapeDrivesState->updateDriveStatus(driveInfo, inputs, dummyLc);
   }
   const auto storedTapeDrive = m_catalogue->getTapeDrive(tapeDrive.driveName);
-  ASSERT_TRUE(storedTapeDrive.value().diskSystemName.empty());
-  ASSERT_EQ(storedTapeDrive.value().reservedBytes, tapeDrive.reservedBytes);
+  ASSERT_FALSE(storedTapeDrive.value().diskSystemName);
+  ASSERT_FALSE(storedTapeDrive.value().reservedBytes);
+  ASSERT_FALSE(storedTapeDrive.value().reservationSessionId);
 
   m_catalogue->deleteTapeDrive(tapeDrive.driveName);
 }
diff --git a/catalogue/DummyCatalogue.hpp b/catalogue/DummyCatalogue.hpp
index 451417e802..57dff49450 100644
--- a/catalogue/DummyCatalogue.hpp
+++ b/catalogue/DummyCatalogue.hpp
@@ -321,8 +321,10 @@ public:
     const auto tdNames = getTapeDriveNames();
     for (const auto& driveName : tdNames) {
       const auto tdStatus = getTapeDrive(driveName);
-      //no need to check key, operator[] initializes missing values at zero for scalar types
-      ret[tdStatus.value().diskSystemName] += tdStatus.value().reservedBytes;
+      if (tdStatus.value().diskSystemName) {
+        //no need to check key, operator[] initializes missing values at zero for scalar types
+        ret[tdStatus.value().diskSystemName.value()] += tdStatus.value().reservedBytes.value();
+      }
     }
     return ret;
   }
@@ -340,12 +342,18 @@ public:
     auto tdStatus = getTapeDrive(driveName);
     if (!tdStatus) return;
 
+    if (!tdStatus.value().reservationSessionId) {
+      tdStatus.value().reservationSessionId = mountId;
+      tdStatus.value().reservedBytes = 0;
+    }
+    
     if (tdStatus.value().reservationSessionId != mountId) {
-      return;
+      tdStatus.value().reservationSessionId = mountId;
+      tdStatus.value().reservedBytes = 0;
     }
     
     tdStatus.value().diskSystemName = diskSpaceReservation.begin()->first;
-    tdStatus.value().reservedBytes += diskSpaceReservation.begin()->second;
+    tdStatus.value().reservedBytes.value() += diskSpaceReservation.begin()->second;
     modifyTapeDrive(tdStatus.value());
   }
 
@@ -362,6 +370,9 @@ public:
     auto tdStatus = getTapeDrive(driveName);
     
     if (!tdStatus) return;
+    if (!tdStatus.value().reservationSessionId) {
+      return;
+    }
     if (tdStatus.value().reservationSessionId != mountId) {
       return;
     }
@@ -369,7 +380,7 @@ public:
     if (bytes > tdStatus.value().reservedBytes) throw NegativeDiskSpaceReservationReached(
       "In DriveState::subtractDiskSpaceReservation(): we would reach a negative reservation size.");
     tdStatus.value().diskSystemName = diskSpaceReservation.begin()->first;
-    tdStatus.value().reservedBytes -= bytes;
+    tdStatus.value().reservedBytes.value() -= bytes;
     modifyTapeDrive(tdStatus.value());
   }
 
diff --git a/catalogue/RdbmsCatalogue.cpp b/catalogue/RdbmsCatalogue.cpp
index df9ecac537..790ca73862 100644
--- a/catalogue/RdbmsCatalogue.cpp
+++ b/catalogue/RdbmsCatalogue.cpp
@@ -10474,9 +10474,9 @@ void RdbmsCatalogue::createTapeDrive(const common::dataStructures::TapeDrive &ta
       .add("lastModificationLog_username", tapeDrive.lastModificationLog
         ? tapeDrive.lastModificationLog.value().time : 0)
 
-      .add("diskSystemName", tapeDrive.diskSystemName)
-      .add("reservedBytes", tapeDrive.reservedBytes)
-      .add("reservationSessionId", tapeDrive.reservationSessionId);
+      .add("diskSystemName", tapeDrive.diskSystemName ? tapeDrive.diskSystemName.value() : "")
+      .add("reservedBytes", tapeDrive.reservedBytes ? tapeDrive.reservedBytes.value() : 0)
+      .add("reservationSessionId", tapeDrive.reservationSessionId ? tapeDrive.reservationSessionId.value() : 0);
 
     lc.log(log::INFO, "Catalogue - created tape drive");
   } catch(exception::Exception &ex) {
@@ -10569,11 +10569,10 @@ void RdbmsCatalogue::settingSqlTapeDriveValues(cta::rdbms::Stmt *stmt,
     setEntryLog(":LAST_UPDATE", nullopt_t(), nullopt_t(), nullopt_t());
   }
 
-  // Why not just remove the NOT NULL constraint in the DB?
-  stmt->bindString(":DISK_SYSTEM_NAME", tapeDrive.diskSystemName.empty() ? "NULL" : tapeDrive.diskSystemName);
+  setOptionalString(":DISK_SYSTEM_NAME", tapeDrive.diskSystemName);
   stmt->bindUint64(":RESERVED_BYTES", tapeDrive.reservedBytes);
   stmt->bindUint64(":RESERVATION_SESSION_ID", tapeDrive.reservationSessionId);
-  
+
 }
 
 void RdbmsCatalogue::deleteTapeDrive(const std::string &tapeDriveName) {
@@ -10667,10 +10666,9 @@ common::dataStructures::TapeDrive RdbmsCatalogue::gettingSqlTapeDriveValues(cta:
   tapeDrive.currentVo = rset->columnOptionalString("CURRENT_VO");
   tapeDrive.nextVo = rset->columnOptionalString("NEXT_VO");
 
-  const std::string diskSystemName = rset->columnString("DISK_SYSTEM_NAME");
-  tapeDrive.diskSystemName = (diskSystemName == "NULL" ? "" : diskSystemName);
-  tapeDrive.reservedBytes = rset->columnUint64("RESERVED_BYTES");
-  tapeDrive.reservationSessionId = rset->columnUint64("RESERVATION_SESSION_ID");
+  tapeDrive.diskSystemName = rset->columnOptionalString("DISK_SYSTEM_NAME");
+  tapeDrive.reservedBytes = rset->columnOptionalUint64("RESERVED_BYTES");
+  tapeDrive.reservationSessionId = rset->columnOptionalUint64("RESERVATION_SESSION_ID");
 
   tapeDrive.userComment = rset->columnOptionalString("USER_COMMENT");
   auto setOptionEntryLog = [&rset](const std::string &username, const std::string &host,
@@ -11050,8 +11048,9 @@ void RdbmsCatalogue::updateTapeDriveStatus(const common::dataStructures::TapeDri
     }
     // If the drive is a state incompatible with space reservation, make sure there is none:
     if(tapeDrive.driveStatus == common::dataStructures::DriveStatus::Up) {
-      sql += "DISK_SYSTEM_NAME = CASE WHEN DISK_SYSTEM_NAME <> 'NULL' THEN 'NULL' ELSE DISK_SYSTEM_NAME END,";
-      sql += "RESERVED_BYTES = CASE WHEN DISK_SYSTEM_NAME <> 'NULL' THEN 0 ELSE RESERVED_BYTES END,";
+      sql += "DISK_SYSTEM_NAME = NULL,";
+      sql += "RESERVED_BYTES = CASE WHEN DISK_SYSTEM_NAME IS NOT NULL THEN NULL ELSE RESERVED_BYTES END,";
+      sql += "RESERVATION_SESSION_ID = CASE WHEN DISK_SYSTEM_NAME IS NOT NULL THEN NULL ELSE RESERVATION_SESSION_ID END,";
       sql += "DRIVE_STATUS = CASE WHEN DESIRED_UP = '0' THEN 'DOWN' ELSE 'UP' END,";
     } else {
       sql += "DRIVE_STATUS = '" + driveStatusStr + "',";
@@ -11363,8 +11362,10 @@ std::map<std::string, uint64_t> RdbmsCatalogue::getDiskSpaceReservations() const
   const auto tdNames = getTapeDriveNames();
   for (const auto& driveName : tdNames) {
     const auto tdStatus = getTapeDrive(driveName);
-    //no need to check key, operator[] initializes missing values at zero for scalar types
-    ret[tdStatus.value().diskSystemName] += tdStatus.value().reservedBytes;
+    if (tdStatus.value().diskSystemName) {
+      //no need to check key, operator[] initializes missing values at zero for scalar types
+      ret[tdStatus.value().diskSystemName.value()] += tdStatus.value().reservedBytes.value();
+    }
   }
   return ret;
 }
diff --git a/catalogue/TapeDrivesCatalogueState.cpp b/catalogue/TapeDrivesCatalogueState.cpp
index fe000def64..ddf8de0c1b 100644
--- a/catalogue/TapeDrivesCatalogueState.cpp
+++ b/catalogue/TapeDrivesCatalogueState.cpp
@@ -495,8 +495,9 @@ common::dataStructures::TapeDrive TapeDrivesCatalogueState::setTapeDriveStatus(
   tapeDriveStatus.desiredForceDown = desiredState.forceDown;
   if (desiredState.reason) tapeDriveStatus.reasonUpDown = desiredState.reason;
   if (desiredState.comment) tapeDriveStatus.userComment = desiredState.comment;
-  tapeDriveStatus.diskSystemName = "NULL";
-  tapeDriveStatus.reservedBytes = 0;
+  tapeDriveStatus.diskSystemName = nullopt_t();
+  tapeDriveStatus.reservedBytes = nullopt_t();
+  tapeDriveStatus.reservationSessionId = nullopt_t();
   tapeDriveStatus.devFileName = tpConfigLine.devFilename;
   tapeDriveStatus.rawLibrarySlot = tpConfigLine.rawLibrarySlot;
   if (identity.username.empty()) {
diff --git a/catalogue/common_catalogue_schema.sql b/catalogue/common_catalogue_schema.sql
index 5cff76c8e1..369a9b07cc 100644
--- a/catalogue/common_catalogue_schema.sql
+++ b/catalogue/common_catalogue_schema.sql
@@ -354,63 +354,6 @@ CREATE TABLE DRIVE_CONFIG (
   CONSTRAINT DRIVE_CONFIG_DN_PK PRIMARY KEY(KEY_NAME, DRIVE_NAME)
 );
 
-CREATE TABLE TAPE_DRIVE (
-  DRIVE_NAME                  VARCHAR(100)       CONSTRAINT DRIVE_STATE_DN_NN NOT NULL,
-  HOST                        VARCHAR(100)       CONSTRAINT DRIVE_STATE_H_NN  NOT NULL,
-  LOGICAL_LIBRARY             VARCHAR(100)       CONSTRAINT DRIVE_STATE_LL_NN NOT NULL,
-  SESSION_ID                  UINT64TYPE,
-  BYTES_TRANSFERED_IN_SESSION UINT64TYPE,
-  FILES_TRANSFERED_IN_SESSION UINT64TYPE,
-  LATEST_BANDWIDTH            VARCHAR(100),
-  SESSION_START_TIME          UINT64TYPE,
-  MOUNT_START_TIME            UINT64TYPE,
-  TRANSFER_START_TIME         UINT64TYPE,
-  UNLOAD_START_TIME           UINT64TYPE,
-  UNMOUNT_START_TIME          UINT64TYPE,
-  DRAINING_START_TIME         UINT64TYPE,
-  DOWN_OR_UP_START_TIME       UINT64TYPE,
-  PROBE_START_TIME            UINT64TYPE,
-  CLEANUP_START_TIME          UINT64TYPE,
-  START_START_TIME            UINT64TYPE,
-  SHUTDOWN_TIME               UINT64TYPE,
-  MOUNT_TYPE                  UINT32TYPE      CONSTRAINT DRIVE_STATE_MT_NN NOT NULL,
-  DRIVE_STATUS                VARCHAR(100)    DEFAULT 'UNKNOWN' CONSTRAINT DRIVE_STATE_DS_NN NOT NULL,
-  DESIRED_UP                  CHAR(1)         DEFAULT '0' CONSTRAINT DRIVE_STATE_DU_NN  NOT NULL,
-  DESIRED_FORCE_DOWN          CHAR(1)         DEFAULT '0' CONSTRAINT DRIVE_STATE_DFD_NN NOT NULL,
-  REASON_UP_DOWN              VARCHAR(1000),
-  CURRENT_VID                 VARCHAR(100),
-  CTA_VERSION                 VARCHAR(100),
-  CURRENT_PRIORITY            UINT64TYPE,
-  CURRENT_ACTIVITY            VARCHAR(100),
-  CURRENT_ACTIVITY_WEIGHT     VARCHAR(100),
-  CURRENT_TAPE_POOL           VARCHAR(100),
-  NEXT_MOUNT_TYPE             UINT32TYPE,
-  NEXT_VID                    VARCHAR(100),
-  NEXT_TAPE_POOL              VARCHAR(100),
-  NEXT_PRIORITY               UINT64TYPE,
-  NEXT_ACTIVITY               VARCHAR(100),
-  NEXT_ACTIVITY_WEIGHT        VARCHAR(100),
-  DEV_FILE_NAME               VARCHAR(100),
-  RAW_LIBRARY_SLOT            VARCHAR(100),
-  CURRENT_VO                  VARCHAR(100),
-  NEXT_VO                     VARCHAR(100),
-  USER_COMMENT                VARCHAR(1000),
-  CREATION_LOG_USER_NAME      VARCHAR(100),
-  CREATION_LOG_HOST_NAME      VARCHAR(100),
-  CREATION_LOG_TIME           UINT64TYPE,
-  LAST_UPDATE_USER_NAME       VARCHAR(100),
-  LAST_UPDATE_HOST_NAME       VARCHAR(100),
-  LAST_UPDATE_TIME            UINT64TYPE,
-  DISK_SYSTEM_NAME            VARCHAR(100)       CONSTRAINT DRIVE_STATE_DSN_NN NOT NULL,
-  RESERVED_BYTES              UINT64TYPE         CONSTRAINT DRIVE_STATE_RB_NN  NOT NULL,
-  CONSTRAINT DRIVE_STATE_DN_PK PRIMARY KEY(DRIVE_NAME),
-  CONSTRAINT DRIVE_STATE_DU_BOOL_CK CHECK(DESIRED_UP IN ('0', '1')),
-  CONSTRAINT DRIVE_STATE_DFD_BOOL_CK CHECK(DESIRED_FORCE_DOWN IN ('0', '1')),
-  CONSTRAINT DRIVE_STATE_DS_STRING_CK CHECK(DRIVE_STATUS IN ('DOWN', 'UP', 'PROBING', 'STARTING',
-  'MOUNTING', 'TRANSFERING', 'UNLOADING', 'UNMOUNTING', 'DRAININGTODISK', 'CLEANINGUP', 'SHUTDOWN',
-  'UNKNOWN'))
-);
-
 CREATE TABLE DRIVE_STATE (
   DRIVE_NAME                  VARCHAR(100)       CONSTRAINT DRIVE_DN_NN NOT NULL,
   HOST                        VARCHAR(100)       CONSTRAINT DRIVE_H_NN  NOT NULL,
@@ -456,9 +399,9 @@ CREATE TABLE DRIVE_STATE (
   LAST_UPDATE_USER_NAME       VARCHAR(100),
   LAST_UPDATE_HOST_NAME       VARCHAR(100),
   LAST_UPDATE_TIME            UINT64TYPE,
-  DISK_SYSTEM_NAME            VARCHAR(100)       CONSTRAINT DRIVE_DSN_NN NOT NULL,
-  RESERVED_BYTES              UINT64TYPE         CONSTRAINT DRIVE_RB_NN  NOT NULL,
-  RESERVATION_SESSION_ID      UINT64TYPE         CONSTRAINT DRIVE_RSI_NN  NOT NULL,
+  DISK_SYSTEM_NAME            VARCHAR(100),
+  RESERVED_BYTES              UINT64TYPE,
+  RESERVATION_SESSION_ID      UINT64TYPE,
   CONSTRAINT DRIVE_DN_PK PRIMARY KEY(DRIVE_NAME),
   CONSTRAINT DRIVE_DU_BOOL_CK CHECK(DESIRED_UP IN ('0', '1')),
   CONSTRAINT DRIVE_DFD_BOOL_CK CHECK(DESIRED_FORCE_DOWN IN ('0', '1')),
diff --git a/catalogue/migrations/liquibase/oracle/4.5to5.0.sql b/catalogue/migrations/liquibase/oracle/4.5to5.0.sql
index f21dfa37b2..1620344445 100644
--- a/catalogue/migrations/liquibase/oracle/4.5to5.0.sql
+++ b/catalogue/migrations/liquibase/oracle/4.5to5.0.sql
@@ -38,6 +38,75 @@ ALTER TABLE DRIVE_STATE MODIFY RESERVATION_SESSION_ID CONSTRAINT DRIVE_RSI_NN NO
 --changeset mvelosob:4 failOnError:true dbms:oracle
 --preconditions onFail:HALT onError:HALT
 --precondition-sql-check expectedResult:"4.5" SELECT CONCAT(CONCAT(CAST(SCHEMA_VERSION_MAJOR as VARCHAR(10)),'.'), CAST(SCHEMA_VERSION_MINOR AS VARCHAR(10))) AS CATALOGUE_VERSION FROM CTA_CATALOGUE;
+DROP TABLE TAPE_DRIVE;
+--rollback CREATE TABLE TAPE_DRIVE (
+--rollback   DRIVE_NAME                  VARCHAR2(100)       CONSTRAINT DRIVE_STATE_DN_NN NOT NULL,
+--rollback   HOST                        VARCHAR2(100)       CONSTRAINT DRIVE_STATE_H_NN  NOT NULL,
+--rollback   LOGICAL_LIBRARY             VARCHAR2(100)       CONSTRAINT DRIVE_STATE_LL_NN NOT NULL,
+--rollback   SESSION_ID                  NUMERIC(20, 0),
+--rollback   BYTES_TRANSFERED_IN_SESSION NUMERIC(20, 0),
+--rollback   FILES_TRANSFERED_IN_SESSION NUMERIC(20, 0),
+--rollback   LATEST_BANDWIDTH            VARCHAR2(100),
+--rollback   SESSION_START_TIME          NUMERIC(20, 0),
+--rollback   MOUNT_START_TIME            NUMERIC(20, 0),
+--rollback   TRANSFER_START_TIME         NUMERIC(20, 0),
+--rollback   UNLOAD_START_TIME           NUMERIC(20, 0),
+--rollback   UNMOUNT_START_TIME          NUMERIC(20, 0),
+--rollback   DRAINING_START_TIME         NUMERIC(20, 0),
+--rollback   DOWN_OR_UP_START_TIME       NUMERIC(20, 0),
+--rollback   PROBE_START_TIME            NUMERIC(20, 0),
+--rollback   CLEANUP_START_TIME          NUMERIC(20, 0),
+--rollback   START_START_TIME            NUMERIC(20, 0),
+--rollback   SHUTDOWN_TIME               NUMERIC(20, 0),
+--rollback   MOUNT_TYPE                  NUMERIC(10, 0)      CONSTRAINT DRIVE_STATE_MT_NN NOT NULL,
+--rollback   DRIVE_STATUS                VARCHAR2(100)    DEFAULT 'UNKNOWN' CONSTRAINT DRIVE_STATE_DS_NN NOT NULL,
+--rollback   DESIRED_UP                  CHAR(1)         DEFAULT '0' CONSTRAINT DRIVE_STATE_DU_NN  NOT NULL,
+--rollback   DESIRED_FORCE_DOWN          CHAR(1)         DEFAULT '0' CONSTRAINT DRIVE_STATE_DFD_NN NOT NULL,
+--rollback   REASON_UP_DOWN              VARCHAR2(1000),
+--rollback   CURRENT_VID                 VARCHAR2(100),
+--rollback   CTA_VERSION                 VARCHAR2(100),
+--rollback   CURRENT_PRIORITY            NUMERIC(20, 0),
+--rollback   CURRENT_ACTIVITY            VARCHAR2(100),
+--rollback   CURRENT_ACTIVITY_WEIGHT     VARCHAR2(100),
+--rollback   CURRENT_TAPE_POOL           VARCHAR2(100),
+--rollback   NEXT_MOUNT_TYPE             NUMERIC(10, 0),
+--rollback   NEXT_VID                    VARCHAR2(100),
+--rollback   NEXT_TAPE_POOL              VARCHAR2(100),
+--rollback   NEXT_PRIORITY               NUMERIC(20, 0),
+--rollback   NEXT_ACTIVITY               VARCHAR2(100),
+--rollback   NEXT_ACTIVITY_WEIGHT        VARCHAR2(100),
+--rollback   DEV_FILE_NAME               VARCHAR2(100),
+--rollback   RAW_LIBRARY_SLOT            VARCHAR2(100),
+--rollback   CURRENT_VO                  VARCHAR2(100),
+--rollback   NEXT_VO                     VARCHAR2(100),
+--rollback   USER_COMMENT                VARCHAR2(1000),
+--rollback   CREATION_LOG_USER_NAME      VARCHAR2(100),
+--rollback   CREATION_LOG_HOST_NAME      VARCHAR2(100),
+--rollback   CREATION_LOG_TIME           NUMERIC(20, 0),
+--rollback   LAST_UPDATE_USER_NAME       VARCHAR2(100),
+--rollback   LAST_UPDATE_HOST_NAME       VARCHAR2(100),
+--rollback   LAST_UPDATE_TIME            NUMERIC(20, 0),
+--rollback   DISK_SYSTEM_NAME            VARCHAR2(100)       CONSTRAINT DRIVE_STATE_DSN_NN NOT NULL,
+--rollback   RESERVED_BYTES              NUMERIC(20, 0)         CONSTRAINT DRIVE_STATE_RB_NN  NOT NULL,
+--rollback   CONSTRAINT DRIVE_STATE_DN_PK PRIMARY KEY(DRIVE_NAME),
+--rollback   CONSTRAINT DRIVE_STATE_DU_BOOL_CK CHECK(DESIRED_UP IN ('0', '1')),
+--rollback   CONSTRAINT DRIVE_STATE_DFD_BOOL_CK CHECK(DESIRED_FORCE_DOWN IN ('0', '1')),
+--rollback   CONSTRAINT DRIVE_STATE_DS_STRING_CK CHECK(DRIVE_STATUS IN ('DOWN', 'UP', 'PROBING', 'STARTING',
+--rollback   'MOUNTING', 'TRANSFERING', 'UNLOADING', 'UNMOUNTING', 'DRAININGTODISK', 'CLEANINGUP', 'SHUTDOWN',
+--rollback   'UNKNOWN'))
+--rollback );
+
+--changeset mvelosob:5 failOnError:true dbms:oracle
+--preconditions onFail:HALT onError:HALT
+--precondition-sql-check expectedResult:"4.5" SELECT CONCAT(CONCAT(CAST(SCHEMA_VERSION_MAJOR as VARCHAR(10)),'.'), CAST(SCHEMA_VERSION_MINOR AS VARCHAR(10))) AS CATALOGUE_VERSION FROM CTA_CATALOGUE;
+ALTER TABLE DRIVE_STATE DROP CONSTRAINT DRIVE_DSN_NN;
+ALTER TABLE DRIVE_STATE DROP CONSTRAINT DRIVE_RB_NN;
+--rollback ALTER TABLE DRIVE_STATE MODIFY DISK_SYSTEM_NAME VARCHAR2(100) CONSTRAINT DRIVE_STATE_DSN_NN NOT NULL;
+--rollback ALTER TABLE DRIVE_STATE MODIFY RESERVED_BYTES NUMERIC(20, 0) CONSTRAINT DRIVE_STATE_RB_NN NOT NULL;
+
+--changeset mvelosob:6 failOnError:true dbms:oracle
+--preconditions onFail:HALT onError:HALT
+--precondition-sql-check expectedResult:"4.5" SELECT CONCAT(CONCAT(CAST(SCHEMA_VERSION_MAJOR as VARCHAR(10)),'.'), CAST(SCHEMA_VERSION_MINOR AS VARCHAR(10))) AS CATALOGUE_VERSION FROM CTA_CATALOGUE;
 UPDATE CTA_CATALOGUE SET STATUS='PRODUCTION';
 UPDATE CTA_CATALOGUE SET SCHEMA_VERSION_MAJOR=5;
 UPDATE CTA_CATALOGUE SET SCHEMA_VERSION_MINOR=0;
diff --git a/common/dataStructures/TapeDrive.cpp b/common/dataStructures/TapeDrive.cpp
index 0cb0b709ca..4ca3fd6e2a 100644
--- a/common/dataStructures/TapeDrive.cpp
+++ b/common/dataStructures/TapeDrive.cpp
@@ -31,9 +31,7 @@ TapeDrive::TapeDrive():
   driveStatus(DriveStatus::Unknown),
   desiredUp(false),
   desiredForceDown(false),
-  nextMountType(MountType::NoMount),
-  reservedBytes(0),
-  reservationSessionId(0) {}
+  nextMountType(MountType::NoMount) {}
 
 const std::map<DriveStatus, std::string> TapeDrive::STATE_TO_STRING_MAP = {
   {DriveStatus::Unknown, "UNKNOWN"},
@@ -90,9 +88,6 @@ bool TapeDrive::operator==(const TapeDrive &rhs) const {
       && driveStatus == rhs.driveStatus
       && desiredUp == rhs.desiredUp
       && desiredForceDown == rhs.desiredForceDown
-      && diskSystemName == rhs.diskSystemName
-      && reservedBytes == rhs.reservedBytes
-      && reservationSessionId == rhs.reservationSessionId
 
       && sessionId == rhs.sessionId
       && bytesTransferedInSession == rhs.bytesTransferedInSession
@@ -121,6 +116,10 @@ bool TapeDrive::operator==(const TapeDrive &rhs) const {
       && checkOptionalString(nextTapePool) == checkOptionalString(rhs.nextTapePool)
       && nextPriority == rhs.nextPriority
       && checkOptionalString(nextActivity) == checkOptionalString(rhs.nextActivity)
+      && checkOptionalString(diskSystemName) == checkOptionalString(rhs.diskSystemName)
+      && reservedBytes == rhs.reservedBytes
+      && reservationSessionId == rhs.reservationSessionId
+
       //
       // && devFileName==rhs.devFileName
       // && rawLibrarySlot==rhs.rawLibrarySlot
@@ -185,10 +184,8 @@ std::ostream &operator<<(std::ostream &os, const TapeDrive &obj) {
      << " mountType=" << obj.mountType
      << " driveStatus=" << stateStr
      << " desiredUp=" << obj.desiredUp
-     << " desiredForceDown=" << obj.desiredForceDown
-     << " diskSystemName=" << obj.diskSystemName
-     << " reservedBytes=" << obj.reservedBytes
-     << " reservationSessionId=" << obj.reservationSessionId << ")";
+     << " desiredForceDown=" << obj.desiredForceDown 
+     << ")";
   return os;
 }
 
diff --git a/common/dataStructures/TapeDrive.hpp b/common/dataStructures/TapeDrive.hpp
index 4eb4991fa6..4e65898f79 100644
--- a/common/dataStructures/TapeDrive.hpp
+++ b/common/dataStructures/TapeDrive.hpp
@@ -107,9 +107,9 @@ struct TapeDrive {
   optional<std::string> currentVo;
   optional<std::string> nextVo;
 
-  std::string diskSystemName;
-  uint64_t reservedBytes;
-  uint64_t reservationSessionId;
+  optional<std::string> diskSystemName;
+  optional<uint64_t> reservedBytes;
+  optional<uint64_t> reservationSessionId;
 
   optional<std::string> userComment;
   optional<EntryLog> creationLog;
diff --git a/xroot_plugins/XrdCtaDriveLs.hpp b/xroot_plugins/XrdCtaDriveLs.hpp
index 92c9761993..ba5a2e6fe3 100644
--- a/xroot_plugins/XrdCtaDriveLs.hpp
+++ b/xroot_plugins/XrdCtaDriveLs.hpp
@@ -128,8 +128,8 @@ int DriveLsStream::fillBuffer(XrdSsiPb::OStreamBuffer<Data> *streambuf) {
     dr_item->set_comment(dr.userComment ? dr.userComment.value() : "");
     dr_item->set_reason(dr.reasonUpDown ? dr.reasonUpDown.value() : "");
     if (dr.mountType == cta::common::dataStructures::MountType::Retrieve) {
-      dr_item->set_disk_system_name(dr.diskSystemName);
-      dr_item->set_reserved_bytes(dr.reservedBytes);
+      dr_item->set_disk_system_name(dr.diskSystemName ? dr.diskSystemName.value() : "");
+      dr_item->set_reserved_bytes(dr.reservedBytes ? dr.reservedBytes.value() : 0);
     }
     dr_item->set_session_elapsed_time(dr.sessionElapsedTime ? dr.sessionElapsedTime.value() : 0);
     auto driveConfig = dr_item->mutable_drive_config();
-- 
GitLab