Skip to content

Commit 632831b

Browse files
committed
Change
1 parent afd766d commit 632831b

File tree

2 files changed

+27
-17
lines changed

2 files changed

+27
-17
lines changed

server/src/main/java/org/elasticsearch/ingest/ESONFlat.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,7 @@
1010
package org.elasticsearch.ingest;
1111

1212
import org.apache.lucene.util.BytesRef;
13-
import org.elasticsearch.common.bytes.BytesArray;
1413
import org.elasticsearch.common.bytes.BytesReference;
15-
import org.elasticsearch.common.io.stream.BytesStreamOutput;
1614
import org.elasticsearch.common.io.stream.RecyclerBytesStreamOutput;
1715
import org.elasticsearch.common.io.stream.StreamInput;
1816
import org.elasticsearch.common.io.stream.StreamOutput;
@@ -73,7 +71,6 @@ public BytesReference getSerializedKeyBytes() {
7371
// String key = entry.key();
7472
// estimate += key == null ? 0 : key.length() + 5;
7573
// }
76-
// try (BytesStreamOutput streamOutput = new BytesStreamOutput()) {
7774
try (RecyclerBytesStreamOutput streamOutput = new RecyclerBytesStreamOutput(getBytesRefRecycler())) {
7875
streamOutput.writeVInt(keys.size());
7976
for (ESONEntry entry : keys) {
@@ -102,7 +99,7 @@ public BytesReference getSerializedKeyBytes() {
10299

103100
private static final ThreadLocal<BytesRef> BYTES_REF = ThreadLocal.withInitial(() -> new BytesRef(new byte[16384]));
104101

105-
private static Recycler<BytesRef> getBytesRefRecycler() {
102+
public static Recycler<BytesRef> getBytesRefRecycler() {
106103
return new Recycler<>() {
107104

108105
private boolean first = true;

server/src/main/java/org/elasticsearch/ingest/ESONSource.java

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,15 @@
1010
package org.elasticsearch.ingest;
1111

1212
import org.apache.lucene.util.BytesRef;
13+
import org.elasticsearch.common.bytes.BytesArray;
1314
import org.elasticsearch.common.bytes.BytesReference;
14-
import org.elasticsearch.common.io.stream.BytesStreamOutput;
15+
import org.elasticsearch.common.io.stream.RecyclerBytesStreamOutput;
1516
import org.elasticsearch.common.recycler.Recycler;
16-
import org.elasticsearch.transport.BytesRefRecycler;
1717
import org.elasticsearch.xcontent.XContentBuilder;
1818
import org.elasticsearch.xcontent.XContentParser;
1919
import org.elasticsearch.xcontent.XContentString;
2020

21+
import java.io.ByteArrayOutputStream;
2122
import java.io.IOException;
2223
import java.math.BigDecimal;
2324
import java.math.BigInteger;
@@ -28,19 +29,19 @@
2829
public class ESONSource {
2930

3031
public static class Builder {
31-
private final BytesStreamOutput bytes;
32+
private final Recycler<BytesRef> refRecycler;
3233
private final List<ESONEntry> keyArray;
3334

3435
public Builder() {
3536
this(0);
3637
}
3738

3839
public Builder(int expectedSize) {
39-
this(BytesRefRecycler.NON_RECYCLING_INSTANCE, expectedSize);
40+
this(ESONFlat.getBytesRefRecycler(), expectedSize);
4041
}
4142

4243
public Builder(Recycler<BytesRef> refRecycler, int expectedSize) {
43-
this.bytes = new BytesStreamOutput(expectedSize);
44+
this.refRecycler = refRecycler;
4445
this.keyArray = new ArrayList<>();
4546
}
4647

@@ -50,13 +51,21 @@ public ESONIndexed.ESONObject parse(XContentParser parser) throws IOException {
5051
throw new IllegalArgumentException("Expected START_OBJECT but got " + token);
5152
}
5253

53-
parseObject(parser, bytes, keyArray, null);
54+
try (RecyclerBytesStreamOutput bytes = new RecyclerBytesStreamOutput(refRecycler)) {
55+
parseObject(parser, bytes, keyArray, null);
56+
ByteArrayOutputStream bao = new ByteArrayOutputStream(bytes.size());
57+
bytes.bytes().writeTo(bao);
58+
return new ESONIndexed.ESONObject(0, new ESONFlat(keyArray, new Values(new BytesArray(bao.toByteArray()))));
59+
}
5460

55-
return new ESONIndexed.ESONObject(0, new ESONFlat(keyArray, new Values(bytes.bytes())));
5661
}
5762

58-
private static void parseObject(XContentParser parser, BytesStreamOutput bytes, List<ESONEntry> keyArray, String objectFieldName)
59-
throws IOException {
63+
private static void parseObject(
64+
XContentParser parser,
65+
RecyclerBytesStreamOutput bytes,
66+
List<ESONEntry> keyArray,
67+
String objectFieldName
68+
) throws IOException {
6069
ESONEntry.ObjectEntry objEntry = new ESONEntry.ObjectEntry(objectFieldName);
6170
keyArray.add(objEntry);
6271

@@ -70,8 +79,12 @@ private static void parseObject(XContentParser parser, BytesStreamOutput bytes,
7079
objEntry.offsetOrCount(count);
7180
}
7281

73-
private static void parseArray(XContentParser parser, BytesStreamOutput bytes, List<ESONEntry> keyArray, String arrayFieldName)
74-
throws IOException {
82+
private static void parseArray(
83+
XContentParser parser,
84+
RecyclerBytesStreamOutput bytes,
85+
List<ESONEntry> keyArray,
86+
String arrayFieldName
87+
) throws IOException {
7588
ESONEntry.ArrayEntry arrEntry = new ESONEntry.ArrayEntry(arrayFieldName);
7689
keyArray.add(arrEntry);
7790

@@ -92,7 +105,7 @@ private static void parseArray(XContentParser parser, BytesStreamOutput bytes, L
92105
arrEntry.offsetOrCount(count);
93106
}
94107

95-
private static void parseValue(XContentParser parser, String fieldName, BytesStreamOutput bytes, List<ESONEntry> keyArray)
108+
private static void parseValue(XContentParser parser, String fieldName, RecyclerBytesStreamOutput bytes, List<ESONEntry> keyArray)
96109
throws IOException {
97110
XContentParser.Token token = parser.nextToken();
98111

@@ -106,7 +119,7 @@ private static void parseValue(XContentParser parser, String fieldName, BytesStr
106119
}
107120
}
108121

109-
private static Value parseSimpleValue(XContentParser parser, BytesStreamOutput bytes, XContentParser.Token token)
122+
private static Value parseSimpleValue(XContentParser parser, RecyclerBytesStreamOutput bytes, XContentParser.Token token)
110123
throws IOException {
111124
long position = bytes.position();
112125

0 commit comments

Comments
 (0)