protected override void Execute(CodeActivityContext activityContext) { Guid databaseinstanceguid = SourceDatabaseInstanceGuid.Get(activityContext); using (Context context = ContextManager.Instance.CreateContext(this, activityContext, ConnectionMode.AutoOpen, TransactionMode.AutoCommit)) { DatabaseInstance di = new DatabaseInstance(context); di.Guid = databaseinstanceguid; di.Load(); di.LoadFileGroups(false); // Files will be sorted by logical volume to allow parallel copies Dictionary<Guid, List<Guid>> guids = new Dictionary<Guid, List<Guid>>(); // Append files foreach (DatabaseInstanceFileGroup fg in di.FileGroups.Values) { fg.LoadFiles(false); foreach (DatabaseInstanceFile f in fg.Files.Values) { if (!guids.ContainsKey(f.DiskVolume.Guid)) { guids.Add(f.DiskVolume.Guid, new List<Guid>()); } guids[f.DiskVolume.Guid].Add(f.Guid); } } // Append logfiles /* *** TODO: delete foreach (DatabaseInstanceFile f in di.Files.Values) { if (!guids.ContainsKey(f.DiskVolume.Guid)) { guids.Add(f.DiskVolume.Guid, new List<Guid>()); } guids[f.DiskVolume.Guid].Add(f.Guid); }*/ SourceDatabaseInstanceFileGuids.Set(activityContext, guids); } EntityGuid.Set(activityContext, databaseinstanceguid); }
protected override IAsyncResult BeginExecute(AsyncCodeActivityContext activityContext, AsyncCallback callback, object state) { Guid sourcefileguid = SourceFileGuid.Get(activityContext); Guid destinationdatabaseinstanceguid = DestinationDatabaseInstanceGuid.Get(activityContext); FileCopyDirection filecopydirection = FileCopyDirection.Get(activityContext); string sourcefilename, destinationfilename; string hostname; // Load files using (Context context = ContextManager.Instance.CreateContext(this, activityContext, ConnectionMode.AutoOpen, TransactionMode.AutoCommit)) { // Load destination database instance DatabaseInstance di = new DatabaseInstance(context); di.Guid = destinationdatabaseinstanceguid; di.Load(); di.LoadFileGroups(false); EntityGuid.Set(activityContext, di.Guid); // Load database instance from the schema database DatabaseInstanceFile df; DatabaseInstanceFile sf = new DatabaseInstanceFile(context); sf.Guid = sourcefileguid; sf.Load(); EntityGuidFrom.Set(activityContext, sourcefileguid); sourcefilename = sf.GetFullUncFilename(); DatabaseInstanceFileGroup fg = di.FileGroups[sf.DatabaseInstanceFileGroup.Name]; fg.LoadFiles(false); df = fg.Files[sf.Name]; EntityGuidTo.Set(activityContext, df.Guid); destinationfilename = df.GetFullUncFilename(); DatabaseInstanceFile ssf = filecopydirection == Jhu.Graywulf.Registry.FileCopyDirection.Push ? sf : df; hostname = ssf.DatabaseInstanceFileGroup.DatabaseInstance.ServerInstance.Machine.HostName.ResolvedValue; } Guid workflowInstanceGuid = activityContext.WorkflowInstanceId; string activityInstanceId = activityContext.ActivityInstanceId; return EnqueueAsync(_ => OnAsyncExecute(workflowInstanceGuid, activityInstanceId, hostname, sourcefilename, destinationfilename), callback, state); }