package org.fastcatsearch.job.management;
import java.io.IOException;
import javax.xml.bind.JAXBException;
import org.fastcatsearch.common.io.Streamable;
import org.fastcatsearch.exception.FastcatSearchException;
import org.fastcatsearch.ir.IRService;
import org.fastcatsearch.ir.config.CollectionContext;
import org.fastcatsearch.ir.config.DataSourceConfig;
import org.fastcatsearch.ir.io.DataInput;
import org.fastcatsearch.ir.io.DataOutput;
import org.fastcatsearch.job.Job;
import org.fastcatsearch.service.ServiceManager;
import org.fastcatsearch.util.CollectionContextUtil;
import org.fastcatsearch.util.FilePaths;
import org.fastcatsearch.util.JAXBConfigs;
/**
* 각 노드에 데이터소스설정을 전송 및 반영한다.
* */
public class UpdateDataSourceConfigJob extends Job implements Streamable {
private static final long serialVersionUID = -7927522045710504365L;
private String collectionId;
private DataSourceConfig dataSourceConfig;
public UpdateDataSourceConfigJob(){
}
public UpdateDataSourceConfigJob(String collectionId, DataSourceConfig dataSourceConfig){
this.collectionId = collectionId;
this.dataSourceConfig = dataSourceConfig;
}
@Override
public void readFrom(DataInput input) throws IOException {
try {
this.collectionId = input.readString();
this.dataSourceConfig = JAXBConfigs.readFrom(input, DataSourceConfig.class);
} catch (JAXBException e) {
throw new IOException(e);
}
}
@Override
public void writeTo(DataOutput output) throws IOException {
try {
output.writeString(collectionId);
JAXBConfigs.writeTo(output, this.dataSourceConfig, DataSourceConfig.class);
} catch (JAXBException e) {
throw new IOException(e);
}
}
@Override
public JobResult doRun() throws FastcatSearchException {
FilePaths collectionFilePaths = environment.filePaths().collectionFilePaths(this.collectionId);
boolean isSuccess = CollectionContextUtil.writeConfigFile(this.dataSourceConfig, collectionFilePaths);
if(isSuccess) {
IRService irService = ServiceManager.getInstance().getService(IRService.class);
CollectionContext collectionContext = irService.collectionContext(collectionId);
if(collectionContext != null) {
collectionContext.setDataSourceConfig(dataSourceConfig);
}else{
isSuccess = false;
}
}
return new JobResult(isSuccess);
}
}