summaryrefslogtreecommitdiff
path: root/src/mongo/db/s/resharding/resharding_util.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/s/resharding/resharding_util.h')
-rw-r--r--src/mongo/db/s/resharding/resharding_util.h32
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