コード例 #1
0
        public UserDatabaseInstance GenerateUserDatabaseInstance(DatabaseVersion databaseVersion)
        {
            // TODO: this part probably needs some optimization

            // Load server instances that can store user databases
            var ef = new EntityFactory(Context);
            var sis = ef.FindAll<ServerInstance>()
                .Where(i => i.ServerVersionReference.Guid == databaseVersion.ServerVersionReference.Guid)
                .OrderBy(i => i.Machine.Number)
                .ToArray();

            if (sis.Length == 0)
            {
                throw new InvalidOperationException("At least one server instance has to configured for the database version.");    // TODO
            }

            // Get current number of user databases
            var dd = databaseVersion.DatabaseDefinition;
            dd.LoadDatabaseInstances(false);
            var dbnum = dd.DatabaseInstances.Count;

            // Find a server that is available
            int off = 0;
            int sin = 0;
            while (off < sis.Length)
            {
                sin = (dbnum + 1 + off) % sis.Length;
                bool ok = true;

                var diag = sis[sin].RunDiagnostics();

                foreach (var d in diag)
                {
                    if (d.Status != DiagnosticMessageStatus.OK)
                    {
                        ok = false;
                        break;
                    }
                }

                if (ok)
                {
                    break;
                }

                off++;
            }

            // Default slice (FULL)
            dd.LoadSlices(false);
            var sl = dd.Slices[Constants.FullSliceName];

            // Create physical database instance
            var ddi = new DatabaseInstanceInstaller(databaseVersion.DatabaseDefinition);
            var di = ddi.GenerateDatabaseInstance(
                sis[sin],
                sl,
                databaseVersion);

            di.Save();

            // Add user database mapping
            var udi = new UserDatabaseInstance(user);
            udi.DatabaseVersion = databaseVersion;
            udi.DatabaseInstance = di;

            udi.Save();

            return udi;
        }
コード例 #2
0
 /// <summary>
 /// Copy contructor for doing deep copy of the <b>Slice</b> objects.
 /// </summary>
 /// <param name="old">The <b>Slice</b> to copy from.</param>
 public UserDatabaseInstance(UserDatabaseInstance old)
     : base(old)
 {
     CopyMembers(old);
 }
コード例 #3
0
 /// <summary>
 /// Creates a deep copy of the passed object.
 /// </summary>
 /// <param name="old">A <b>Slice</b> object to create the deep copy from.</param>
 private void CopyMembers(UserDatabaseInstance old)
 {
 }
コード例 #4
0
 /// <summary>
 /// Creates a deep copy of the passed object.
 /// </summary>
 /// <param name="old">A <b>Slice</b> object to create the deep copy from.</param>
 private void CopyMembers(UserDatabaseInstance old)
 {
 }
コード例 #5
0
 /// <summary>
 /// Copy contructor for doing deep copy of the <b>Slice</b> objects.
 /// </summary>
 /// <param name="old">The <b>Slice</b> to copy from.</param>
 public UserDatabaseInstance(UserDatabaseInstance old)
     : base(old)
 {
     CopyMembers(old);
 }