| 4929 | } |
| 4930 | |
| 4931 | ACTOR static Future<std::string> getStatusJSON(FileBackupAgent* backupAgent, Database cx, std::string tagName) { |
| 4932 | state Reference<ReadYourWritesTransaction> tr(new ReadYourWritesTransaction(cx)); |
| 4933 | |
| 4934 | loop { |
| 4935 | try { |
| 4936 | state JsonBuilderObject doc; |
| 4937 | doc.setKey("SchemaVersion", "1.0.0"); |
| 4938 | |
| 4939 | tr->setOption(FDBTransactionOptions::ACCESS_SYSTEM_KEYS); |
| 4940 | tr->setOption(FDBTransactionOptions::LOCK_AWARE); |
| 4941 | |
| 4942 | state KeyBackedTag tag = makeBackupTag(tagName); |
| 4943 | state Optional<UidAndAbortedFlagT> uidAndAbortedFlag; |
| 4944 | state Optional<Value> paused; |
| 4945 | state Version recentReadVersion; |
| 4946 | |
| 4947 | wait(store(paused, tr->get(backupAgent->taskBucket->getPauseKey())) && |
| 4948 | store(uidAndAbortedFlag, tag.get(tr)) && store(recentReadVersion, tr->getReadVersion())); |
| 4949 | |
| 4950 | doc.setKey("BackupAgentsPaused", paused.present()); |
| 4951 | doc.setKey("Tag", tag.tagName); |
| 4952 | |
| 4953 | if (uidAndAbortedFlag.present()) { |
| 4954 | doc.setKey("UID", uidAndAbortedFlag.get().first.toString()); |
| 4955 | |
| 4956 | state BackupConfig config(uidAndAbortedFlag.get().first); |
| 4957 | |
| 4958 | state EBackupState backupState = |
| 4959 | wait(config.stateEnum().getD(tr, Snapshot::False, EBackupState::STATE_NEVERRAN)); |
| 4960 | JsonBuilderObject statusDoc; |
| 4961 | statusDoc.setKey("Name", BackupAgentBase::getStateName(backupState)); |
| 4962 | statusDoc.setKey("Description", BackupAgentBase::getStateText(backupState)); |
| 4963 | statusDoc.setKey("Completed", backupState == EBackupState::STATE_COMPLETED); |
| 4964 | statusDoc.setKey("Running", BackupAgentBase::isRunnable(backupState)); |
| 4965 | doc.setKey("Status", statusDoc); |
| 4966 | |
| 4967 | state Future<Void> done = Void(); |
| 4968 | |
| 4969 | if (backupState != EBackupState::STATE_NEVERRAN) { |
| 4970 | state Reference<IBackupContainer> bc; |
| 4971 | state TimestampedVersion latestRestorable; |
| 4972 | |
| 4973 | wait( |
| 4974 | store(latestRestorable, getTimestampedVersion(tr, config.getLatestRestorableVersion(tr))) && |
| 4975 | store(bc, config.backupContainer().getOrThrow(tr))); |
| 4976 | |
| 4977 | doc.setKey("Restorable", latestRestorable.present()); |
| 4978 | |
| 4979 | if (latestRestorable.present()) { |
| 4980 | JsonBuilderObject o = latestRestorable.toJSON(); |
| 4981 | if (backupState != EBackupState::STATE_COMPLETED) { |
| 4982 | o.setKey("LagSeconds", |
| 4983 | (recentReadVersion - latestRestorable.version.get()) / |
| 4984 | CLIENT_KNOBS->CORE_VERSIONSPERSECOND); |
| 4985 | } |
| 4986 | doc.setKey("LatestRestorablePoint", o); |
| 4987 | } |
| 4988 | doc.setKey("DestinationURL", bc->getURL()); |
nothing calls this directly
no test coverage detected