Skip to content

Commit 8128f39

Browse files
committed
Fix NPE in PendingDelete#toString
closes elastic#11032
1 parent 8905e72 commit 8128f39

File tree

1 file changed

+38
-19
lines changed

1 file changed

+38
-19
lines changed

src/main/java/org/elasticsearch/indices/IndicesService.java

Lines changed: 38 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -621,10 +621,18 @@ public void addPendingDelete(ShardId shardId, @IndexSettings Settings settings)
621621
if (settings == null) {
622622
throw new IllegalArgumentException("settings must not be null");
623623
}
624-
PendingDelete pendingDelete = new PendingDelete(shardId, settings, false);
624+
PendingDelete pendingDelete = new PendingDelete(shardId, settings);
625625
addPendingDelete(shardId.index(), pendingDelete);
626626
}
627627

628+
/**
629+
* Adds a pending delete for the given index.
630+
*/
631+
public void addPendingDelete(Index index, @IndexSettings Settings settings) {
632+
PendingDelete pendingDelete = new PendingDelete(index, settings);
633+
addPendingDelete(index, pendingDelete);
634+
}
635+
628636
private void addPendingDelete(Index index, PendingDelete pendingDelete) {
629637
synchronized (pendingDeletes) {
630638
List<PendingDelete> list = pendingDeletes.get(index);
@@ -636,36 +644,45 @@ private void addPendingDelete(Index index, PendingDelete pendingDelete) {
636644
}
637645
}
638646

639-
/**
640-
* Adds a pending delete for the given index shard.
641-
*/
642-
public void addPendingDelete(Index index, @IndexSettings Settings settings) {
643-
PendingDelete pendingDelete = new PendingDelete(null, settings, true);
644-
addPendingDelete(index, pendingDelete);
645-
}
646-
647647
private static final class PendingDelete implements Comparable<PendingDelete> {
648-
final ShardId shardId;
648+
final String index;
649+
final int shardId;
649650
final Settings settings;
650651
final boolean deleteIndex;
651652

652-
public PendingDelete(ShardId shardId, Settings settings, boolean deleteIndex) {
653-
this.shardId = shardId;
653+
/**
654+
* Creates a new pending delete of an index
655+
*/
656+
public PendingDelete(ShardId shardId, Settings settings) {
657+
this.index = shardId.getIndex();
658+
this.shardId = shardId.getId();
654659
this.settings = settings;
655-
this.deleteIndex = deleteIndex;
656-
assert deleteIndex || shardId != null;
660+
this.deleteIndex = false;
661+
}
662+
663+
/**
664+
* Creates a new pending delete of a shard
665+
*/
666+
public PendingDelete(Index index, Settings settings) {
667+
this.index = index.getName();
668+
this.shardId = -1;
669+
this.settings = settings;
670+
this.deleteIndex = true;
657671
}
658672

659673
@Override
660674
public String toString() {
661-
return shardId.toString();
675+
StringBuilder sb = new StringBuilder();
676+
sb.append("[").append(index).append("]");
677+
if (shardId != -1) {
678+
sb.append("[").append(shardId).append("]");
679+
}
680+
return sb.toString();
662681
}
663682

664683
@Override
665684
public int compareTo(PendingDelete o) {
666-
int left = deleteIndex ? -1 : shardId.id();
667-
int right = o.deleteIndex ? -1 : o.shardId.id();
668-
return Integer.compare(left, right);
685+
return Integer.compare(shardId, o.shardId);
669686
}
670687
}
671688

@@ -704,6 +721,7 @@ public void processPendingDeletes(Index index, @IndexSettings Settings indexSett
704721
PendingDelete delete = iterator.next();
705722

706723
if (delete.deleteIndex) {
724+
assert delete.shardId == -1;
707725
logger.debug("{} deleting index store reason [{}]", index, "pending delete");
708726
try {
709727
nodeEnv.deleteIndexDirectoryUnderLock(index, indexSettings);
@@ -712,7 +730,8 @@ public void processPendingDeletes(Index index, @IndexSettings Settings indexSett
712730
logger.debug("{} retry pending delete", ex, index);
713731
}
714732
} else {
715-
ShardLock shardLock = locks.get(delete.shardId);
733+
assert delete.shardId != -1;
734+
ShardLock shardLock = locks.get(new ShardId(delete.index, delete.shardId));
716735
if (shardLock != null) {
717736
try {
718737
deleteShardStore("pending delete", shardLock, delete.settings);

0 commit comments

Comments
 (0)