Skip to content

Commit 31a569a

Browse files
authored
Remove uid from translog delete operation (#59101)
We stopped persisting the doctype in translog since #47229. We should also stop storing the uid as we can construct it from the single mapping doctype and the id. Relates #47229
1 parent ec6f79f commit 31a569a

File tree

7 files changed

+45
-59
lines changed

7 files changed

+45
-59
lines changed

server/src/main/java/org/elasticsearch/index/engine/LuceneChangesSnapshot.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import org.apache.lucene.index.LeafReader;
2424
import org.apache.lucene.index.LeafReaderContext;
2525
import org.apache.lucene.index.NumericDocValues;
26-
import org.apache.lucene.index.Term;
2726
import org.apache.lucene.search.BooleanClause;
2827
import org.apache.lucene.search.BooleanQuery;
2928
import org.apache.lucene.search.IndexSearcher;
@@ -38,11 +37,9 @@
3837
import org.elasticsearch.common.lucene.search.Queries;
3938
import org.elasticsearch.core.internal.io.IOUtils;
4039
import org.elasticsearch.index.fieldvisitor.FieldsVisitor;
41-
import org.elasticsearch.index.mapper.IdFieldMapper;
4240
import org.elasticsearch.index.mapper.MapperService;
4341
import org.elasticsearch.index.mapper.SeqNoFieldMapper;
4442
import org.elasticsearch.index.mapper.SourceFieldMapper;
45-
import org.elasticsearch.index.mapper.Uid;
4643
import org.elasticsearch.index.translog.Translog;
4744

4845
import java.io.Closeable;
@@ -247,9 +244,8 @@ private Translog.Operation readDocAsOp(int docIndex) throws IOException {
247244
assert assertDocSoftDeleted(leaf.reader(), segmentDocID) : "Noop but soft_deletes field is not set [" + op + "]";
248245
} else {
249246
final String id = fields.id();
250-
final Term uid = new Term(IdFieldMapper.NAME, Uid.encodeId(id));
251247
if (isTombstone) {
252-
op = new Translog.Delete(id, uid, seqNo, primaryTerm, version);
248+
op = new Translog.Delete(id, seqNo, primaryTerm, version);
253249
assert assertDocSoftDeleted(leaf.reader(), segmentDocID) : "Delete op but soft_deletes field is not set [" + op + "]";
254250
} else {
255251
final BytesReference source = fields.source();

server/src/main/java/org/elasticsearch/index/shard/IndexShard.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -884,16 +884,14 @@ private Engine.DeleteResult applyDeleteOperation(Engine engine, long seqNo, long
884884
assert opPrimaryTerm <= getOperationPrimaryTerm()
885885
: "op term [ " + opPrimaryTerm + " ] > shard term [" + getOperationPrimaryTerm() + "]";
886886
ensureWriteAllowed(origin);
887-
final Term uid = new Term(IdFieldMapper.NAME, Uid.encodeId(id));
888-
final Engine.Delete delete = prepareDelete(id, uid, seqNo, opPrimaryTerm, version,
889-
versionType, origin, ifSeqNo, ifPrimaryTerm);
887+
final Engine.Delete delete = prepareDelete(id, seqNo, opPrimaryTerm, version, versionType, origin, ifSeqNo, ifPrimaryTerm);
890888
return delete(engine, delete);
891889
}
892890

893-
private Engine.Delete prepareDelete(String id, Term uid, long seqNo, long primaryTerm, long version,
894-
VersionType versionType, Engine.Operation.Origin origin,
895-
long ifSeqNo, long ifPrimaryTerm) {
891+
public static Engine.Delete prepareDelete(String id, long seqNo, long primaryTerm, long version, VersionType versionType,
892+
Engine.Operation.Origin origin, long ifSeqNo, long ifPrimaryTerm) {
896893
long startTime = System.nanoTime();
894+
final Term uid = new Term(IdFieldMapper.NAME, Uid.encodeId(id));
897895
return new Engine.Delete(id, uid, seqNo, primaryTerm, version, versionType,
898896
origin, startTime, ifSeqNo, ifPrimaryTerm);
899897
}

server/src/main/java/org/elasticsearch/index/translog/Translog.java

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
package org.elasticsearch.index.translog;
2121

2222
import org.apache.logging.log4j.message.ParameterizedMessage;
23-
import org.apache.lucene.index.Term;
2423
import org.apache.lucene.store.AlreadyClosedException;
2524
import org.elasticsearch.Version;
2625
import org.elasticsearch.common.Nullable;
@@ -41,7 +40,9 @@
4140
import org.elasticsearch.index.IndexSettings;
4241
import org.elasticsearch.index.VersionType;
4342
import org.elasticsearch.index.engine.Engine;
43+
import org.elasticsearch.index.mapper.IdFieldMapper;
4444
import org.elasticsearch.index.mapper.MapperService;
45+
import org.elasticsearch.index.mapper.Uid;
4546
import org.elasticsearch.index.seqno.SequenceNumbers;
4647
import org.elasticsearch.index.shard.AbstractIndexShardComponent;
4748
import org.elasticsearch.index.shard.IndexShardComponent;
@@ -1279,7 +1280,6 @@ public static class Delete implements Operation {
12791280
public static final int SERIALIZATION_FORMAT = FORMAT_NO_DOC_TYPE;
12801281

12811282
private final String id;
1282-
private final Term uid;
12831283
private final long seqNo;
12841284
private final long primaryTerm;
12851285
private final long version;
@@ -1292,7 +1292,11 @@ private Delete(final StreamInput in) throws IOException {
12921292
// Can't assert that this is _doc because pre-8.0 indexes can have any name for a type
12931293
}
12941294
id = in.readString();
1295-
uid = new Term(in.readString(), in.readBytesRef());
1295+
if (format < FORMAT_NO_DOC_TYPE) {
1296+
final String docType = in.readString();
1297+
assert docType.equals(IdFieldMapper.NAME) : docType + " != " + IdFieldMapper.NAME;
1298+
in.readBytesRef(); // uid
1299+
}
12961300
this.version = in.readLong();
12971301
if (format < FORMAT_NO_VERSION_TYPE) {
12981302
in.readByte(); // versionType
@@ -1302,17 +1306,16 @@ private Delete(final StreamInput in) throws IOException {
13021306
}
13031307

13041308
public Delete(Engine.Delete delete, Engine.DeleteResult deleteResult) {
1305-
this(delete.id(), delete.uid(), deleteResult.getSeqNo(), delete.primaryTerm(), deleteResult.getVersion());
1309+
this(delete.id(), deleteResult.getSeqNo(), delete.primaryTerm(), deleteResult.getVersion());
13061310
}
13071311

13081312
/** utility for testing */
1309-
public Delete(String id, long seqNo, long primaryTerm, Term uid) {
1310-
this(id, uid, seqNo, primaryTerm, Versions.MATCH_ANY);
1313+
public Delete(String id, long seqNo, long primaryTerm) {
1314+
this(id, seqNo, primaryTerm, Versions.MATCH_ANY);
13111315
}
13121316

1313-
public Delete(String id, Term uid, long seqNo, long primaryTerm, long version) {
1317+
public Delete(String id, long seqNo, long primaryTerm, long version) {
13141318
this.id = Objects.requireNonNull(id);
1315-
this.uid = uid;
13161319
this.seqNo = seqNo;
13171320
this.primaryTerm = primaryTerm;
13181321
this.version = version;
@@ -1325,17 +1328,13 @@ public Type opType() {
13251328

13261329
@Override
13271330
public long estimateSize() {
1328-
return ((uid.field().length() + uid.text().length()) * 2) + 20;
1331+
return 4 + (id.length() * 2) + 24;
13291332
}
13301333

13311334
public String id() {
13321335
return id;
13331336
}
13341337

1335-
public Term uid() {
1336-
return this.uid;
1337-
}
1338-
13391338
@Override
13401339
public long seqNo() {
13411340
return seqNo;
@@ -1362,8 +1361,10 @@ private void write(final StreamOutput out) throws IOException {
13621361
out.writeString(MapperService.SINGLE_MAPPING_NAME);
13631362
}
13641363
out.writeString(id);
1365-
out.writeString(uid.field());
1366-
out.writeBytesRef(uid.bytes());
1364+
if (format < FORMAT_NO_DOC_TYPE) {
1365+
out.writeString(IdFieldMapper.NAME);
1366+
out.writeBytesRef(Uid.encodeId(id));
1367+
}
13671368
out.writeLong(version);
13681369
if (format < FORMAT_NO_VERSION_TYPE) {
13691370
out.writeByte(VersionType.EXTERNAL.getValue());
@@ -1385,14 +1386,12 @@ public boolean equals(Object o) {
13851386

13861387
return version == delete.version &&
13871388
seqNo == delete.seqNo &&
1388-
primaryTerm == delete.primaryTerm &&
1389-
uid.equals(delete.uid);
1389+
primaryTerm == delete.primaryTerm;
13901390
}
13911391

13921392
@Override
13931393
public int hashCode() {
1394-
int result = uid.hashCode();
1395-
result = 31 * result + Long.hashCode(seqNo);
1394+
int result = Long.hashCode(seqNo);
13961395
result = 31 * result + Long.hashCode(primaryTerm);
13971396
result = 31 * result + Long.hashCode(version);
13981397
return result;
@@ -1401,8 +1400,7 @@ public int hashCode() {
14011400
@Override
14021401
public String toString() {
14031402
return "Delete{" +
1404-
"uid=" + uid +
1405-
", seqNo=" + seqNo +
1403+
"seqNo=" + seqNo +
14061404
", primaryTerm=" + primaryTerm +
14071405
", version=" + version +
14081406
'}';

server/src/test/java/org/elasticsearch/index/translog/TranslogTests.java

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,7 @@ public void testSimpleOperations() throws IOException {
323323
assertThat(snapshot.totalOperations(), equalTo(ops.size()));
324324
}
325325

326-
addToTranslogAndList(translog, ops, new Translog.Delete("2", 1, primaryTerm.get(), newUid("2")));
326+
addToTranslogAndList(translog, ops, new Translog.Delete("2", 1, primaryTerm.get()));
327327
try (Translog.Snapshot snapshot = translog.newSnapshot()) {
328328
assertThat(snapshot, SnapshotMatchers.equalsTo(ops));
329329
assertThat(snapshot.totalOperations(), equalTo(ops.size()));
@@ -342,7 +342,7 @@ public void testSimpleOperations() throws IOException {
342342

343343
Translog.Delete delete = (Translog.Delete) snapshot.next();
344344
assertNotNull(delete);
345-
assertThat(delete.uid(), equalTo(newUid("2")));
345+
assertThat(delete.id(), equalTo("2"));
346346

347347
Translog.NoOp noOp = (Translog.NoOp) snapshot.next();
348348
assertNotNull(noOp);
@@ -423,43 +423,43 @@ public void testStats() throws IOException {
423423
assertThat(stats.getEarliestLastModifiedAge(), greaterThan(0L));
424424
}
425425

426-
translog.add(new Translog.Delete("2", 1, primaryTerm.get(), newUid("2")));
426+
translog.add(new Translog.Delete("2", 1, primaryTerm.get()));
427427
{
428428
final TranslogStats stats = stats();
429429
assertThat(stats.estimatedNumberOfOperations(), equalTo(2));
430-
assertThat(stats.getTranslogSizeInBytes(), equalTo(200L));
430+
assertThat(stats.getTranslogSizeInBytes(), equalTo(193L));
431431
assertThat(stats.getUncommittedOperations(), equalTo(2));
432-
assertThat(stats.getUncommittedSizeInBytes(), equalTo(145L));
432+
assertThat(stats.getUncommittedSizeInBytes(), equalTo(138L));
433433
assertThat(stats.getEarliestLastModifiedAge(), greaterThan(0L));
434434
}
435435

436-
translog.add(new Translog.Delete("3", 2, primaryTerm.get(), newUid("3")));
436+
translog.add(new Translog.Delete("3", 2, primaryTerm.get()));
437437
{
438438
final TranslogStats stats = stats();
439439
assertThat(stats.estimatedNumberOfOperations(), equalTo(3));
440-
assertThat(stats.getTranslogSizeInBytes(), equalTo(243L));
440+
assertThat(stats.getTranslogSizeInBytes(), equalTo(229L));
441441
assertThat(stats.getUncommittedOperations(), equalTo(3));
442-
assertThat(stats.getUncommittedSizeInBytes(), equalTo(188L));
442+
assertThat(stats.getUncommittedSizeInBytes(), equalTo(174L));
443443
assertThat(stats.getEarliestLastModifiedAge(), greaterThan(0L));
444444
}
445445

446446
translog.add(new Translog.NoOp(3, 1, randomAlphaOfLength(16)));
447447
{
448448
final TranslogStats stats = stats();
449449
assertThat(stats.estimatedNumberOfOperations(), equalTo(4));
450-
assertThat(stats.getTranslogSizeInBytes(), equalTo(285L));
450+
assertThat(stats.getTranslogSizeInBytes(), equalTo(271L));
451451
assertThat(stats.getUncommittedOperations(), equalTo(4));
452-
assertThat(stats.getUncommittedSizeInBytes(), equalTo(230L));
452+
assertThat(stats.getUncommittedSizeInBytes(), equalTo(216L));
453453
assertThat(stats.getEarliestLastModifiedAge(), greaterThan(0L));
454454
}
455455

456456
translog.rollGeneration();
457457
{
458458
final TranslogStats stats = stats();
459459
assertThat(stats.estimatedNumberOfOperations(), equalTo(4));
460-
assertThat(stats.getTranslogSizeInBytes(), equalTo(340L));
460+
assertThat(stats.getTranslogSizeInBytes(), equalTo(326L));
461461
assertThat(stats.getUncommittedOperations(), equalTo(4));
462-
assertThat(stats.getUncommittedSizeInBytes(), equalTo(285L));
462+
assertThat(stats.getUncommittedSizeInBytes(), equalTo(271L));
463463
assertThat(stats.getEarliestLastModifiedAge(), greaterThan(0L));
464464
}
465465

@@ -469,14 +469,14 @@ public void testStats() throws IOException {
469469
stats.writeTo(out);
470470
final TranslogStats copy = new TranslogStats(out.bytes().streamInput());
471471
assertThat(copy.estimatedNumberOfOperations(), equalTo(4));
472-
assertThat(copy.getTranslogSizeInBytes(), equalTo(340L));
472+
assertThat(copy.getTranslogSizeInBytes(), equalTo(326L));
473473

474474
try (XContentBuilder builder = XContentFactory.jsonBuilder()) {
475475
builder.startObject();
476476
copy.toXContent(builder, ToXContent.EMPTY_PARAMS);
477477
builder.endObject();
478-
assertThat(Strings.toString(builder), equalTo("{\"translog\":{\"operations\":4,\"size_in_bytes\":" + 340
479-
+ ",\"uncommitted_operations\":4,\"uncommitted_size_in_bytes\":" + 285
478+
assertThat(Strings.toString(builder), equalTo("{\"translog\":{\"operations\":4,\"size_in_bytes\":" + 326
479+
+ ",\"uncommitted_operations\":4,\"uncommitted_size_in_bytes\":" + 271
480480
+ ",\"earliest_last_modified_age\":" + stats.getEarliestLastModifiedAge() + "}}"));
481481
}
482482
}
@@ -787,7 +787,7 @@ public void testConcurrentWritesWithVaryingSize() throws Throwable {
787787
case DELETE:
788788
Translog.Delete delOp = (Translog.Delete) op;
789789
Translog.Delete expDelOp = (Translog.Delete) expectedOp;
790-
assertEquals(expDelOp.uid(), delOp.uid());
790+
assertEquals(expDelOp.id(), delOp.id());
791791
assertEquals(expDelOp.version(), delOp.version());
792792
break;
793793
case NO_OP:
@@ -947,7 +947,7 @@ public void doRun() throws BrokenBarrierException, InterruptedException, IOExcep
947947
op = new Translog.Index("" + id, id, primaryTerm.get(), new byte[]{(byte) id});
948948
break;
949949
case DELETE:
950-
op = new Translog.Delete(Long.toString(id), id, primaryTerm.get(), newUid(Long.toString(id)));
950+
op = new Translog.Delete(Long.toString(id), id, primaryTerm.get());
951951
break;
952952
case NO_OP:
953953
op = new Translog.NoOp(id, 1, Long.toString(id));
@@ -1927,7 +1927,6 @@ public void run() {
19271927
case DELETE:
19281928
op = new Translog.Delete(
19291929
threadId + "_" + opCount,
1930-
new Term("_uid", threadId + "_" + opCount),
19311930
seqNoGenerator.getAndIncrement(),
19321931
primaryTerm.get(),
19331932
1 + randomInt(100000));

test/framework/src/main/java/org/elasticsearch/index/engine/TranslogHandler.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -118,10 +118,8 @@ public Engine.Operation convertToEngineOp(Translog.Operation operation, Engine.O
118118
return engineIndex;
119119
case DELETE:
120120
final Translog.Delete delete = (Translog.Delete) operation;
121-
final Engine.Delete engineDelete = new Engine.Delete(delete.id(), delete.uid(), delete.seqNo(),
122-
delete.primaryTerm(), delete.version(), versionType, origin, System.nanoTime(),
123-
SequenceNumbers.UNASSIGNED_SEQ_NO, SequenceNumbers.UNASSIGNED_PRIMARY_TERM);
124-
return engineDelete;
121+
return IndexShard.prepareDelete(delete.id(), delete.seqNo(), delete.primaryTerm(), delete.version(), versionType,
122+
origin, SequenceNumbers.UNASSIGNED_SEQ_NO, SequenceNumbers.UNASSIGNED_PRIMARY_TERM);
125123
case NO_OP:
126124
final Translog.NoOp noOp = (Translog.NoOp) operation;
127125
final Engine.NoOp engineNoOp =

x-pack/plugin/ccr/src/main/java/org/elasticsearch/xpack/ccr/action/bulk/TransportBulkShardOperationsAction.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,6 @@ public static Translog.Operation rewriteOperationWithPrimaryTerm(Translog.Operat
110110
final Translog.Delete delete = (Translog.Delete) operation;
111111
operationWithPrimaryTerm = new Translog.Delete(
112112
delete.id(),
113-
delete.uid(),
114113
delete.seqNo(),
115114
primaryTerm,
116115
delete.version());

x-pack/plugin/ccr/src/test/java/org/elasticsearch/xpack/ccr/action/bulk/BulkShardOperationsTests.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,12 @@
66

77
package org.elasticsearch.xpack.ccr.action.bulk;
88

9-
import org.apache.lucene.index.Term;
109
import org.elasticsearch.Version;
1110
import org.elasticsearch.action.admin.indices.flush.FlushRequest;
1211
import org.elasticsearch.action.support.replication.TransportWriteAction;
1312
import org.elasticsearch.cluster.node.DiscoveryNode;
1413
import org.elasticsearch.common.Randomness;
1514
import org.elasticsearch.common.settings.Settings;
16-
import org.elasticsearch.index.mapper.Uid;
1715
import org.elasticsearch.index.shard.IndexShard;
1816
import org.elasticsearch.index.shard.IndexShardTestCase;
1917
import org.elasticsearch.index.translog.Translog;
@@ -58,7 +56,7 @@ public void testPrimaryTermFromFollower() throws IOException {
5856
break;
5957
case DELETE:
6058
operations.add(
61-
new Translog.Delete(id, new Term("_id", Uid.encodeId(id)), seqNo, primaryTerm, 0));
59+
new Translog.Delete(id, seqNo, primaryTerm, 0));
6260
break;
6361
case NO_OP:
6462
operations.add(new Translog.NoOp(seqNo, primaryTerm, "test"));
@@ -101,7 +99,7 @@ public void testPrimaryResultIncludeOnlyAppliedOperations() throws Exception {
10199
if (randomBoolean()) {
102100
op = new Translog.Index(id, seqno++, primaryTerm, 0, SOURCE, null, -1);
103101
} else if (randomBoolean()) {
104-
op = new Translog.Delete(id, new Term("_id", Uid.encodeId(id)), seqno++, primaryTerm, 0);
102+
op = new Translog.Delete(id, seqno++, primaryTerm, 0);
105103
} else {
106104
op = new Translog.NoOp(seqno++, primaryTerm, "test-" + i);
107105
}

0 commit comments

Comments
 (0)