Exemple #1
0
        /// <summary>
        /// CloudConnection constructor
        /// </summary>
        /// <param name="dbname">database to execute transactions with</param>
        /// <param name="managementConn">the management connection instance</param>
        /// <param name="defaultOpenMode">`= TransactionMode.OPEN`: How to open the database `dbname`</param>
        /// <param name="computeName">Compute to be used for this connection. If not specified, the default compute will be used.</param>
        public CloudConnection(
            string dbname,
            ManagementConnection managementConn,
            TransactionMode defaultOpenMode = Connection.DEFAULT_OPEN_MODE,
            string computeName    = null,
            int connectionTimeout = Connection.DEFAULT_CONNECTION_TIMEOUT
            ) : base(dbname, defaultOpenMode, managementConn.Scheme, managementConn.Host, managementConn.Port, connectionTimeout)
        {
            this.managementConn = managementConn;
            this.ComputeName    = computeName;

            new DelveClient(this); //to register the connection with a client
        }
 public static CloudConnection CreateCloudConnection(string dbname, string computeName, ManagementConnection mgmtConn)
 {
     return(new CloudConnection(
                dbname,
                mgmtConn,
                computeName: computeName
                ));
 }
        public static CloudConnection CreateCloudConnection()
        {
            ManagementConnection mgmtConn = new ManagementConnection(
                scheme: "https",
                host: "azure-ssh.relationalai.com",
                port: 443,
                verifySSL: false
                );

            ComputeInfoProtocol provisionedCompute = null;
            bool requestedOrProvisioning           = true;

            string dbname = "";

            while (requestedOrProvisioning)
            {
                requestedOrProvisioning = false;

                var computes = mgmtConn.ListComputes();

                foreach (var comp in computes)
                {
                    if ("PROVISIONED".Equals(comp.State))
                    {
                        var databases = mgmtConn.ListDatabases();
                        foreach (var db in databases)
                        {
                            if (comp.Name.Equals(db.Default_compute_name))
                            {
                                return(CreateCloudConnection(db.Name, comp.Name, mgmtConn));
                            }
                        }

                        provisionedCompute = comp;
                        break;
                    }
                    else if ("REQUESTED".Equals(comp.State) || "PROVISIONING".Equals(comp.State))
                    {
                        requestedOrProvisioning = true;
                    }
                }

                dbname = IntegrationTestsCommons.genDbname("testcsharpclient");

                if (!requestedOrProvisioning)
                {
                    if (provisionedCompute == null)
                    {
                        provisionedCompute = mgmtConn.CreateCompute(dbname, RAIComputeSize.XS);

                        requestedOrProvisioning = true;
                    }
                }

                if (requestedOrProvisioning)
                {
                    Console.WriteLine("An instance is being requested or provisioned. Will try again in 10 seconds.");
                    Thread.Sleep(10000);
                }
            }
            return(CreateCloudConnection(dbname, provisionedCompute.Name, mgmtConn));
        }