Exemple #1
0
        private void CreateIndex(string indexName)
        {
            if (_client.IndexExists(indexName).Exists)
            {
                return;
            }

            var indexSettings = new IndexSettings
            {
                { "index.store.compress.stored", true },
                { "index.store.compress.tv", true },
                { "index.query.default_field", ElasticSearchFields.Message }
            };

            IIndicesOperationResponse result = _client.CreateIndex(indexName, indexSettings);

            CreateMappings(indexName);

            if (!result.OK)
            {
                throw new ApplicationException(string.Format("Failed to create index: '{0}'. Result: '{1}'", indexName, result.ConnectionStatus.Result));
            }

            Log.Trace(string.Format("{0}: Index '{1}' i successfully created.", LogContext.LogType, indexName));
        }
Exemple #2
0
 public ElasticsearchIndexCreationStrategyResult(IEnumerable <IElasticsearchIndexContributor> contributors, bool success, IIndicesOperationResponse indexResponse, Exception exception)
 {
     Contributors  = contributors;
     Success       = success;
     IndexResponse = indexResponse;
     Exception     = exception;
 }
 public ElasticsearchIndexCreationStrategyResult(IEnumerable<IElasticsearchIndexContributor> contributors, bool success, IIndicesOperationResponse indexResponse, Exception exception)
 {
     Contributors = contributors;
     Success = success;
     IndexResponse = indexResponse;
     Exception = exception;
 }
        public HttpResponseMessage CreateIndex(FormDataCollection postData)
        {
            SampleConfiguration config = new SampleConfiguration();

            esNode = new Uri(config.ElasticsearchServerHost);
            string indexName = postData.Get("indexName");

            connectionSettings = new ConnectionSettings(esNode, defaultIndex: indexName);

            var indexSettings = new IndexSettings();

            indexSettings.NumberOfShards   = 1;
            indexSettings.NumberOfReplicas = 0;
            esClient = new ElasticClient(connectionSettings);

            IIndicesOperationResponse indexOperationResponse = esClient.CreateIndex(c => c
                                                                                    .Index(indexName)
                                                                                    .InitializeUsing(indexSettings)
                                                                                    .AddMapping <Product>(m => m.MapFromAttributes())
                                                                                    );

            if (indexOperationResponse.Acknowledged == true)
            {
                return(Request.CreateResponse(HttpStatusCode.Created, indexOperationResponse.Acknowledged));
            }
            else
            {
                return(Request.CreateResponse(HttpStatusCode.InternalServerError, indexOperationResponse.Acknowledged));
            }
        }
        private static void AssertIndexCreateSuccess(IIndicesOperationResponse createResponse)
        {
            var status = createResponse.ConnectionStatus;

            if (!status.Success)
            {
                if (status.OriginalException != null)
                {
                    throw status.OriginalException;
                }
                throw new ApplicationException("Error while creating index, " + Encoding.UTF8.GetString(status.ResponseRaw));
            }
        }
        private bool CreateIndex(string indexName)
        {
            if (client.IndexExists(indexName).Exists)
            {
                return(true);
            }

            var indexSettings = new IndexSettings();

            indexSettings.Add("index.store.compress.stored", true);
            indexSettings.Add("index.store.compress.tv", true);
            indexSettings.Add("index.query.default_field", "@message");
            IIndicesOperationResponse result = client.CreateIndex(indexName, indexSettings);

            CreateMappings(indexName);

            if (!result.OK)
            {
                logger.Error(string.Format("Failed to create index: '{0}'. Result: '{1}' Retrying...", indexName, result.ConnectionStatus.Result));
            }

            return(result.OK);
        }
 private void OnCompleted(IEnumerable <IElasticsearchIndexCreationSuccessContributor> contributors, IIndicesOperationResponse indexResponse)
 {
     foreach (var c in contributors)
     {
         c.OnSuccess(_client, indexResponse);
     }
 }
        public void ConfigureIndexes(IElasticClient client)
        {
            foreach (var index in GetIndexes())
            {
                IIndicesOperationResponse response = null;
                int currentVersion = GetAliasVersion(client, index.Name);

                var templatedIndex = index as ITemplatedElasticSeachIndex;
                if (templatedIndex != null)
                {
                    response = client.PutTemplate(index.VersionedName, template => templatedIndex.CreateTemplate(template).AddAlias(index.Name));
                }
                else if (!client.IndexExists(index.VersionedName).Exists)
                {
                    response = client.CreateIndex(index.VersionedName, descriptor => index.CreateIndex(descriptor).AddAlias(index.Name));
                }

                Debug.Assert(response == null || response.IsValid, response?.ServerError != null ? response.ServerError.Error : "An error occurred creating the index or template.");

                // Add existing indexes to the alias.
                if (!client.AliasExists(index.Name).Exists)
                {
                    if (templatedIndex != null)
                    {
                        var indices = client.IndicesStats().Indices.Where(kvp => kvp.Key.StartsWith(index.VersionedName)).Select(kvp => kvp.Key).ToList();
                        if (indices.Count > 0)
                        {
                            var descriptor = new AliasDescriptor();
                            foreach (string name in indices)
                            {
                                descriptor.Add(add => add.Index(name).Alias(index.Name));
                            }

                            response = client.Alias(descriptor);
                        }
                    }
                    else
                    {
                        response = client.Alias(a => a.Add(add => add.Index(index.VersionedName).Alias(index.Name)));
                    }

                    Debug.Assert(response != null && response.IsValid, response?.ServerError != null ? response.ServerError.Error : "An error occurred creating the alias.");
                }

                // already on current version
                if (currentVersion >= index.Version || currentVersion < 1)
                {
                    continue;
                }

                // upgrade
                _lockProvider.TryUsingAsync("reindex", async() => {
                    await _workItemQueue.EnqueueAsync(new ReindexWorkItem {
                        OldIndex  = String.Concat(index.Name, "-v", currentVersion),
                        NewIndex  = index.VersionedName,
                        Alias     = index.Name,
                        DeleteOld = true
                    });
                }, TimeSpan.Zero, CancellationToken.None);
            }
        }
Exemple #9
0
 private void OnError(IList <IElasticsearchIndexCreationFailureContributor> contributors, IIndicesOperationResponse response = null, Exception ex = null)
 {
     foreach (var c in contributors)
     {
         c.OnFailure(_client, response, ex);
     }
 }
Exemple #10
0
 protected virtual IElasticsearchIndexCreationStrategyResult CreateResult(IList <IElasticsearchIndexContributor> contributors, bool success, IIndicesOperationResponse response, Exception ex)
 {
     return(new ElasticsearchIndexCreationStrategyResult(contributors, success, response, ex));
 }
Exemple #11
0
 private IElasticsearchIndexCreationStrategyResult CreateResultCore(IList <IElasticsearchIndexContributor> contributors, IIndicesOperationResponse response, Exception ex)
 {
     return(CreateResult(contributors, (ex == null && response.IsValid), response, ex));
 }
Exemple #12
0
        public virtual void ConfigureIndexes(IElasticClient client, IEnumerable <IElasticIndex> indexes = null)
        {
            if (indexes == null)
            {
                indexes = GetIndexes();
            }

            foreach (var idx in indexes)
            {
                int currentVersion = GetAliasVersion(client, idx.AliasName);

                IIndicesOperationResponse response = null;
                var templatedIndex = idx as ITemplatedElasticIndex;
                if (templatedIndex != null)
                {
                    response = client.PutTemplate(idx.VersionedName, template => templatedIndex.CreateTemplate(template).AddAlias(idx.AliasName));
                }
                else if (!client.IndexExists(idx.VersionedName).Exists)
                {
                    response = client.CreateIndex(idx.VersionedName, descriptor => idx.CreateIndex(descriptor).AddAlias(idx.AliasName));
                }

                Debug.Assert(response == null || response.IsValid, response?.ServerError != null ? response.ServerError.Error : "An error occurred creating the index or template.");

                // Add existing indexes to the alias.
                if (!client.AliasExists(idx.AliasName).Exists)
                {
                    if (templatedIndex != null)
                    {
                        var indices = client.IndicesStats().Indices.Where(kvp => kvp.Key.StartsWith(idx.VersionedName)).Select(kvp => kvp.Key).ToList();
                        if (indices.Count > 0)
                        {
                            var descriptor = new AliasDescriptor();
                            foreach (string name in indices)
                            {
                                descriptor.Add(add => add.Index(name).Alias(idx.AliasName));
                            }

                            response = client.Alias(descriptor);
                        }
                    }
                    else
                    {
                        response = client.Alias(a => a.Add(add => add.Index(idx.VersionedName).Alias(idx.AliasName)));
                    }

                    Debug.Assert(response != null && response.IsValid, response?.ServerError != null ? response.ServerError.Error : "An error occurred creating the alias.");
                }

                // already on current version
                if (currentVersion >= idx.Version || currentVersion < 1)
                {
                    continue;
                }

                var reindexWorkItem = new ReindexWorkItem {
                    OldIndex   = String.Concat(idx.AliasName, "-v", currentVersion),
                    NewIndex   = idx.VersionedName,
                    Alias      = idx.AliasName,
                    DeleteOld  = true,
                    ParentMaps = idx.GetIndexTypes()
                                 .Select(kvp => new ParentMap {
                        Type = kvp.Value.Name, ParentPath = kvp.Value.ParentPath
                    })
                                 .Where(m => !String.IsNullOrEmpty(m.ParentPath))
                                 .ToList()
                };

                bool isReindexing = _lockProvider.IsLockedAsync(String.Concat("reindex:", reindexWorkItem.Alias, reindexWorkItem.OldIndex, reindexWorkItem.NewIndex)).Result;
                // already reindexing
                if (isReindexing)
                {
                    continue;
                }

                // enqueue reindex to new version
                _lockProvider.TryUsingAsync("enqueue-reindex", () => _workItemQueue.EnqueueAsync(reindexWorkItem), TimeSpan.Zero, CancellationToken.None).Wait();
            }
        }
 public void OnSuccess(IElasticClient client, IIndicesOperationResponse response)
 {
     client.Alias(a => a.Add(aa => aa.Alias(client.Infer.DefaultIndex).Index(_indexName)));
 }