16 using MapCollection = std::map<std::string, std::shared_ptr<AbstractMap>>;
25 bool tx_contains_new_map)>;
27 static inline std::optional<Version> apply_changes(
32 const std::optional<Version>& new_maps_conflict_version,
33 bool track_deletes_on_missing_keys,
34 const std::optional<Version>& expected_rollback_count = std::nullopt)
41 bool has_writes =
false;
43 std::map<std::string, std::unique_ptr<AbstractCommitter>> views;
44 for (
const auto& [map_name, mc] : changes)
46 views[map_name] = mc.map->create_committer(mc.changeset.get());
49 for (
auto& [map_name, mc] : changes)
51 has_writes |= mc.changeset->has_writes();
57 if (expected_rollback_count.has_value() && !changes.empty())
62 auto* store = changes.begin()->second.map->get_store();
72 ok = store->check_rollback_count(expected_rollback_count.value());
78 for (
auto& [view_name, view_ptr] : views)
80 if (!view_ptr->prepare())
88 for (
const auto& [map_name, map_ptr] : new_maps)
96 auto* store = map_ptr->get_store();
101 if (new_maps_conflict_version.has_value())
103 current_v = *new_maps_conflict_version;
107 current_v = store->current_version();
110 if (store->get_map_unsafe(current_v, map_name) !=
nullptr)
117 if (ok && has_writes)
121 std::tie(version, version_last_new_map) =
122 version_resolver_fn(!new_maps.empty());
126 for (
const auto& [map_name, map_ptr] : new_maps)
128 const auto it = views.find(map_name);
129 if (it != views.end() && it->second->has_writes())
131 map_ptr->get_store()->add_dynamic_map(version, map_ptr);
135 for (
auto& [view_name, view_ptr] : views)
137 view_ptr->commit(version, track_deletes_on_missing_keys);
141 for (
auto& [view_name, view_ptr] : views)
143 auto hook_ptr = view_ptr->post_commit();
144 if (hook_ptr !=
nullptr)
146 hooks.push_back(std::move(hook_ptr));
151 for (
auto& [map_name, mc] : changes)
Definition app_interface.h:19
uint64_t Version
Definition version.h:8
std::function< std::tuple< Version, VersionLastNewMap >(bool tx_contains_new_map)> VersionResolver
Definition apply_changes.h:25
Version VersionLastNewMap
Definition apply_changes.h:23
std::map< std::string, std::shared_ptr< AbstractMap > > MapCollection
Definition apply_changes.h:16
std::map< std::string, MapChanges > OrderedChanges
Definition tx.h:41
std::vector< ConsensusHookPtr > ConsensusHookPtrs
Definition hooks.h:22