diff --git a/ocaml/xapi-storage/generator/lib/control.ml b/ocaml/xapi-storage/generator/lib/control.ml
index 93b2800a766..f4d8a22a4a5 100644
--- a/ocaml/xapi-storage/generator/lib/control.ml
+++ b/ocaml/xapi-storage/generator/lib/control.ml
@@ -30,6 +30,12 @@ type health =
(** Storage is busy recovering, e.g. rebuilding mirrors *)
[@@deriving rpcty]
+type volume_type =
+ | Data (** Normal data volume *)
+ | CBT_Metadata (** CBT Metadata only, data destroyed *)
+ | Data_and_CBT_Metadata (** Both Data and CBT Metadata *)
+[@@deriving rpcty]
+
(** Primary key for a specific Storage Repository. This can be any string
which is meaningful to the implementation. For example this could be an
NFS directory name, an LVM VG name or even a URI. This string is
@@ -116,6 +122,11 @@ type volume = {
; keys: (string * string) list
(** A list of key=value pairs which have been stored in the Volume
metadata. These should not be interpreted by the Volume plugin. *)
+ ; volume_type: volume_type option [@default Some Data]
+ (** The content type of this volume *)
+ ; cbt_enabled: bool option [@default Some false]
+ (** True means that the storage datapath will track changed dirty blocks
+ while writing and will be able to provide CBT Metadata when requested *)
}
[@@deriving rpcty]
diff --git a/ocaml/xapi-storage/generator/test/storage_test.ml b/ocaml/xapi-storage/generator/test/storage_test.ml
index eca6cf45afb..3da8be64711 100644
--- a/ocaml/xapi-storage/generator/test/storage_test.ml
+++ b/ocaml/xapi-storage/generator/test/storage_test.ml
@@ -57,6 +57,8 @@ let test_volume =
; physical_utilisation= 0L
; uri= ["uri1"]
; keys= []
+ ; cbt_enabled= Some false
+ ; volume_type= Some Data
}
(** Check that we successfully parse the responses and
diff --git a/ocaml/xapi-storage/rpc-light/SR.ls/response b/ocaml/xapi-storage/rpc-light/SR.ls/response
index b85cff59c56..7f989e33066 100644
--- a/ocaml/xapi-storage/rpc-light/SR.ls/response
+++ b/ocaml/xapi-storage/rpc-light/SR.ls/response
@@ -12,6 +12,8 @@
physical_utilisation0
uriuri1
keys
+ volume_typeData
+ cbt_enabledfalse
diff --git a/ocaml/xapi-storage/rpc-light/Volume.clone/response b/ocaml/xapi-storage/rpc-light/Volume.clone/response
index 4b0f52b2305..dc4036f599d 100644
--- a/ocaml/xapi-storage/rpc-light/Volume.clone/response
+++ b/ocaml/xapi-storage/rpc-light/Volume.clone/response
@@ -11,6 +11,8 @@
physical_utilisation0
uriuri1
keys
+ volume_typeData
+ cbt_enabledfalse
diff --git a/ocaml/xapi-storage/rpc-light/Volume.create/response b/ocaml/xapi-storage/rpc-light/Volume.create/response
index 4b0f52b2305..dc4036f599d 100644
--- a/ocaml/xapi-storage/rpc-light/Volume.create/response
+++ b/ocaml/xapi-storage/rpc-light/Volume.create/response
@@ -11,6 +11,8 @@
physical_utilisation0
uriuri1
keys
+ volume_typeData
+ cbt_enabledfalse
diff --git a/ocaml/xapi-storage/rpc-light/Volume.snapshot/response b/ocaml/xapi-storage/rpc-light/Volume.snapshot/response
index 4b0f52b2305..dc4036f599d 100644
--- a/ocaml/xapi-storage/rpc-light/Volume.snapshot/response
+++ b/ocaml/xapi-storage/rpc-light/Volume.snapshot/response
@@ -11,6 +11,8 @@
physical_utilisation0
uriuri1
keys
+ volume_typeData
+ cbt_enabledfalse