mirror of https://github.com/apache/lucene.git
SOLR-4234: Add support for binary files in ZooKeeper.
git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1481675 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
1cd6be0712
commit
ce5f508ff5
|
@ -80,6 +80,8 @@ New Features
|
|||
|
||||
* SOLR-4785: New MaxScoreQParserPlugin returning max() instead of sum() of terms (janhoy)
|
||||
|
||||
* SOLR-4234: Add support for binary files in ZooKeeper. (Eric Pugh via Mark Miller)
|
||||
|
||||
Bug Fixes
|
||||
----------------------
|
||||
|
||||
|
|
|
@ -1251,7 +1251,7 @@ public final class ZkController {
|
|||
byte[] data = zkClient.getData(zkPath + "/" + file, null, null, true);
|
||||
dir.mkdirs();
|
||||
log.info("Write file " + new File(dir, file));
|
||||
FileUtils.writeStringToFile(new File(dir, file), new String(data, "UTF-8"), "UTF-8");
|
||||
FileUtils.writeByteArrayToFile(new File(dir, file), data);
|
||||
} else {
|
||||
downloadFromZK(zkClient, zkPath + "/" + file, new File(dir, file));
|
||||
}
|
||||
|
|
|
@ -191,9 +191,7 @@ public class ShowFileRequestHandler extends RequestHandlerBase
|
|||
ModifiableSolrParams params = new ModifiableSolrParams(req.getParams());
|
||||
params.set(CommonParams.WT, "raw");
|
||||
req.setParams(params);
|
||||
|
||||
ContentStreamBase content = new ContentStreamBase.StringStream(
|
||||
new String(zkClient.getData(adminFile, null, null, true), "UTF-8"));
|
||||
ContentStreamBase content = new ContentStreamBase.ByteArrayStream(zkClient.getData(adminFile, null, null, true), adminFile);
|
||||
content.setContentType(req.getParams().get(USE_CONTENT_TYPE));
|
||||
|
||||
rsp.add(RawResponseWriter.CONTENT, content);
|
||||
|
|
|
@ -18,6 +18,7 @@ package org.apache.solr.cloud;
|
|||
*/
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.commons.io.FileUtils;
|
||||
|
@ -186,6 +187,22 @@ public class ZkCLITest extends SolrTestCaseJ4 {
|
|||
List<String> zkFiles = zkClient.getChildren(ZkController.CONFIGS_ZKNODE + "/" + confsetname, null, true);
|
||||
assertEquals(files.length, zkFiles.size());
|
||||
|
||||
File sourceConfDir = new File(ExternalPaths.EXAMPLE_HOME + File.separator + "collection1"
|
||||
+ File.separator + "conf");
|
||||
Collection<File> sourceFiles = FileUtils.listFiles(sourceConfDir,null,true);
|
||||
for (File sourceFile :sourceFiles){
|
||||
if (!sourceFile.isHidden()){
|
||||
int indexOfRelativePath = sourceFile.getAbsolutePath().lastIndexOf("collection1/conf");
|
||||
String relativePathofFile = sourceFile.getAbsolutePath().substring(indexOfRelativePath + 17, sourceFile.getAbsolutePath().length());
|
||||
File downloadedFile = new File(confDir,relativePathofFile);
|
||||
assertTrue("Make sure we did download each file in the original configuration",downloadedFile.exists());
|
||||
assertTrue("Content didn't change",FileUtils.contentEquals(sourceFile,downloadedFile));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
// test reset zk
|
||||
args = new String[] {"-zkhost", zkServer.getZkAddress(), "-cmd",
|
||||
"clear", "/"};
|
||||
|
|
|
@ -311,13 +311,13 @@ public class SolrZkClient {
|
|||
|
||||
public void makePath(String path, File file, boolean failOnExists, boolean retryOnConnLoss)
|
||||
throws IOException, KeeperException, InterruptedException {
|
||||
makePath(path, FileUtils.readFileToString(file).getBytes("UTF-8"),
|
||||
makePath(path, FileUtils.readFileToByteArray(file),
|
||||
CreateMode.PERSISTENT, null, failOnExists, retryOnConnLoss);
|
||||
}
|
||||
|
||||
public void makePath(String path, File file, boolean retryOnConnLoss) throws IOException,
|
||||
KeeperException, InterruptedException {
|
||||
makePath(path, FileUtils.readFileToString(file).getBytes("UTF-8"), retryOnConnLoss);
|
||||
makePath(path, FileUtils.readFileToByteArray(file), retryOnConnLoss);
|
||||
}
|
||||
|
||||
public void makePath(String path, CreateMode createMode, boolean retryOnConnLoss) throws KeeperException,
|
||||
|
|
|
@ -233,4 +233,27 @@ public abstract class ContentStreamBase implements ContentStream
|
|||
public void setSourceInfo(String sourceInfo) {
|
||||
this.sourceInfo = sourceInfo;
|
||||
}
|
||||
|
||||
/**
|
||||
* Construct a <code>ContentStream</code> from a <code>File</code>
|
||||
*/
|
||||
public static class ByteArrayStream extends ContentStreamBase
|
||||
{
|
||||
private final byte[] bytes;
|
||||
|
||||
public ByteArrayStream( byte[] bytes, String source ) {
|
||||
this.bytes = bytes;
|
||||
|
||||
this.contentType = null;
|
||||
name = source;
|
||||
size = new Long(bytes.length);
|
||||
sourceInfo = source;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public InputStream getStream() throws IOException {
|
||||
return new ByteArrayInputStream( bytes );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue