Пример #1
0
        protected override void Execute(CodeActivityContext activityContext)
        {
            Guid databaseinstanceguid = DatabaseInstanceGuid.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.Detach();
            }

            EntityGuid.Set(activityContext, databaseinstanceguid);
        }
        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);
        }
Пример #3
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);
        }
Пример #4
0
        protected void SubstituteDatabaseName(TableReference tr, Guid serverInstance, string databaseVersion)
        {
            SchemaManager sc = GetSchemaManager(false);

            if (!tr.IsSubquery && !tr.IsComputed)
            {
                DatasetBase ds = sc.Datasets[tr.DatasetName];

                // Graywulf datasets have changing database names depending on the server
                // the database is on.
                if (ds is GraywulfDataset)
                {
                    var gwds = ds as GraywulfDataset;
                    gwds.Context = Context;

                    DatabaseInstance di;
                    if (gwds.IsSpecificInstanceRequired)
                    {
                        di = gwds.DatabaseInstance.Value;
                    }
                    else
                    {
                        // Find appropriate database instance
                        di = new DatabaseInstance(Context);
                        di.Guid = scheduler.GetDatabaseInstances(serverInstance, gwds.DatabaseDefinition.Guid, databaseVersion)[0];
                        di.Load();
                    }

                    //tr.DatabaseObject.Dataset = di.GetDataset();
                    tr.DatabaseName = di.DatabaseName;
                }
            }
        }