| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.apache.solr.client.solrj.request; |
| |
| import java.io.IOException; |
| import java.util.Arrays; |
| import java.util.List; |
| |
| import org.apache.solr.client.solrj.SolrClient; |
| import org.apache.solr.client.solrj.SolrRequest; |
| import org.apache.solr.client.solrj.SolrServerException; |
| import org.apache.solr.client.solrj.response.CoreAdminResponse; |
| import org.apache.solr.client.solrj.util.SolrIdentifierValidator; |
| import org.apache.solr.common.cloud.Replica; |
| import org.apache.solr.common.cloud.ZkStateReader; |
| import org.apache.solr.common.params.CoreAdminParams; |
| import org.apache.solr.common.params.CoreAdminParams.CoreAdminAction; |
| import org.apache.solr.common.params.ModifiableSolrParams; |
| import org.apache.solr.common.params.SolrParams; |
| |
| /** |
| * This class is experimental and subject to change. |
| * |
| * @since solr 1.3 |
| */ |
| public class CoreAdminRequest extends SolrRequest<CoreAdminResponse> { |
| |
| protected String core = null; |
| protected String other = null; |
| protected boolean isIndexInfoNeeded = true; |
| protected CoreAdminParams.CoreAdminAction action = null; |
| |
| //a create core request |
| public static class Create extends CoreAdminRequest { |
| |
| protected String instanceDir; |
| protected String configName = null; |
| protected String schemaName = null; |
| protected String dataDir = null; |
| protected String ulogDir = null; |
| protected String configSet = null; |
| protected String collection; |
| private Integer numShards; |
| private String shardId; |
| private String roles; |
| private String coreNodeName; |
| private Boolean loadOnStartup; |
| private Boolean isTransient; |
| private String collectionConfigName; |
| |
| public Create() { |
| action = CoreAdminAction.CREATE; |
| } |
| |
| public void setInstanceDir(String instanceDir) { this.instanceDir = instanceDir; } |
| public void setSchemaName(String schema) { this.schemaName = schema; } |
| public void setConfigName(String config) { this.configName = config; } |
| public void setDataDir(String dataDir) { this.dataDir = dataDir; } |
| public void setUlogDir(String ulogDir) { this.ulogDir = ulogDir; } |
| public void setConfigSet(String configSet) { |
| this.configSet = configSet; |
| } |
| public void setCollection(String collection) { this.collection = collection; } |
| public void setNumShards(int numShards) {this.numShards = numShards;} |
| public void setShardId(String shardId) {this.shardId = shardId;} |
| public void setRoles(String roles) {this.roles = roles;} |
| public void setCoreNodeName(String coreNodeName) {this.coreNodeName = coreNodeName;} |
| public void setIsTransient(Boolean isTransient) { this.isTransient = isTransient; } |
| public void setIsLoadOnStartup(Boolean loadOnStartup) { this.loadOnStartup = loadOnStartup;} |
| public void setCollectionConfigName(String name) { this.collectionConfigName = name;} |
| |
| public String getInstanceDir() { return instanceDir; } |
| public String getSchemaName() { return schemaName; } |
| public String getConfigName() { return configName; } |
| public String getDataDir() { return dataDir; } |
| public String getUlogDir() { return ulogDir; } |
| public String getConfigSet() { |
| return configSet; |
| } |
| public String getCollection() { return collection; } |
| public String getShardId() { return shardId; } |
| public String getRoles() { return roles; } |
| public String getCoreNodeName() { return coreNodeName; } |
| public Boolean getIsLoadOnStartup() { return loadOnStartup; } |
| public Boolean getIsTransient() { return isTransient; } |
| public String getCollectionConfigName() { return collectionConfigName;} |
| |
| /** |
| * Provide the name of the core to be created. |
| * |
| * Core names must consist entirely of periods, underscores and alphanumerics. Other characters are not allowed. |
| * |
| * @throws IllegalArgumentException if the core name contains invalid characters. |
| */ |
| @Override |
| public void setCoreName(String coreName) { |
| this.core = SolrIdentifierValidator.validateCoreName(coreName); |
| } |
| |
| @Override |
| public SolrParams getParams() { |
| if( action == null ) { |
| throw new RuntimeException( "no action specified!" ); |
| } |
| ModifiableSolrParams params = new ModifiableSolrParams(); |
| params.set( CoreAdminParams.ACTION, action.toString() ); |
| if( action.equals(CoreAdminAction.CREATE) ) { |
| params.set( CoreAdminParams.NAME, core ); |
| } else { |
| params.set( CoreAdminParams.CORE, core ); |
| } |
| params.set( CoreAdminParams.INSTANCE_DIR, instanceDir); |
| if (configName != null) { |
| params.set( CoreAdminParams.CONFIG, configName); |
| } |
| if (schemaName != null) { |
| params.set( CoreAdminParams.SCHEMA, schemaName); |
| } |
| if (dataDir != null) { |
| params.set( CoreAdminParams.DATA_DIR, dataDir); |
| } |
| if (ulogDir != null) { |
| params.set( CoreAdminParams.ULOG_DIR, ulogDir); |
| } |
| if (configSet != null) { |
| params.set( CoreAdminParams.CONFIGSET, configSet); |
| } |
| if (collection != null) { |
| params.set( CoreAdminParams.COLLECTION, collection); |
| } |
| if (numShards != null) { |
| params.set( ZkStateReader.NUM_SHARDS_PROP, numShards); |
| } |
| if (shardId != null) { |
| params.set( CoreAdminParams.SHARD, shardId); |
| } |
| if (roles != null) { |
| params.set( CoreAdminParams.ROLES, roles); |
| } |
| if (coreNodeName != null) { |
| params.set( CoreAdminParams.CORE_NODE_NAME, coreNodeName); |
| } |
| |
| if (isTransient != null) { |
| params.set(CoreAdminParams.TRANSIENT, isTransient); |
| } |
| |
| if (loadOnStartup != null) { |
| params.set(CoreAdminParams.LOAD_ON_STARTUP, loadOnStartup); |
| } |
| |
| if (collectionConfigName != null) { |
| params.set("collection.configName", collectionConfigName); |
| } |
| |
| return params; |
| } |
| |
| } |
| |
| public static class WaitForState extends CoreAdminRequest { |
| protected String nodeName; |
| protected String coreNodeName; |
| protected Replica.State state; |
| protected Boolean checkLive; |
| protected Boolean onlyIfLeader; |
| protected Boolean onlyIfLeaderActive; |
| |
| public WaitForState() { |
| action = CoreAdminAction.PREPRECOVERY; |
| } |
| |
| public void setNodeName(String nodeName) { |
| this.nodeName = nodeName; |
| } |
| |
| public String getNodeName() { |
| return nodeName; |
| } |
| |
| public String getCoreNodeName() { |
| return coreNodeName; |
| } |
| |
| public void setCoreNodeName(String coreNodeName) { |
| this.coreNodeName = coreNodeName; |
| } |
| |
| public Replica.State getState() { |
| return state; |
| } |
| |
| public void setState(Replica.State state) { |
| this.state = state; |
| } |
| |
| public Boolean getCheckLive() { |
| return checkLive; |
| } |
| |
| public void setCheckLive(Boolean checkLive) { |
| this.checkLive = checkLive; |
| } |
| |
| public boolean isOnlyIfLeader() { |
| return onlyIfLeader; |
| } |
| |
| public void setOnlyIfLeader(boolean onlyIfLeader) { |
| this.onlyIfLeader = onlyIfLeader; |
| } |
| |
| public void setOnlyIfLeaderActive(boolean onlyIfLeaderActive) { |
| this.onlyIfLeaderActive = onlyIfLeaderActive; |
| } |
| |
| @Override |
| public SolrParams getParams() { |
| if( action == null ) { |
| throw new RuntimeException( "no action specified!" ); |
| } |
| ModifiableSolrParams params = new ModifiableSolrParams(); |
| params.set( CoreAdminParams.ACTION, action.toString() ); |
| |
| params.set( CoreAdminParams.CORE, core ); |
| |
| if (nodeName != null) { |
| params.set( "nodeName", nodeName); |
| } |
| |
| if (coreNodeName != null) { |
| params.set( "coreNodeName", coreNodeName); |
| } |
| |
| if (state != null) { |
| params.set(ZkStateReader.STATE_PROP, state.toString()); |
| } |
| |
| if (checkLive != null) { |
| params.set( "checkLive", checkLive); |
| } |
| |
| if (onlyIfLeader != null) { |
| params.set( "onlyIfLeader", onlyIfLeader); |
| } |
| |
| if (onlyIfLeaderActive != null) { |
| params.set( "onlyIfLeaderActive", onlyIfLeaderActive); |
| } |
| |
| return params; |
| } |
| |
| public String toString() { |
| if (action != null) { |
| return "WaitForState: "+getParams(); |
| } else { |
| return super.toString(); |
| } |
| } |
| } |
| |
| public static class RequestRecovery extends CoreAdminRequest { |
| |
| public RequestRecovery() { |
| action = CoreAdminAction.REQUESTRECOVERY; |
| } |
| |
| @Override |
| public SolrParams getParams() { |
| if( action == null ) { |
| throw new RuntimeException( "no action specified!" ); |
| } |
| ModifiableSolrParams params = new ModifiableSolrParams(); |
| params.set( CoreAdminParams.ACTION, action.toString() ); |
| |
| params.set( CoreAdminParams.CORE, core ); |
| |
| return params; |
| } |
| } |
| |
| public static class RequestSyncShard extends CoreAdminRequest { |
| private String shard; |
| private String collection; |
| |
| public RequestSyncShard() { |
| action = CoreAdminAction.REQUESTSYNCSHARD; |
| } |
| |
| @Override |
| public SolrParams getParams() { |
| if( action == null ) { |
| throw new RuntimeException( "no action specified!" ); |
| } |
| ModifiableSolrParams params = new ModifiableSolrParams(); |
| params.set(CoreAdminParams.ACTION, action.toString()); |
| params.set("shard", shard); |
| params.set("collection", collection); |
| params.set(CoreAdminParams.CORE, core); |
| return params; |
| } |
| |
| public String getShard() { |
| return shard; |
| } |
| |
| public void setShard(String shard) { |
| this.shard = shard; |
| } |
| |
| public String getCollection() { |
| return collection; |
| } |
| |
| public void setCollection(String collection) { |
| this.collection = collection; |
| } |
| } |
| |
| public static class OverrideLastPublished extends CoreAdminRequest { |
| protected String state; |
| |
| public OverrideLastPublished() { |
| action = CoreAdminAction.FORCEPREPAREFORLEADERSHIP; |
| } |
| |
| @Override |
| public SolrParams getParams() { |
| if( action == null ) { |
| throw new RuntimeException( "no action specified!" ); |
| } |
| ModifiableSolrParams params = new ModifiableSolrParams(); |
| params.set(CoreAdminParams.ACTION, action.toString()); |
| params.set(CoreAdminParams.CORE, core); |
| params.set(ZkStateReader.STATE_PROP, state); |
| return params; |
| } |
| |
| public String getState() { |
| return state; |
| } |
| |
| public void setState(String state) { |
| this.state = state; |
| } |
| } |
| |
| public static class MergeIndexes extends CoreAdminRequest { |
| protected List<String> indexDirs; |
| protected List<String> srcCores; |
| |
| public MergeIndexes() { |
| action = CoreAdminAction.MERGEINDEXES; |
| } |
| |
| public void setIndexDirs(List<String> indexDirs) { |
| this.indexDirs = indexDirs; |
| } |
| |
| public List<String> getIndexDirs() { |
| return indexDirs; |
| } |
| |
| public List<String> getSrcCores() { |
| return srcCores; |
| } |
| |
| public void setSrcCores(List<String> srcCores) { |
| this.srcCores = srcCores; |
| } |
| |
| @Override |
| public SolrParams getParams() { |
| if (action == null) { |
| throw new RuntimeException("no action specified!"); |
| } |
| ModifiableSolrParams params = new ModifiableSolrParams(); |
| params.set(CoreAdminParams.ACTION, action.toString()); |
| params.set(CoreAdminParams.CORE, core); |
| if (indexDirs != null) { |
| for (String indexDir : indexDirs) { |
| params.add(CoreAdminParams.INDEX_DIR, indexDir); |
| } |
| } |
| if (srcCores != null) { |
| for (String srcCore : srcCores) { |
| params.add(CoreAdminParams.SRC_CORE, srcCore); |
| } |
| } |
| return params; |
| } |
| } |
| |
| public static class Unload extends CoreAdminRequest { |
| protected boolean deleteIndex; |
| protected boolean deleteDataDir; |
| protected boolean deleteInstanceDir; |
| |
| public Unload(boolean deleteIndex) { |
| action = CoreAdminAction.UNLOAD; |
| this.deleteIndex = deleteIndex; |
| } |
| |
| public boolean isDeleteIndex() { |
| return deleteIndex; |
| } |
| |
| public void setDeleteIndex(boolean deleteIndex) { |
| this.deleteIndex = deleteIndex; |
| } |
| |
| public void setDeleteDataDir(boolean deleteDataDir) { |
| this.deleteDataDir = deleteDataDir; |
| } |
| |
| public void setDeleteInstanceDir(boolean deleteInstanceDir){ |
| this.deleteInstanceDir = deleteInstanceDir; |
| } |
| |
| public boolean isDeleteDataDir() { |
| return deleteDataDir; |
| } |
| |
| public boolean isDeleteInstanceDir() { |
| return deleteInstanceDir; |
| } |
| |
| @Override |
| public SolrParams getParams() { |
| ModifiableSolrParams params = (ModifiableSolrParams) super.getParams(); |
| params.set(CoreAdminParams.DELETE_INDEX, deleteIndex); |
| params.set(CoreAdminParams.DELETE_DATA_DIR, deleteDataDir); |
| params.set(CoreAdminParams.DELETE_INSTANCE_DIR, deleteInstanceDir); |
| return params; |
| } |
| |
| } |
| |
| public static class CreateSnapshot extends CoreAdminRequest { |
| private String commitName; |
| |
| public CreateSnapshot(String commitName) { |
| super(); |
| this.action = CoreAdminAction.CREATESNAPSHOT; |
| if(commitName == null) { |
| throw new NullPointerException("Please specify non null value for commitName parameter."); |
| } |
| this.commitName = commitName; |
| } |
| |
| public String getCommitName() { |
| return commitName; |
| } |
| |
| @Override |
| public SolrParams getParams() { |
| ModifiableSolrParams params = new ModifiableSolrParams(super.getParams()); |
| params.set(CoreAdminParams.COMMIT_NAME, this.commitName); |
| return params; |
| } |
| } |
| |
| public static class DeleteSnapshot extends CoreAdminRequest { |
| private String commitName; |
| |
| public DeleteSnapshot(String commitName) { |
| super(); |
| this.action = CoreAdminAction.DELETESNAPSHOT; |
| |
| if(commitName == null) { |
| throw new NullPointerException("Please specify non null value for commitName parameter."); |
| } |
| this.commitName = commitName; |
| } |
| |
| public String getCommitName() { |
| return commitName; |
| } |
| |
| @Override |
| public SolrParams getParams() { |
| ModifiableSolrParams params = new ModifiableSolrParams(super.getParams()); |
| params.set(CoreAdminParams.COMMIT_NAME, this.commitName); |
| return params; |
| } |
| } |
| |
| public static class ListSnapshots extends CoreAdminRequest { |
| public ListSnapshots() { |
| super(); |
| this.action = CoreAdminAction.LISTSNAPSHOTS; |
| } |
| } |
| |
| |
| public CoreAdminRequest() |
| { |
| super( METHOD.GET, "/admin/cores" ); |
| } |
| |
| public CoreAdminRequest( String path ) |
| { |
| super( METHOD.GET, path ); |
| } |
| |
| public void setCoreName( String coreName ) |
| { |
| this.core = coreName; |
| } |
| |
| public final void setOtherCoreName( String otherCoreName ) |
| { |
| this.other = otherCoreName; |
| } |
| |
| public final void setIndexInfoNeeded(boolean isIndexInfoNeeded) { |
| this.isIndexInfoNeeded = isIndexInfoNeeded; |
| } |
| |
| //--------------------------------------------------------------------------------------- |
| // |
| //--------------------------------------------------------------------------------------- |
| |
| public void setAction( CoreAdminAction action ) |
| { |
| this.action = action; |
| } |
| |
| //--------------------------------------------------------------------------------------- |
| // |
| //--------------------------------------------------------------------------------------- |
| |
| @Override |
| public SolrParams getParams() |
| { |
| if( action == null ) { |
| throw new RuntimeException( "no action specified!" ); |
| } |
| ModifiableSolrParams params = new ModifiableSolrParams(); |
| params.set( CoreAdminParams.ACTION, action.toString() ); |
| params.set( CoreAdminParams.CORE, core ); |
| params.set(CoreAdminParams.INDEX_INFO, (isIndexInfoNeeded ? "true" : "false")); |
| if (other != null) { |
| params.set(CoreAdminParams.OTHER, other); |
| } |
| return params; |
| } |
| |
| //--------------------------------------------------------------------------------------- |
| // |
| //--------------------------------------------------------------------------------------- |
| |
| |
| @Override |
| protected CoreAdminResponse createResponse(SolrClient client) { |
| return new CoreAdminResponse(); |
| } |
| |
| //--------------------------------------------------------------------------------------- |
| // |
| //--------------------------------------------------------------------------------------- |
| |
| public static CoreAdminResponse reloadCore(String name, SolrClient client) throws SolrServerException, IOException |
| { |
| CoreAdminRequest req = new CoreAdminRequest(); |
| req.setCoreName(name); |
| req.setAction(CoreAdminAction.RELOAD); |
| return req.process(client); |
| } |
| |
| public static CoreAdminResponse unloadCore(String name, SolrClient client) throws SolrServerException, IOException |
| { |
| return unloadCore(name, false, client); |
| } |
| |
| public static CoreAdminResponse unloadCore(String name, boolean deleteIndex, SolrClient client) throws SolrServerException, IOException { |
| return unloadCore(name, deleteIndex, false, client); |
| } |
| |
| public static CoreAdminResponse unloadCore(String name, boolean deleteIndex, boolean deleteInstanceDir, SolrClient client) throws SolrServerException, IOException { |
| Unload req = new Unload(deleteIndex); |
| req.setCoreName(name); |
| req.setDeleteInstanceDir(deleteInstanceDir); |
| return req.process(client); |
| } |
| |
| /** |
| * Rename an existing core. |
| * |
| * @throws IllegalArgumentException if the new core name contains invalid characters. |
| */ |
| public static CoreAdminResponse renameCore(String coreName, String newName, SolrClient client ) |
| throws SolrServerException, IOException { |
| CoreAdminRequest req = new CoreAdminRequest(); |
| req.setCoreName(coreName); |
| req.setOtherCoreName(SolrIdentifierValidator.validateCoreName(newName)); |
| req.setAction( CoreAdminAction.RENAME ); |
| return req.process( client ); |
| } |
| |
| /** |
| * Swap two existing cores. |
| * @param core1 name of the first core |
| * @param core2 name of the other core |
| * @param client SolrClient to use |
| * @return response |
| * @throws SolrServerException if one or both cores don't exist |
| * @throws IOException on IO errors |
| */ |
| public static CoreAdminResponse swapCore(String core1, String core2, SolrClient client) |
| throws SolrServerException, IOException { |
| CoreAdminRequest req = new CoreAdminRequest(); |
| req.setCoreName(core1); |
| req.setOtherCoreName(core2); |
| req.setAction( CoreAdminAction.SWAP ); |
| return req.process( client ); |
| } |
| |
| public static CoreStatus getCoreStatus(String coreName, SolrClient client) throws SolrServerException, IOException { |
| return getCoreStatus(coreName, true, client); |
| } |
| |
| public static CoreStatus getCoreStatus(String coreName, boolean getIndexInfo, SolrClient client) |
| throws SolrServerException, IOException { |
| CoreAdminRequest req = new CoreAdminRequest(); |
| req.setAction(CoreAdminAction.STATUS); |
| req.setIndexInfoNeeded(getIndexInfo); |
| return new CoreStatus(req.process(client).getCoreStatus(coreName)); |
| } |
| |
| public static CoreAdminResponse getStatus( String name, SolrClient client ) throws SolrServerException, IOException |
| { |
| CoreAdminRequest req = new CoreAdminRequest(); |
| req.setCoreName( name ); |
| req.setAction( CoreAdminAction.STATUS ); |
| return req.process( client ); |
| } |
| |
| public static CoreAdminResponse createCore( String name, String instanceDir, SolrClient client ) throws SolrServerException, IOException |
| { |
| return CoreAdminRequest.createCore(name, instanceDir, client, null, null); |
| } |
| |
| public static CoreAdminResponse createCore( String name, String instanceDir, SolrClient client, String configFile, String schemaFile ) throws SolrServerException, IOException { |
| return createCore(name, instanceDir, client, configFile, schemaFile, null, null); |
| } |
| |
| public static CoreAdminResponse createCore( String name, String instanceDir, SolrClient client, String configFile, String schemaFile, String dataDir, String tlogDir ) throws SolrServerException, IOException |
| { |
| CoreAdminRequest.Create req = new CoreAdminRequest.Create(); |
| req.setCoreName( name ); |
| req.setInstanceDir(instanceDir); |
| if (dataDir != null) { |
| req.setDataDir(dataDir); |
| } |
| if (tlogDir != null) { |
| req.setUlogDir(tlogDir); |
| } |
| if(configFile != null){ |
| req.setConfigName(configFile); |
| } |
| if(schemaFile != null){ |
| req.setSchemaName(schemaFile); |
| } |
| return req.process( client ); |
| } |
| |
| public static CoreAdminResponse mergeIndexes(String name, |
| String[] indexDirs, String[] srcCores, SolrClient client) throws SolrServerException, |
| IOException { |
| CoreAdminRequest.MergeIndexes req = new CoreAdminRequest.MergeIndexes(); |
| req.setCoreName(name); |
| req.setIndexDirs(Arrays.asList(indexDirs)); |
| req.setSrcCores(Arrays.asList(srcCores)); |
| return req.process(client); |
| } |
| } |