package org.fastcatsearch.job.management; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.fastcatsearch.common.io.Streamable; import org.fastcatsearch.exception.FastcatSearchException; import org.fastcatsearch.ir.IRService; import org.fastcatsearch.ir.config.CollectionConfig; import org.fastcatsearch.ir.config.DataPlanConfig; import org.fastcatsearch.ir.io.DataInput; import org.fastcatsearch.ir.io.DataOutput; import org.fastcatsearch.ir.search.CollectionHandler; import org.fastcatsearch.job.Job; import org.fastcatsearch.service.ServiceManager; import org.fastcatsearch.util.CollectionContextUtil; import org.fastcatsearch.util.FilePaths; /* * 컬렉션 생성 job * */ public class CreateCollectionJob extends Job implements Streamable { private static final long serialVersionUID = 3159374972331262216L; private String collectionId; private String collectionName; private String indexNode; private String searchNodeListString; private String dataNodeListString; public CreateCollectionJob() {} public CreateCollectionJob(String collectionId, String collectionName, String indexNode, String searchNodeListString, String dataNodeListString) { this.collectionId = collectionId; this.collectionName = collectionName; this.indexNode = indexNode; this.searchNodeListString = searchNodeListString; this.dataNodeListString = dataNodeListString; } @Override public void readFrom(DataInput input) throws IOException { collectionId = input.readString(); collectionName = input.readString(); indexNode = input.readString(); searchNodeListString = input.readString(); dataNodeListString = input.readString(); } @Override public void writeTo(DataOutput output) throws IOException { output.writeString(collectionId); output.writeString(collectionName); output.writeString(indexNode); output.writeString(searchNodeListString); output.writeString(dataNodeListString); } @Override public JobResult doRun() throws FastcatSearchException { List<String> searchNodeList = new ArrayList<String>(); if (searchNodeListString != null) { for (String nodeStr : searchNodeListString.split(",")) { nodeStr = nodeStr.trim(); if (nodeStr.length() > 0) { searchNodeList.add(nodeStr); } } } List<String> dataNodeList = new ArrayList<String>(); if (dataNodeListString != null) { for (String nodeStr : dataNodeListString.split(",")) { nodeStr = nodeStr.trim(); if (nodeStr.length() > 0) { dataNodeList.add(nodeStr); } } } try { boolean isSuccess = false; IRService irService = ServiceManager.getInstance().getService(IRService.class); CollectionHandler collectionHandler = irService.collectionHandler(collectionId); if(collectionHandler == null) { CollectionConfig collectionConfig = new CollectionConfig(collectionName, indexNode, searchNodeList, dataNodeList, DataPlanConfig.DefaultDataPlanConfig); collectionHandler = irService.createCollection(collectionId, collectionConfig); isSuccess = (collectionHandler != null); }else{ CollectionConfig collectionConfig = collectionHandler.collectionContext().collectionConfig(); collectionConfig.setName(collectionName); collectionConfig.setIndexNode(indexNode); collectionConfig.setSearchNodeList(searchNodeList); collectionConfig.setDataNodeList(dataNodeList); FilePaths collectionFilePaths = collectionHandler.collectionContext().collectionFilePaths(); isSuccess = CollectionContextUtil.writeConfigFile(collectionConfig, collectionFilePaths); } return new JobResult(isSuccess); } catch (Exception e) { throw new FastcatSearchException(e); } } }