HTTP API
- POST:
example: - DELETE:
example
Internal Implementation:
- For each shadow dataset foo, repeat the following process:
create a new node group foo_<i> (where i= foo.rebalance_count + 1) that contains the current available nodes, if the node group has already been occupied, we let the new node group have name foo_<uuid>;
create an uncommitted dataset foo (on node group foo_<i>) using node group foo_<i> with the same rebalance_count;
drop any leftover files for the uncommitted dataset foo;
upsert all documents from foo to foo (on node group foo_<i>) on all partitions;
e. update the metadata entity for dataset foo, make the uncommitted foo become the committed foo in metadata;
f. drop files foo (on node group foo_i-1) and drop node group foo_i-1
There are three metadata transactions involved:
-- metadata transaction 1: a, b c; (read lock on foo)
-- metadata transaction 2: d (write lock on foo)
-- metadata transaction 3: e (write lock on node group foo_i-1)
Read-only queries are only blocked by metadata transaction 2.