Alpha: Carbonated functor: fix read after update problems

This commit is contained in:
Pierre Chambart 2018-06-01 17:43:38 +02:00 committed by Benjamin Canou
parent d11bc0b996
commit 31b9c251f6

View File

@ -359,7 +359,9 @@ module Make_indexed_carbonated_data_storage
return (c, bytes)
let consume_remove_gas del c i =
match V.size with
| Fixed _ | Variable ->
| Fixed _ ->
Lwt.return (C.consume_gas c (Gas_limit_repr.write_bytes_cost Z.zero))
| Variable ->
Lwt.return (C.consume_gas c (Gas_limit_repr.write_bytes_cost Z.zero)) >>=? fun c ->
del c (len_name i)
let mem s i =
@ -381,8 +383,8 @@ module Make_indexed_carbonated_data_storage
else
return (C.project s, None)
let set s i v =
consume_write_gas C.set s i v >>=? fun (s, bytes) ->
existing_size s i >>=? fun prev_size ->
consume_write_gas C.set s i v >>=? fun (s, bytes) ->
C.set s (name i) bytes >>=? fun t ->
let size_diff = MBytes.length bytes - prev_size in
Lwt.return (C.record_bytes_stored t (Int64.of_int size_diff)) >>=? fun t ->
@ -395,22 +397,22 @@ module Make_indexed_carbonated_data_storage
return (C.project t, size)
let init_set s i v =
let init_set s i v = C.init_set s i v >>= return in
consume_write_gas init_set s i v >>=? fun (s, bytes) ->
existing_size s i >>=? fun prev_size ->
consume_write_gas init_set s i v >>=? fun (s, bytes) ->
init_set s (name i) bytes >>=? fun t ->
let size_diff = MBytes.length bytes - prev_size in
Lwt.return (C.record_bytes_stored t (Int64.of_int size_diff)) >>=? fun t ->
return (C.project t, size_diff)
let remove s i =
let remove s i = C.remove s i >>= return in
consume_remove_gas remove s i >>=? fun s ->
existing_size s i >>=? fun prev_size ->
consume_remove_gas remove s i >>=? fun s ->
remove s (name i) >>=? fun t ->
Lwt.return (C.record_bytes_stored t (Int64.of_int ~-prev_size)) >>=? fun t ->
return (C.project t, prev_size)
let delete s i =
consume_remove_gas C.delete s i >>=? fun s ->
existing_size s i >>=? fun prev_size ->
consume_remove_gas C.delete s i >>=? fun s ->
C.delete s (name i) >>=? fun t ->
Lwt.return (C.record_bytes_stored t (Int64.of_int ~-prev_size)) >>=? fun t ->
return (C.project t, prev_size)
@ -797,7 +799,9 @@ module Make_indexed_subcontext (C : Raw_context.T) (I : INDEX)
return (c, bytes)
let consume_remove_gas del c =
match V.size with
| Fixed _ | Variable ->
| Fixed _ ->
Lwt.return (Raw_context.consume_gas c (Gas_limit_repr.write_bytes_cost Z.zero))
| Variable ->
Lwt.return (Raw_context.consume_gas c (Gas_limit_repr.write_bytes_cost Z.zero)) >>=? fun c ->
del c (len_name N.name)
let mem s i =
@ -820,8 +824,8 @@ module Make_indexed_subcontext (C : Raw_context.T) (I : INDEX)
else
return (C.project s, None)
let set s i v =
consume_write_gas Raw_context.set (pack s i) v >>=? fun (c, bytes) ->
existing_size (pack s i) >>=? fun prev_size ->
consume_write_gas Raw_context.set (pack s i) v >>=? fun (c, bytes) ->
Raw_context.set c N.name bytes >>=? fun c ->
let size_diff = MBytes.length bytes - prev_size in
Lwt.return (Raw_context.record_bytes_stored c (Int64.of_int size_diff)) >>=? fun c ->
@ -834,22 +838,22 @@ module Make_indexed_subcontext (C : Raw_context.T) (I : INDEX)
return (Raw_context.project c, size)
let init_set s i v =
let init_set c k v = Raw_context.init_set c k v >>= return in
existing_size (pack s i) >>=? fun prev_size ->
consume_write_gas init_set (pack s i) v >>=? fun (c, bytes) ->
existing_size c >>=? fun prev_size ->
init_set c N.name bytes >>=? fun c ->
let size_diff = MBytes.length bytes - prev_size in
Lwt.return (Raw_context.record_bytes_stored c (Int64.of_int size_diff)) >>=? fun c ->
return (Raw_context.project c, size_diff)
let remove s i =
let remove c k = Raw_context.remove c k >>= return in
consume_remove_gas remove (pack s i) >>=? fun c ->
existing_size (pack s i) >>=? fun prev_size ->
consume_remove_gas remove (pack s i) >>=? fun c ->
remove c N.name >>=? fun c ->
Lwt.return (Raw_context.record_bytes_stored c (Int64.of_int ~-prev_size)) >>=? fun c ->
return (Raw_context.project c, prev_size)
let delete s i =
consume_remove_gas Raw_context.delete (pack s i) >>=? fun c ->
existing_size (pack s i) >>=? fun prev_size ->
consume_remove_gas Raw_context.delete (pack s i) >>=? fun c ->
Raw_context.delete c N.name >>=? fun c ->
Lwt.return (Raw_context.record_bytes_stored c (Int64.of_int ~-prev_size)) >>=? fun c ->
return (Raw_context.project c, prev_size)