/** * 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 SearchRequestBuilder getBuilder(){ SearchRequestBuilder srb = esProvider.getClient().prepareSearch( alias.getReadAlias() ).setTypes( IndexingUtils.ES_ENTITY_TYPE ).setSearchType( SearchType.QUERY_THEN_FETCH); return srb; }
/** * 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); }
aliasesRequestBuilder.addAlias(indexName, alias.getReadAlias());
/** * Get the search request builder */ public SearchRequestBuilder getBuilder( final SearchEdge searchEdge, final SearchTypes searchTypes, final QueryVisitor visitor, final int limit, final int from, final List<SortPredicate> sortPredicates, final Map<String, Class> fieldsWithType ) { Preconditions .checkArgument( limit <= EntityIndex.MAX_LIMIT, "limit is greater than max " + EntityIndex.MAX_LIMIT ); Preconditions.checkNotNull( visitor, "query visitor cannot be null"); SearchRequestBuilder srb = esProvider.getClient().prepareSearch( alias.getReadAlias() ).setTypes( IndexingUtils.ES_ENTITY_TYPE ) .setSearchType( SearchType.QUERY_THEN_FETCH ); final Optional<QueryBuilder> queryBuilder = visitor.getQueryBuilder(); if ( queryBuilder.isPresent() ) { srb.setQuery( queryBuilder.get() ); } srb.setPostFilter( createFilterBuilder( searchEdge, visitor, searchTypes ) ); srb = srb.setFrom( from ).setSize( limit ); //if we have a geo field, sort by closest to farthest by default final GeoSortFields geoFields = visitor.getGeoSorts(); //no sort predicates, sort by edge time descending, entity id second if ( sortPredicates.size() == 0 ) { applyDefaultSortPredicates( srb, geoFields ); } else { applySortPredicates( srb, sortPredicates, geoFields, fieldsWithType ); } return srb; }
this.alias.getReadAlias(),entityId, srb );
this.alias.getReadAlias(), searchEdge.getNodeId(), searchEdge.getEdgeName(), searchTypes.getTypeNames( applicationScope ), srb );
@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()); }