예제 #1
0
 public WorkerTask(IOptions <LoaderSettings> settings, IStatsDPublisher stats)
 {
     _stats    = stats;
     _settings = settings.Value;
     ThreadPool.GetMaxThreads(out var maxParallelization, out _);
     _semaphoreSlim = new SemaphoreSlim(_settings.Parallelization == 0 ? maxParallelization : _settings.Parallelization);
 }
예제 #2
0
        public static bool Save(this LoaderSettings settings, string path = Constants.UoLoaderDefaultConfigName)
        {
            var settingsString = JsonConvert.SerializeObject(settings);

            try {
                File.WriteAllText(path, settingsString);
                return(true);
            }
            catch (Exception ex) {
                Environment.FailFast("Unable to save configuration settings.", ex);
                return(false);
            }
        }
예제 #3
0
        static void LoadConfig()
        {
            if (!File.Exists(Constants.UoLoaderDefaultConfigName))
            {
                var settings = ConfigurationHelper.GetDefaultSettings();
                settings.Save();
                _settings = settings;
                return;
            }

            var fileContents   = File.ReadAllText(Constants.UoLoaderDefaultConfigName);
            var settingsObject = JsonConvert.DeserializeObject <LoaderSettings>(fileContents);

            if (settingsObject == null)
            {
                settingsObject = ConfigurationHelper.GetDefaultSettings();
                settingsObject.Save();
                _settings = settingsObject;
                return;
            }

            _settings = settingsObject;
        }
예제 #4
0
        public void Write(string destinationTable, TableType tableType, IDataReader reader)
        {
            using (var loader = new LoaderClient(connectionString.DataSource, new LoaderClientBindingConfiguration(), "", false))
            {
                var settings = new LoaderSettings
                {
                    UseSSL           = false,
                    LoadType         = "TCP",
                    StagingDatabase  = "",
                    DestinationTable = connectionString.InitialCatalog + "." + Utils.AddDefaultSchemaAndQuoteTableName(destinationTable),
                    ClientIps        = LoaderClient.GetMachineIpList()
                };

                if (tableType == TableType.Distributed)
                {
                    settings.Mode = LoaderMode.FastAppend;
                    settings.MultipleTransactions = true;
                }
                else
                {
                    settings.Mode = LoaderMode.Append;
                    settings.MultipleTransactions = false;
                }

                loader.SetConfigurationOptions(settings);
                loader.AuthenticateSqlUser(connectionString.UserID, connectionString.Password);

                loader.BeginExecuteBinary(delegate { }, null, loader);

                while (!loader.IsReady)
                {
                    Thread.Sleep(100);
                }

                if (IsStatusError(loader.Status))
                {
                    throw new Exception(loader.Status.LoaderError.ExceptionMessage);
                }

                loader.SendData(reader);
                loader.EndSendData();

                if (loader.Status.Status == LoaderStatusType.Rejected)
                {
                    throw new Exception("LoaderStatusType.Rejected");
                }

                if (loader.Status.Status == LoaderStatusType.Aborted)
                {
                    throw new Exception("LoaderStatusType.Aborted");
                }

                if (loader.Status.Status == LoaderStatusType.Canceled)
                {
                    throw new Exception("LoaderStatusType.Canceled");
                }

                if (loader.Status.Status == LoaderStatusType.Error)
                {
                    throw new Exception("LoaderStatusType.Error");
                }

                if (loader.Status.Status == LoaderStatusType.Failed)
                {
                    throw new Exception("LoaderStatusType.Failed");
                }

                while (((loader.Status.Status != LoaderStatusType.Finished) &&
                        (loader.Status.Status != LoaderStatusType.Completed)) && !IsStatusError(loader.Status))
                {
                    Thread.Sleep(100);
                }

                if (IsStatusError(loader.Status))
                {
                    throw new Exception(loader.Status.LoaderError.ExceptionMessage);
                }
            }
        }
예제 #5
0
 public Updater(HttpClient client, LoaderSettings settings)
 {
     _httpClient = client;
     _settings   = settings;
 }