コード例 #1
0
        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);
        }
コード例 #2
0
        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));
        }