/** * Get the name of the alias to use * @param alias * @param aliasType * @return */ private String getAliasName( IndexAlias alias, EntityIndex.AliasType aliasType ) { return aliasType == EntityIndex.AliasType.Read ? alias.getReadAlias() : alias.getWriteAlias(); }
/** * clean up cache */ @Override public void invalidate(IndexAlias alias) { aliasIndexCache.invalidate( alias.getWriteAlias() ); aliasIndexCache.invalidate( alias.getReadAlias() ); } }
public ReplicatedIndexAlias(IndexAlias alias){ this.readAlias = alias.getReadAlias(); this.writeAlias = alias.getWriteAlias(); } @Override
public EntityIndexBatch deindexWithDocId( final String docId ) { String[] indexes = entityIndex.getIndexes(); //get the default index if no alias exists yet if ( indexes == null || indexes.length == 0 ) { throw new IllegalStateException("No indexes exist for " + indexLocationStrategy.getAlias().getWriteAlias()); } if ( logger.isDebugEnabled() ) { logger.debug( "Deindexing to indexes {} with with documentId {} ", indexes, docId ); } container.addDeIndexRequest( new DeIndexOperation( indexes, docId ) ); return this; }
/** * Tests writing a document to a new index to ensure it's working correctly. See this post: * http://s.apache.org/index-missing-exception */ private void testNewIndex() { // create the document, this ensures the index is ready // Immediately create a document and remove it to ensure the entire cluster is ready // to receive documents. Occasionally we see errors. // See this post: http://s.apache.org/index-missing-exception if (logger.isTraceEnabled()) { logger.trace("Testing new index name: read {} write {}", alias.getReadAlias(), alias.getWriteAlias()); } final RetryOperation retryOperation = () -> { final String tempId = UUIDGenerator.newTimeUUID().toString(); esProvider.getClient().prepareIndex( alias.getWriteAlias(), VERIFY_TYPE, tempId ) .setSource(DEFAULT_PAYLOAD).get(); if (logger.isTraceEnabled()) { logger.trace("Successfully created new document with docId {} in index read {} write {} and type {}", tempId, alias.getReadAlias(), alias.getWriteAlias(), VERIFY_TYPE); } // delete all types, this way if we miss one it will get cleaned up esProvider.getClient().prepareDelete( alias.getWriteAlias(), VERIFY_TYPE, tempId).get(); if (logger.isTraceEnabled()) { logger.trace("Successfully deleted documents in read {} write {} and type {} with id {}", alias.getReadAlias(), alias.getWriteAlias(), VERIFY_TYPE, tempId); } return true; }; doInRetry(retryOperation); }
@Override public EntityIndexBatch index( final IndexEdge indexEdge, final Entity entity, final Optional<Set<String>> fieldsToIndex ) { IndexValidationUtils.validateIndexEdge(indexEdge); ValidationUtils.verifyEntityWrite(entity); ValidationUtils.verifyVersion( entity.getVersion() ); final String writeAlias = alias.getWriteAlias(); if ( logger.isDebugEnabled() ) { logger.debug( "Indexing to alias {} with scope {} on edge {} with entity data {}", writeAlias, applicationScope, indexEdge, entity.getFieldMap().keySet() ); } //add app id for indexing container.addIndexRequest(new IndexOperation(writeAlias, applicationScope, indexEdge, entity,fieldsToIndex)); return this; }
@Override public EntityIndexBatch deindex( final SearchEdge searchEdge, final Id id, final UUID version ) { IndexValidationUtils.validateSearchEdge(searchEdge); ValidationUtils.verifyIdentity(id); ValidationUtils.verifyVersion( version ); String[] indexes = entityIndex.getIndexes(); //get the default index if no alias exists yet if ( indexes == null || indexes.length == 0 ) { throw new IllegalStateException("No indexes exist for " + indexLocationStrategy.getAlias().getWriteAlias()); } if ( logger.isDebugEnabled() ) { logger.debug( "Deindexing to indexes {} with scope {} on edge {} with id {} and version {} ", indexes, applicationScope, searchEdge, id, version ); } container.addDeIndexRequest(new DeIndexOperation(indexes, applicationScope, searchEdge, id, version)); return this; }
IndicesAliasesRequestBuilder aliasesRequestBuilder = adminClient.indices().prepareAliases(); for (String currentIndex : indexNames) { aliasesRequestBuilder.removeAlias(currentIndex, alias.getWriteAlias()); count++; aliasesRequestBuilder.addAlias(indexName, alias.getWriteAlias());
/** * Completely delete an index. */ public Observable deleteApplication() { String idString = applicationId(applicationScope.getApplication()); final TermQueryBuilder tqb = QueryBuilders.termQuery(APPLICATION_ID_FIELDNAME, idString); final String[] indexes = getIndexes(); //Added For Graphite Metrics return Observable.from( indexes ).flatMap( index -> { final ListenableActionFuture<DeleteByQueryResponse> response = esProvider.getClient().prepareDeleteByQuery( alias.getWriteAlias() ).setQuery( tqb ).execute(); response.addListener( new ActionListener<DeleteByQueryResponse>() { @Override public void onResponse( DeleteByQueryResponse response ) { checkDeleteByQueryResponse( tqb, response ); } @Override public void onFailure( Throwable e ) { logger.error( "Failed on delete index", e.getMessage() ); } } ); return Observable.from( response ); } ).doOnError( t -> logger.error( "Failed on delete application", t.getMessage() ) ); }
@Test public void applicationAliasName(){ IndexLocationStrategy indexLocationStrategy = indexLocationStrategyFactory.getIndexLocationStrategy(applicationScope); String applicationId = applicationScope.getApplication().getUuid().toString().toLowerCase(); assertEquals( indexLocationStrategy.getAlias().getReadAlias(), clusterName +"_"+ applicationId + "_read_" + indexFig.getAliasPostfix() ); assertEquals( indexLocationStrategy.getAlias().getWriteAlias(), clusterName +"_"+ applicationId + "_write_" + indexFig.getAliasPostfix() ); }
@Test public void managementAliasName(){ IndexLocationStrategy indexLocationStrategy = indexLocationStrategyFactory.getIndexLocationStrategy(managementApplicationScope); String managementAppIndexName = indexProcessorFig.getManagementAppIndexName(); assertEquals( indexLocationStrategy.getAlias().getReadAlias(), clusterName + "_" + keyspaceName + "_" + managementAppIndexName + "_read_" + indexFig.getAliasPostfix() ); assertEquals( indexLocationStrategy.getAlias().getWriteAlias(), clusterName + "_" + keyspaceName + "_" + managementAppIndexName + "_write_" + indexFig.getAliasPostfix() ); }
@Test public void testReplication(){ IndexLocationStrategy indexLocationStrategy = indexLocationStrategyFactory.getIndexLocationStrategy(applicationScope); ReplicatedIndexLocationStrategy replicatedIndexLocationStrategy = new ReplicatedIndexLocationStrategy(indexLocationStrategy); assertEquals(replicatedIndexLocationStrategy.getApplicationScope(),indexLocationStrategy.getApplicationScope()); assertEquals(replicatedIndexLocationStrategy.getIndexInitialName(),indexLocationStrategy.getIndexInitialName()); assertEquals(replicatedIndexLocationStrategy.getIndexRootName(),indexLocationStrategy.getIndexRootName()); assertEquals(replicatedIndexLocationStrategy.getNumberOfReplicas(), indexLocationStrategy.getNumberOfReplicas()); assertEquals(replicatedIndexLocationStrategy.getNumberOfShards(),indexLocationStrategy.getNumberOfShards()); assertEquals(replicatedIndexLocationStrategy.getAlias().getReadAlias(),indexLocationStrategy.getAlias().getReadAlias()); assertEquals(replicatedIndexLocationStrategy.getAlias().getWriteAlias(),indexLocationStrategy.getAlias().getWriteAlias()); }