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); }
/// <summary> /// Generates the file path from the cluster schema hierarcy. /// </summary> /// <param name="basePath">Root path of the disk volume.</param> /// <returns>The full path to the database file.</returns> private string GetFilenameWithPath(string basePath) { string filename = basePath; DatabaseInstance di = DatabaseInstanceFileGroup.DatabaseInstance; filename = Path.Combine(filename, di.DatabaseDefinition.Parent.Name); filename = Path.Combine(filename, di.DatabaseDefinition.Name); filename = Path.Combine(filename, di.Slice.Name); filename = Path.Combine(filename, di.Name.ToString()); filename = Path.Combine(filename, this.Filename); return(filename); }
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); }
/// <summary> /// Constructor for creating a new entity with object context and parent entity set. /// </summary> /// <param name="context">An object context class containing session information.</param> /// <param name="parent">The parent entity in the entity hierarchy.</param> public DatabaseInstanceFile(DatabaseInstance parent) : base(parent.Context, parent) { InitializeMembers(); }
public DatabaseInstance GenerateDatabaseInstance(ServerInstance serverInstance, List<DiskVolume> dataDiskVolumes, List<DiskVolume> logDiskVolumes, Slice slice, DatabaseVersion databaseVersion, string namePattern, string databaseNamePattern, double sizeFactor, bool generateFileGroups) { // --- Create the new database instance and set name DatabaseInstance ndi = new DatabaseInstance(databaseDefinition); ndi.ServerInstanceReference.Guid = serverInstance.Guid; ndi.SliceReference.Guid = slice.Guid; ndi.DatabaseVersionReference.Guid = databaseVersion.Guid; ndi.Name = ExpressionProperty.ResolveExpression(ndi, namePattern); ndi.DatabaseName = ExpressionProperty.ResolveExpression(ndi, databaseNamePattern); ndi.Save(); if (generateFileGroups) { ndi.ServerInstance.Machine.LoadDiskVolumes(false); databaseDefinition.LoadFileGroups(false); slice.LoadPartitions(false); List<Partition> partitions = new List<Partition>(slice.Partitions.Values.OrderBy(i => i.Number)); List<FileGroup> filegroups = new List<FileGroup>(databaseDefinition.FileGroups.Values.OrderBy(i => i.Number)); for (int fi = 0; fi < filegroups.Count; fi++) { // --- Create data and "log" file groups --- if (filegroups[fi].LayoutType == FileGroupLayoutType.Monolithic || filegroups[fi].FileGroupType == FileGroupType.Log) { DatabaseInstanceFileGroup nfg = new DatabaseInstanceFileGroup(ndi); nfg.FileGroupType = filegroups[fi].FileGroupType; nfg.FileGroupName = nfg.Name = filegroups[fi].FileGroupName; nfg.FileGroupReference.Guid = filegroups[fi].Guid; nfg.PartitionReference.Guid = Guid.Empty; nfg.AllocatedSpace = (long)(filegroups[fi].AllocatedSpace * sizeFactor); nfg.Save(); nfg.GenerateInstanceFiles(dataDiskVolumes, sizeFactor); } else if (filegroups[fi].LayoutType == FileGroupLayoutType.Sliced) { for (int pi = 0; pi < partitions.Count; pi++) { DatabaseInstanceFileGroup nfg = new DatabaseInstanceFileGroup(ndi); nfg.FileGroupType = filegroups[fi].FileGroupType; nfg.FileGroupName = nfg.Name = string.Format("{0}_{1}", filegroups[fi].FileGroupName, pi); nfg.FileGroupReference.Guid = filegroups[fi].Guid; nfg.PartitionReference.Guid = partitions[pi].Guid; nfg.AllocatedSpace = (long)(filegroups[fi].AllocatedSpace * sizeFactor); nfg.Save(); nfg.GenerateInstanceFiles(dataDiskVolumes, sizeFactor); } } else { throw new NotImplementedException(); } } } return ndi; }
/// <summary> /// Copy contructor for doing deep copy of the <b>Database Instance</b> objects. /// </summary> /// <param name="old">The <b>Database Instance</b> to copy from.</param> public DatabaseInstance(DatabaseInstance old) : base(old) { CopyMembers(old); }
/// <summary> /// Creates a deep copy of the passed object. /// </summary> /// <param name="old">A <b>Database Instance</b> object to create the deep copy from.</param> private void CopyMembers(DatabaseInstance old) { this.databaseName = old.databaseName; }
/// <summary> /// Constructor for creating a new entity with object context and parent entity set. /// </summary> /// <param name="context">An object context class containing session information.</param> /// <param name="parent">The parent entity in the entity hierarchy.</param> public DatabaseInstanceFileGroup(DatabaseInstance parent) : base(parent.Context, parent) { InitializeMembers(); }
/// <summary> /// Creates a deep copy of the passed object. /// </summary> /// <param name="old">A <b>Database Instance</b> object to create the deep copy from.</param> private void CopyMembers(DatabaseInstance old) { this.databaseName = old.databaseName; }
/// <summary> /// Copy contructor for doing deep copy of the <b>Database Instance</b> objects. /// </summary> /// <param name="old">The <b>Database Instance</b> to copy from.</param> public DatabaseInstance(DatabaseInstance old) : base(old) { CopyMembers(old); }
internal smo::Database GetSmoDatabase() { return(DatabaseInstance.GetSmoDatabase()); }
internal smo::FileGroup GetSmoFileGroup() { return(DatabaseInstance.GetSmoDatabase().FileGroups[FileGroupName]); }
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; } } }