Skip to content

Commit 7cc6ea9

Browse files
authored
Merge pool licensing feature (#6277)
2 parents 073373f + 10bb483 commit 7cc6ea9

File tree

8 files changed

+36
-5
lines changed

8 files changed

+36
-5
lines changed

ocaml/idl/datamodel_common.ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ open Datamodel_roles
1010
to leave a gap for potential hotfixes needing to increment the schema version.*)
1111
let schema_major_vsn = 5
1212

13-
let schema_minor_vsn = 785
13+
let schema_minor_vsn = 786
1414

1515
(* Historical schema versions just in case this is useful later *)
1616
let rio_schema_major_vsn = 5

ocaml/idl/datamodel_lifecycle.ml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,8 @@ let prototyped_of_field = function
119119
Some "23.18.0"
120120
| "VM", "actions__after_softreboot" ->
121121
Some "23.1.0"
122+
| "pool", "license_server" ->
123+
Some "25.5.0-next"
122124
| "pool", "recommendations" ->
123125
Some "24.19.1"
124126
| "pool", "update_sync_enabled" ->

ocaml/idl/datamodel_pool.ml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2153,6 +2153,10 @@ let t =
21532153
~default_value:(Some (VMap [])) "recommendations"
21542154
"The recommended pool properties for clients to respect for \
21552155
optimal performance. e.g. max-vm-group=5"
2156+
; field ~writer_roles:_R_POOL_OP ~qualifier:RW ~lifecycle:[]
2157+
~ty:(Map (String, String))
2158+
~default_value:(Some (VMap [])) "license_server"
2159+
"Licensing data shared within the whole pool"
21562160
]
21572161
)
21582162
()

ocaml/idl/schematest.ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ let hash x = Digest.string x |> Digest.to_hex
33
(* BEWARE: if this changes, check that schema has been bumped accordingly in
44
ocaml/idl/datamodel_common.ml, usually schema_minor_vsn *)
55

6-
let last_known_schema_hash = "458f20f5270a5615c7ee92be8a383172"
6+
let last_known_schema_hash = "6f6230f87a92572b68ebd742196ffd0e"
77

88
let current_schema_hash : string =
99
let open Datamodel_types in

ocaml/tests/common/test_common.ml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ let make_pool ~__context ~master ?(name_label = "") ?(name_description = "")
300300
?(telemetry_next_collection = API.Date.epoch)
301301
?(last_update_sync = API.Date.epoch) ?(update_sync_frequency = `daily)
302302
?(update_sync_day = 0L) ?(update_sync_enabled = false)
303-
?(recommendations = []) () =
303+
?(recommendations = []) ?(license_server = []) () =
304304
let pool_ref = Ref.make () in
305305
Db.Pool.create ~__context ~ref:pool_ref ~uuid:(make_uuid ()) ~name_label
306306
~name_description ~master ~default_SR ~suspend_image_SR ~crash_dump_SR
@@ -320,7 +320,7 @@ let make_pool ~__context ~master ?(name_label = "") ?(name_description = "")
320320
~local_auth_max_threads:8L ~ext_auth_max_threads:8L
321321
~ext_auth_cache_enabled:false ~ext_auth_cache_size:50L
322322
~ext_auth_cache_expiry:300L ~update_sync_frequency ~update_sync_day
323-
~update_sync_enabled ~recommendations ;
323+
~update_sync_enabled ~recommendations ~license_server ;
324324
pool_ref
325325

326326
let default_sm_features =

ocaml/xapi-cli-server/records.ml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1494,6 +1494,18 @@ let pool_record rpc session_id pool =
14941494
~value:(Int64.of_string v)
14951495
)
14961496
()
1497+
; make_field ~name:"license-server"
1498+
~get:(fun () -> get_from_map (x ()).API.pool_license_server)
1499+
~add_to_map:(fun key value ->
1500+
Client.Pool.add_to_license_server ~rpc ~session_id ~self:pool ~key
1501+
~value
1502+
)
1503+
~remove_from_map:(fun key ->
1504+
Client.Pool.remove_from_license_server ~rpc ~session_id ~self:pool
1505+
~key
1506+
)
1507+
~get_map:(fun () -> (x ()).API.pool_license_server)
1508+
()
14971509
]
14981510
}
14991511

ocaml/xapi/dbsync_master.ml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ let create_pool_record ~__context =
5656
~update_sync_enabled:false ~local_auth_max_threads:8L
5757
~ext_auth_max_threads:1L ~ext_auth_cache_enabled:false
5858
~ext_auth_cache_size:50L ~ext_auth_cache_expiry:300L ~recommendations:[]
59+
~license_server:[]
5960

6061
let set_master_ip ~__context =
6162
let ip =

ocaml/xapi/xapi_host.ml

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2022,9 +2022,21 @@ let set_license_params ~__context ~self ~value =
20222022
Db.Host.set_license_params ~__context ~self ~value ;
20232023
Pool_features_helpers.update_pool_features ~__context
20242024

2025+
let collect_license_server_data ~__context ~host =
2026+
let pool = Helpers.get_pool ~__context in
2027+
let host_license_server = Db.Host.get_license_server ~__context ~self:host in
2028+
let pool_license_server = Db.Pool.get_license_server ~__context ~self:pool in
2029+
(* If there are same keys both in host and pool, use host level data. *)
2030+
let list_assoc_union l1 l2 =
2031+
List.fold_left
2032+
(fun acc (k, v) -> if List.mem_assoc k l1 then acc else (k, v) :: acc)
2033+
l1 l2
2034+
in
2035+
list_assoc_union host_license_server pool_license_server
2036+
20252037
let apply_edition_internal ~__context ~host ~edition ~additional =
20262038
(* Get localhost's current license state. *)
2027-
let license_server = Db.Host.get_license_server ~__context ~self:host in
2039+
let license_server = collect_license_server_data ~__context ~host in
20282040
let current_edition = Db.Host.get_edition ~__context ~self:host in
20292041
let current_license_params =
20302042
Db.Host.get_license_params ~__context ~self:host

0 commit comments

Comments
 (0)