diff --git a/pybake/client.py b/pybake/client.py index 68b5f91318a24440d4c6aa4b317e90c05f06299d..db95abc5c100dc512ffbf88acfec9b72ff04e7af 100644 --- a/pybake/client.py +++ b/pybake/client.py @@ -254,7 +254,7 @@ class BakeProviderHandle(): ret = _pybakeclient.remove(self._ph, rid._rid) return (ret == 0) - def migrate(self, source_rid, dest_addr, dest_provider_id, dest_target, remove_source=True): + def migrate_region(self, source_rid, dest_addr, dest_provider_id, dest_target, remove_source=True): """ Migrates a give region from its source to a destination designated by an address, a provider id, and a target id. This function will also remove @@ -269,8 +269,26 @@ class BakeProviderHandle(): Returns: The resulting BakeRegionID if successful, None otherwise. """ - ret = _pybakeclient.migrate(self._ph, source_rid._rid, remove_source, + ret = _pybakeclient.migrate_region(self._ph, source_rid._rid, remove_source, str(dest_addr), int(dest_provider_id), dest_target._tid) if(ret == None): return ret return BakeRegionID(ret) + + def migrate_target(self, source_tid, dest_addr, dest_provider_id, dest_root, remove_source=True): + """ + Migrates a given target from its source to a destination designated by + an address, and a provider id. This function will also remove the original region + if remove_source is set to True. + + Args: + source_tid (BakeTargetID): source target to move. + dest_addr (str): destination address. + dest_provider_id (int): destination provider id. + dest_root (str): destination root where to migrate the target. + remove_source (bool) whether to remove the source region or not. + Returns: + True if the target was correctly migrated. + """ + return _pybakeclient.migrate_target(self._ph, source_tid._tid, remove_source, + str(dest_addr), int(dest_provider_id), str(dest_root)) diff --git a/pybake/src/client.cpp b/pybake/src/client.cpp index 0ff1ad7705420ffeeb22db9c2b81fd1c607f084c..24e037cd69eb7719e8bc49625c768dad94e9bd20 100644 --- a/pybake/src/client.cpp +++ b/pybake/src/client.cpp @@ -209,7 +209,7 @@ static py11::object pybake_read( return py11::bytes(result); } -static py11::object pybake_migrate( +static py11::object pybake_migrate_region( pybake_provider_handle_t source_ph, const bake_region_id_t& source_rid, bool remove_source, @@ -219,7 +219,7 @@ static py11::object pybake_migrate( bake_region_id_t dest_rid; int ret; Py_BEGIN_ALLOW_THREADS - ret = bake_migrate(source_ph, source_rid, + ret = bake_migrate_region(source_ph, source_rid, remove_source, dest_addr.c_str(), dest_provider_id, dest_target_id, &dest_rid); Py_END_ALLOW_THREADS @@ -227,6 +227,23 @@ static py11::object pybake_migrate( return py11::cast(dest_rid); } +static py11::object pybake_migrate_target( + pybake_provider_handle_t source_ph, + const bake_target_id_t& source_tid, + bool remove_source, + const std::string& dest_addr, + uint16_t dest_provider_id, + const std::string& dest_root) { + int ret; + Py_BEGIN_ALLOW_THREADS + ret = bake_migrate_target(source_ph, source_tid, + remove_source, dest_addr.c_str(), dest_provider_id, + dest_root.c_str()); + Py_END_ALLOW_THREADS + if(ret != BAKE_SUCCESS) return py11::cast(false); + return py11::cast(true); +} + #if HAS_NUMPY static py11::object pybake_read_numpy( pybake_provider_handle_t ph, @@ -282,7 +299,8 @@ PYBIND11_MODULE(_pybakeclient, m) m.def("read", &pybake_read); m.def("remove", [](pybake_provider_handle_t pbph, bake_region_id_t rid) { return bake_remove(pbph, rid);} ); - m.def("migrate", &pybake_migrate); + m.def("migrate_region", &pybake_migrate_region); + m.def("migrate_target", &pybake_migrate_target); m.def("shutdown_service", [](pybake_client_t client, pymargo_addr addr) { return bake_shutdown_service(client, addr); }); #if HAS_NUMPY