Releasable XContentBuilder
make the builder releasable (auto closeable), and use it in shards state also make XContentParser releasable (AutoCloseable) and not closeable since it doesn't throw an IOException closes #6869
This commit is contained in:
parent
9345194a65
commit
323210729e
|
@ -25,7 +25,6 @@ import com.google.common.base.Charsets;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
import org.apache.lucene.util.CollectionUtil;
|
import org.apache.lucene.util.CollectionUtil;
|
||||||
import org.apache.lucene.util.IOUtils;
|
|
||||||
import org.elasticsearch.ElasticsearchException;
|
import org.elasticsearch.ElasticsearchException;
|
||||||
import org.elasticsearch.Version;
|
import org.elasticsearch.Version;
|
||||||
import org.elasticsearch.action.ActionListener;
|
import org.elasticsearch.action.ActionListener;
|
||||||
|
@ -48,6 +47,7 @@ import org.elasticsearch.common.component.AbstractComponent;
|
||||||
import org.elasticsearch.common.compress.CompressedString;
|
import org.elasticsearch.common.compress.CompressedString;
|
||||||
import org.elasticsearch.common.inject.Inject;
|
import org.elasticsearch.common.inject.Inject;
|
||||||
import org.elasticsearch.common.io.Streams;
|
import org.elasticsearch.common.io.Streams;
|
||||||
|
import org.elasticsearch.common.lease.Releasables;
|
||||||
import org.elasticsearch.common.regex.Regex;
|
import org.elasticsearch.common.regex.Regex;
|
||||||
import org.elasticsearch.common.settings.ImmutableSettings;
|
import org.elasticsearch.common.settings.ImmutableSettings;
|
||||||
import org.elasticsearch.common.settings.Settings;
|
import org.elasticsearch.common.settings.Settings;
|
||||||
|
@ -491,7 +491,7 @@ public class MetaDataCreateIndexService extends AbstractComponent {
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.warn("[{}] failed to read template [{}] from config", e, request.index(), templatesFile.getAbsolutePath());
|
logger.warn("[{}] failed to read template [{}] from config", e, request.index(), templatesFile.getAbsolutePath());
|
||||||
} finally {
|
} finally {
|
||||||
IOUtils.closeWhileHandlingException(parser);
|
Releasables.closeWhileHandlingException(parser);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,7 @@ import org.elasticsearch.common.bytes.BytesReference;
|
||||||
import org.elasticsearch.common.geo.GeoPoint;
|
import org.elasticsearch.common.geo.GeoPoint;
|
||||||
import org.elasticsearch.common.io.BytesStream;
|
import org.elasticsearch.common.io.BytesStream;
|
||||||
import org.elasticsearch.common.io.stream.BytesStreamOutput;
|
import org.elasticsearch.common.io.stream.BytesStreamOutput;
|
||||||
|
import org.elasticsearch.common.lease.Releasable;
|
||||||
import org.elasticsearch.common.text.Text;
|
import org.elasticsearch.common.text.Text;
|
||||||
import org.elasticsearch.common.unit.ByteSizeValue;
|
import org.elasticsearch.common.unit.ByteSizeValue;
|
||||||
import org.elasticsearch.common.unit.TimeValue;
|
import org.elasticsearch.common.unit.TimeValue;
|
||||||
|
@ -47,7 +48,7 @@ import java.util.Map;
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public final class XContentBuilder implements BytesStream {
|
public final class XContentBuilder implements BytesStream, Releasable {
|
||||||
|
|
||||||
public static enum FieldCaseConversion {
|
public static enum FieldCaseConversion {
|
||||||
/**
|
/**
|
||||||
|
@ -1094,8 +1095,6 @@ public final class XContentBuilder implements BytesStream {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a string representation of the builder (only applicable for text based xcontent).
|
* Returns a string representation of the builder (only applicable for text based xcontent).
|
||||||
* <p/>
|
|
||||||
* <p>Only applicable when the builder is constructed with {@link FastByteArrayOutputStream}.
|
|
||||||
*/
|
*/
|
||||||
public String string() throws IOException {
|
public String string() throws IOException {
|
||||||
close();
|
close();
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
package org.elasticsearch.common.xcontent;
|
package org.elasticsearch.common.xcontent;
|
||||||
|
|
||||||
import org.apache.lucene.util.BytesRef;
|
import org.apache.lucene.util.BytesRef;
|
||||||
|
import org.elasticsearch.common.lease.Releasable;
|
||||||
|
|
||||||
import java.io.Closeable;
|
import java.io.Closeable;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -35,7 +36,7 @@ import java.util.Map;
|
||||||
* XContentParser parser = xContentType.xContent().createParser("{\"key\" : \"value\"}");
|
* XContentParser parser = xContentType.xContent().createParser("{\"key\" : \"value\"}");
|
||||||
* </pre>
|
* </pre>
|
||||||
*/
|
*/
|
||||||
public interface XContentParser extends Closeable {
|
public interface XContentParser extends Releasable {
|
||||||
|
|
||||||
enum Token {
|
enum Token {
|
||||||
START_OBJECT {
|
START_OBJECT {
|
||||||
|
@ -196,6 +197,4 @@ public interface XContentParser extends Closeable {
|
||||||
boolean booleanValue() throws IOException;
|
boolean booleanValue() throws IOException;
|
||||||
|
|
||||||
byte[] binaryValue() throws IOException;
|
byte[] binaryValue() throws IOException;
|
||||||
|
|
||||||
void close();
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -267,7 +267,8 @@ public class LocalGatewayShardsState extends AbstractComponent implements Cluste
|
||||||
|
|
||||||
private void writeShardState(String reason, ShardId shardId, ShardStateInfo shardStateInfo, @Nullable ShardStateInfo previousStateInfo) throws Exception {
|
private void writeShardState(String reason, ShardId shardId, ShardStateInfo shardStateInfo, @Nullable ShardStateInfo previousStateInfo) throws Exception {
|
||||||
logger.trace("[{}][{}] writing shard state, reason [{}]", shardId.index().name(), shardId.id(), reason);
|
logger.trace("[{}][{}] writing shard state, reason [{}]", shardId.index().name(), shardId.id(), reason);
|
||||||
XContentBuilder builder = XContentFactory.contentBuilder(XContentType.JSON, new BytesStreamOutput());
|
BytesReference shardState;
|
||||||
|
try (XContentBuilder builder = XContentFactory.contentBuilder(XContentType.JSON, new BytesStreamOutput())) {
|
||||||
builder.prettyPrint();
|
builder.prettyPrint();
|
||||||
builder.startObject();
|
builder.startObject();
|
||||||
builder.field("version", shardStateInfo.version);
|
builder.field("version", shardStateInfo.version);
|
||||||
|
@ -275,7 +276,8 @@ public class LocalGatewayShardsState extends AbstractComponent implements Cluste
|
||||||
builder.field("primary", shardStateInfo.primary);
|
builder.field("primary", shardStateInfo.primary);
|
||||||
}
|
}
|
||||||
builder.endObject();
|
builder.endObject();
|
||||||
builder.flush();
|
shardState = builder.bytes();
|
||||||
|
}
|
||||||
|
|
||||||
Exception lastFailure = null;
|
Exception lastFailure = null;
|
||||||
boolean wroteAtLeastOnce = false;
|
boolean wroteAtLeastOnce = false;
|
||||||
|
@ -288,8 +290,7 @@ public class LocalGatewayShardsState extends AbstractComponent implements Cluste
|
||||||
FileOutputStream fos = null;
|
FileOutputStream fos = null;
|
||||||
try {
|
try {
|
||||||
fos = new FileOutputStream(stateFile);
|
fos = new FileOutputStream(stateFile);
|
||||||
BytesReference bytes = builder.bytes();
|
shardState.writeTo(fos);
|
||||||
bytes.writeTo(fos);
|
|
||||||
fos.getChannel().force(true);
|
fos.getChannel().force(true);
|
||||||
fos.close();
|
fos.close();
|
||||||
wroteAtLeastOnce = true;
|
wroteAtLeastOnce = true;
|
||||||
|
|
|
@ -26,7 +26,6 @@ import com.google.common.collect.ImmutableMap;
|
||||||
import org.apache.lucene.index.AtomicReaderContext;
|
import org.apache.lucene.index.AtomicReaderContext;
|
||||||
import org.apache.lucene.index.NumericDocValues;
|
import org.apache.lucene.index.NumericDocValues;
|
||||||
import org.apache.lucene.search.TopDocs;
|
import org.apache.lucene.search.TopDocs;
|
||||||
import org.apache.lucene.util.IOUtils;
|
|
||||||
import org.elasticsearch.ElasticsearchException;
|
import org.elasticsearch.ElasticsearchException;
|
||||||
import org.elasticsearch.ElasticsearchParseException;
|
import org.elasticsearch.ElasticsearchParseException;
|
||||||
import org.elasticsearch.ExceptionsHelper;
|
import org.elasticsearch.ExceptionsHelper;
|
||||||
|
@ -39,6 +38,7 @@ import org.elasticsearch.common.Nullable;
|
||||||
import org.elasticsearch.common.bytes.BytesReference;
|
import org.elasticsearch.common.bytes.BytesReference;
|
||||||
import org.elasticsearch.common.component.AbstractLifecycleComponent;
|
import org.elasticsearch.common.component.AbstractLifecycleComponent;
|
||||||
import org.elasticsearch.common.inject.Inject;
|
import org.elasticsearch.common.inject.Inject;
|
||||||
|
import org.elasticsearch.common.lease.Releasables;
|
||||||
import org.elasticsearch.common.settings.Settings;
|
import org.elasticsearch.common.settings.Settings;
|
||||||
import org.elasticsearch.common.unit.TimeValue;
|
import org.elasticsearch.common.unit.TimeValue;
|
||||||
import org.elasticsearch.common.util.BigArrays;
|
import org.elasticsearch.common.util.BigArrays;
|
||||||
|
@ -611,7 +611,7 @@ public class SearchService extends AbstractLifecycleComponent<SearchService> {
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new ElasticsearchParseException("Failed to parse template", e);
|
throw new ElasticsearchParseException("Failed to parse template", e);
|
||||||
} finally {
|
} finally {
|
||||||
IOUtils.closeWhileHandlingException(parser);
|
Releasables.closeWhileHandlingException(parser);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (templateContext == null || !hasLength(templateContext.template())) {
|
if (templateContext == null || !hasLength(templateContext.template())) {
|
||||||
|
|
Loading…
Reference in New Issue