public DifferentialRestoreJobInfo(ClusterRecoveryJob jobInfo, ConfigurationServer configurationServer)
 {
     Cluster = string.Empty;
     Shard   = string.Empty;
     _job    = jobInfo;
     _parent = configurationServer;
 }
Example #2
0
        RecoveryOperationStatus IRecoveryManager.SubmitRecoveryJob(RecoveryConfiguration config, object additionalParams)
        {
            RecoveryOperationStatus state = new RecoveryOperationStatus(RecoveryStatus.Failure);

            state.Message = "Failure during submission state";

            try
            {
                // Ensure the prereqs provided are valid
                RecoveryOperationStatus valid = this.EnsurePreRequisites(config, additionalParams);
                if (valid.Status == RecoveryStatus.Success)
                {
                    // 1. create and register clustered job
                    ClusterRecoveryJob _clusteredJob = new ClusterRecoveryJob(this.AssignJobUID(), config, this, _configurationStore);
                    _clusteredJob.RegisterRecoveryCommunicationHandler(this);
                    _runningClusteredJobMap.Add(_clusteredJob.JobIdentifier, _clusteredJob);

                    state.JobIdentifier = _clusteredJob.JobIdentifier;


                    // create rootfolder for recovery
                    switch (config.JobType)
                    {
                    case RecoveryJobType.ConfigBackup:
                    case RecoveryJobType.DataBackup:
                    case RecoveryJobType.FullBackup:

                        //
                        RecoveryOperationStatus folderStatus = _clusteredJob.CreateRecoveryFolder(config.RecoveryPath, config.UserName, config.Password);

                        if (folderStatus.Status == RecoveryStatus.Failure)
                        {
                            RemoveRunningJob(_clusteredJob.JobIdentifier);
                            _clusteredJob.Dispose();
                            return(folderStatus);
                        }
                        break;
                    }

                    //2. call prepare for this job
                    state = _clusteredJob.Initialize(config, additionalParams);

                    //3. verify status
                    if (state.Status == RecoveryStatus.Failure)
                    {
                        RemoveRunningJob(_clusteredJob.JobIdentifier);

                        return(state);
                    }

                    if (state.Status == RecoveryStatus.Failure)
                    {
                        // remove job from active config
                        RemoveRunningJob(_clusteredJob.JobIdentifier);
                        return(state);
                    }
                    else
                    {
                        state = _clusteredJob.Start(config);
                    }
                }
                else
                {
                    state = valid;
                }
            }
            catch (Exception ex)
            {
                if (LoggerManager.Instance.RecoveryLogger != null && LoggerManager.Instance.RecoveryLogger.IsErrorEnabled)
                {
                    LoggerManager.Instance.RecoveryLogger.Error("RecoveryManager.Submit()", ex.ToString());
                }
                state.Message = ex.Message;
                // log exception
            }

            return(state);
        }