Skip to content

Commit 6085d0f

Browse files
committed
Change
1 parent bb153a9 commit 6085d0f

File tree

2 files changed

+32
-5
lines changed

2 files changed

+32
-5
lines changed

server/src/main/java/org/elasticsearch/action/index/ModernSource.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,7 @@ public int originalSourceSize() {
9191
}
9292

9393
public BytesReference originalSourceBytes() {
94-
if (originalSource == null) {
95-
assert structuredSource != null;
94+
if (originalSource == null && structuredSource != null) {
9695
try (XContentBuilder builder = XContentFactory.contentBuilder(contentType)) {
9796
ESONXContentSerializer.flattenToXContent(structuredSource, builder, ToXContent.EMPTY_PARAMS);
9897
originalSource = BytesReference.bytes(builder);

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

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,12 @@
99

1010
package org.elasticsearch.ingest;
1111

12+
import org.apache.lucene.util.BytesRef;
1213
import org.elasticsearch.common.bytes.BytesReference;
13-
import org.elasticsearch.common.io.stream.BytesStreamOutput;
14+
import org.elasticsearch.common.io.stream.RecyclerBytesStreamOutput;
1415
import org.elasticsearch.common.io.stream.StreamInput;
1516
import org.elasticsearch.common.io.stream.StreamOutput;
17+
import org.elasticsearch.common.recycler.Recycler;
1618

1719
import java.io.IOException;
1820
import java.io.UncheckedIOException;
@@ -64,12 +66,38 @@ private static List<ESONEntry> readKeys(StreamInput in) throws IOException {
6466
public BytesReference getSerializedKeyBytes() {
6567
if (serializedKeyBytes.get() == null) {
6668
// TODO: Better estimate
67-
int estimate = (int) (values.data().length() * 0.7);
6869
// for (ESONEntry entry : keys) {
6970
// String key = entry.key();
7071
// estimate += key == null ? 0 : key.length() + 5;
7172
// }
72-
try (BytesStreamOutput streamOutput = new BytesStreamOutput(estimate)) {
73+
try (RecyclerBytesStreamOutput streamOutput = new RecyclerBytesStreamOutput(new Recycler<>() {
74+
75+
// TODO: Better estimate
76+
final int estimate = Math.max((int) (values.data().length() * 0.7), 512);
77+
78+
@Override
79+
public V<BytesRef> obtain() {
80+
return new V<>() {
81+
@Override
82+
public BytesRef v() {
83+
return new BytesRef(new byte[estimate]);
84+
}
85+
86+
@Override
87+
public boolean isRecycled() {
88+
return false;
89+
}
90+
91+
@Override
92+
public void close() {}
93+
};
94+
}
95+
96+
@Override
97+
public int pageSize() {
98+
return estimate;
99+
}
100+
})) {
73101
streamOutput.writeVInt(keys.size());
74102
for (ESONEntry entry : keys) {
75103
String key = entry.key();

0 commit comments

Comments
 (0)