diff options
Diffstat (limited to 'src/mongo/db/s/resharding/resharding_util.h')
-rw-r--r-- | src/mongo/db/s/resharding/resharding_util.h | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/mongo/db/s/resharding/resharding_util.h b/src/mongo/db/s/resharding/resharding_util.h index 856d7cbb081..194381e7e78 100644 --- a/src/mongo/db/s/resharding/resharding_util.h +++ b/src/mongo/db/s/resharding/resharding_util.h @@ -37,6 +37,7 @@ #include "mongo/db/keypattern.h" #include "mongo/db/operation_context.h" #include "mongo/db/pipeline/pipeline.h" +#include "mongo/db/repl/primary_only_service.h" #include "mongo/db/s/collection_sharding_runtime.h" #include "mongo/db/s/resharding/coordinator_document_gen.h" #include "mongo/db/s/resharding/donor_oplog_id_gen.h" @@ -293,4 +294,35 @@ NamespaceString getLocalConflictStashNamespace(UUID existingUUID, ShardId donorS void doNoopWrite(OperationContext* opCtx, StringData opStr, const NamespaceString& nss); +boost::optional<Milliseconds> estimateRemainingRecipientTime(bool applyingBegan, + int64_t bytesCopied, + int64_t bytesToCopy, + Milliseconds timeSpentCopying, + int64_t oplogEntriesApplied, + int64_t oplogEntriesFetched, + Milliseconds timeSpentApplying); +/** + * Looks up the StateMachine by namespace of the collection being resharded. If it does not exist, + * returns boost::none. + */ +template <class Service, class Instance> +std::vector<std::shared_ptr<Instance>> getReshardingStateMachines(OperationContext* opCtx, + const NamespaceString& sourceNs) { + auto service = + checked_cast<Service*>(repl::PrimaryOnlyServiceRegistry::get(opCtx->getServiceContext()) + ->lookupServiceByName(Service::kServiceName)); + auto instances = service->getAllReshardingInstances(opCtx); + std::vector<std::shared_ptr<Instance>> result; + for (const auto& genericInstace : instances) { + auto instance = checked_pointer_cast<Instance>(genericInstace); + auto metadata = instance->getMetadata(); + if (metadata.getSourceNss() != sourceNs) { + continue; + } + result.emplace_back(std::move(instance)); + } + return result; +} + + } // namespace mongo |