+
+let get_owners_lookup machine ownership disk =
+ (* Get the correct tree. *)
+ let tree = List.assoc disk ownership in
+
+ fun offset ->
+ let rec query = function
+ | Leaf (_, segments) -> segments
+ | Node ((Leaf ((_, leftend), _) | Node (_, ((_, leftend), _), _) as left),
+ (_, segments),
+ right) ->
+ let subsegments =
+ if offset < leftend then query left else query right in
+ segments @ subsegments
+ in
+ let owners = query tree in
+
+ List.map (
+ fun (_, _, owner, owner_offset) -> (owner, offset -^ owner_offset)
+ ) owners