Beispiel #1
0
        private void CreateDatabase(ProvisionedService provisionedService)
        {
            string databaseName     = provisionedService.Name;
            string databasePassword = provisionedService.Password;
            string databaseUser     = provisionedService.User;

            try
            {
                DateTime start = DateTime.Now;
                Logger.Debug(Strings.SqlNodeCreateDatabaseDebugMessage, provisionedService.SerializeToJson());

                this.createDBScript = this.ExtractSqlScriptFromTemplate(databaseName);

                // split script on GO command
                IEnumerable <string> commandStrings = Regex.Split(this.createDBScript, "^\\s*GO\\s*$", RegexOptions.Multiline);

                using (TransactionScope ts = new TransactionScope())
                {
                    foreach (string commandString in commandStrings)
                    {
                        if (!string.IsNullOrEmpty(commandString.Trim()) && !commandString.Contains("[master]"))
                        {
                            using (SqlCommand cmd = new SqlCommand(commandString, this.connection))
                            {
                                if (commandString.Contains("CREATE DATABASE"))
                                {
                                    cmd.CommandTimeout = 0;
                                }

                                cmd.ExecuteNonQuery();
                            }
                        }
                    }
                }

                this.CreateDatabaseUser(databaseName, databaseUser, databasePassword);
                long storage = this.StorageForService(provisionedService);
                if (this.availableStorageBytes < storage)
                {
                    throw new MSSqlErrorException(MSSqlErrorException.MSSqlDiskFull);
                }

                this.availableStorageBytes -= storage;
                Logger.Debug(Strings.SqlNodeDoneCreatingDBDebugMessage, provisionedService.SerializeToJson(), (start - DateTime.Now).TotalSeconds);
            }
            catch (Exception ex)
            {
                Logger.Warning(Strings.SqlNodeCouldNotCreateDBWarningMessage, ex.ToString());
                throw;
            }
        }
Beispiel #2
0
        /// <summary>
        /// Provisions an MS Sql Server database.
        /// </summary>
        /// <param name="planRequest">The payment plan for the service.</param>
        /// <param name="credentials">Existing credentials for the service.</param>
        /// <returns>
        /// Credentials for the provisioned service.
        /// </returns>
        protected override ServiceCredentials Provision(ProvisionedServicePlanType planRequest, ServiceCredentials credentials)
        {
            //// todo: chek for plan
            ProvisionedService provisioned_service = new ProvisionedService();

            if (credentials == null)
            {
                throw new ArgumentNullException("credentials");
            }

            try
            {
                string name     = credentials.Name;
                string user     = credentials.User;
                string password = credentials.Password;
                provisioned_service.Name     = name;
                provisioned_service.User     = user;
                provisioned_service.Password = password;
                provisioned_service.Plan     = planRequest;

                this.CreateDatabase(provisioned_service);

                if (!ProvisionedService.Save())
                {
                    Logger.Error(Strings.SqlNodeCannotSaveProvisionedServicesErrorMessage, provisioned_service.SerializeToJson());
                    throw new MSSqlErrorException(MSSqlErrorException.MSSqlLocalDBError);
                }

                ServiceCredentials response = this.GenerateCredential(provisioned_service.Name, provisioned_service.User, provisioned_service.Password);
                this.provisionServed += 1;
                return(response);
            }
            catch (Exception)
            {
                this.DeleteDatabase(provisioned_service);
                throw;
            }
        }