add peer recovery status to the indices status API exposing both on going and summary when recovering from a peer shard
This commit is contained in:
parent
5fb80c391b
commit
311520d146
|
@ -112,7 +112,7 @@ public class ShardStatus extends BroadcastShardOperationResponse {
|
||||||
|
|
||||||
final long startTime;
|
final long startTime;
|
||||||
|
|
||||||
final long took;
|
final long time;
|
||||||
|
|
||||||
final long retryTime;
|
final long retryTime;
|
||||||
|
|
||||||
|
@ -124,11 +124,11 @@ public class ShardStatus extends BroadcastShardOperationResponse {
|
||||||
|
|
||||||
final long recoveredTranslogOperations;
|
final long recoveredTranslogOperations;
|
||||||
|
|
||||||
public PeerRecoveryStatus(Stage stage, long startTime, long took, long retryTime, long indexSize, long reusedIndexSize,
|
public PeerRecoveryStatus(Stage stage, long startTime, long time, long retryTime, long indexSize, long reusedIndexSize,
|
||||||
long recoveredIndexSize, long recoveredTranslogOperations) {
|
long recoveredIndexSize, long recoveredTranslogOperations) {
|
||||||
this.stage = stage;
|
this.stage = stage;
|
||||||
this.startTime = startTime;
|
this.startTime = startTime;
|
||||||
this.took = took;
|
this.time = time;
|
||||||
this.retryTime = retryTime;
|
this.retryTime = retryTime;
|
||||||
this.indexSize = indexSize;
|
this.indexSize = indexSize;
|
||||||
this.reusedIndexSize = reusedIndexSize;
|
this.reusedIndexSize = reusedIndexSize;
|
||||||
|
@ -148,12 +148,12 @@ public class ShardStatus extends BroadcastShardOperationResponse {
|
||||||
return this.startTime;
|
return this.startTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
public TimeValue took() {
|
public TimeValue time() {
|
||||||
return TimeValue.timeValueMillis(took);
|
return TimeValue.timeValueMillis(time);
|
||||||
}
|
}
|
||||||
|
|
||||||
public TimeValue getTook() {
|
public TimeValue getTime() {
|
||||||
return took();
|
return time();
|
||||||
}
|
}
|
||||||
|
|
||||||
public TimeValue retryTime() {
|
public TimeValue retryTime() {
|
||||||
|
@ -321,7 +321,7 @@ public class ShardStatus extends BroadcastShardOperationResponse {
|
||||||
out.writeBoolean(true);
|
out.writeBoolean(true);
|
||||||
out.writeByte(peerRecoveryStatus.stage.value);
|
out.writeByte(peerRecoveryStatus.stage.value);
|
||||||
out.writeVLong(peerRecoveryStatus.startTime);
|
out.writeVLong(peerRecoveryStatus.startTime);
|
||||||
out.writeVLong(peerRecoveryStatus.took);
|
out.writeVLong(peerRecoveryStatus.time);
|
||||||
out.writeVLong(peerRecoveryStatus.retryTime);
|
out.writeVLong(peerRecoveryStatus.retryTime);
|
||||||
out.writeVLong(peerRecoveryStatus.indexSize);
|
out.writeVLong(peerRecoveryStatus.indexSize);
|
||||||
out.writeVLong(peerRecoveryStatus.reusedIndexSize);
|
out.writeVLong(peerRecoveryStatus.reusedIndexSize);
|
||||||
|
|
|
@ -172,7 +172,7 @@ public class TransportIndicesStatusAction extends TransportBroadcastOperationAct
|
||||||
default:
|
default:
|
||||||
stage = ShardStatus.PeerRecoveryStatus.Stage.INIT;
|
stage = ShardStatus.PeerRecoveryStatus.Stage.INIT;
|
||||||
}
|
}
|
||||||
shardStatus.peerRecoveryStatus = new ShardStatus.PeerRecoveryStatus(stage, peerRecoveryStatus.startTime(), peerRecoveryStatus.took(),
|
shardStatus.peerRecoveryStatus = new ShardStatus.PeerRecoveryStatus(stage, peerRecoveryStatus.startTime(), peerRecoveryStatus.time(),
|
||||||
peerRecoveryStatus.retryTime(), peerRecoveryStatus.phase1TotalSize(), peerRecoveryStatus.phase1ExistingTotalSize(),
|
peerRecoveryStatus.retryTime(), peerRecoveryStatus.phase1TotalSize(), peerRecoveryStatus.phase1ExistingTotalSize(),
|
||||||
peerRecoveryStatus.currentFilesSize(), peerRecoveryStatus.currentTranslogOperations());
|
peerRecoveryStatus.currentFilesSize(), peerRecoveryStatus.currentTranslogOperations());
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,7 +43,7 @@ public class PeerRecoveryStatus {
|
||||||
ConcurrentMap<String, IndexOutput> openIndexOutputs = ConcurrentCollections.newConcurrentMap();
|
ConcurrentMap<String, IndexOutput> openIndexOutputs = ConcurrentCollections.newConcurrentMap();
|
||||||
|
|
||||||
final long startTime = System.currentTimeMillis();
|
final long startTime = System.currentTimeMillis();
|
||||||
long took;
|
long time;
|
||||||
volatile long retryTime = 0;
|
volatile long retryTime = 0;
|
||||||
List<String> phase1FileNames;
|
List<String> phase1FileNames;
|
||||||
List<Long> phase1FileSizes;
|
List<Long> phase1FileSizes;
|
||||||
|
@ -60,8 +60,8 @@ public class PeerRecoveryStatus {
|
||||||
return startTime;
|
return startTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
public long took() {
|
public long time() {
|
||||||
return this.took;
|
return this.time;
|
||||||
}
|
}
|
||||||
|
|
||||||
public long retryTime() {
|
public long retryTime() {
|
||||||
|
|
|
@ -103,7 +103,15 @@ public class RecoveryTarget extends AbstractComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
public PeerRecoveryStatus peerRecoveryStatus(ShardId shardId) {
|
public PeerRecoveryStatus peerRecoveryStatus(ShardId shardId) {
|
||||||
return onGoingRecoveries.get(shardId);
|
PeerRecoveryStatus peerRecoveryStatus = onGoingRecoveries.get(shardId);
|
||||||
|
if (peerRecoveryStatus == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
// update how long it takes if we are still recovering...
|
||||||
|
if (peerRecoveryStatus.startTime > 0 && peerRecoveryStatus.stage != PeerRecoveryStatus.Stage.DONE) {
|
||||||
|
peerRecoveryStatus.time = System.currentTimeMillis() - peerRecoveryStatus.startTime;
|
||||||
|
}
|
||||||
|
return peerRecoveryStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void startRecovery(final StartRecoveryRequest request, final boolean fromRetry, final RecoveryListener listener) {
|
public void startRecovery(final StartRecoveryRequest request, final boolean fromRetry, final RecoveryListener listener) {
|
||||||
|
@ -313,7 +321,7 @@ public class RecoveryTarget extends AbstractComponent {
|
||||||
}
|
}
|
||||||
peerRecoveryStatus.stage = PeerRecoveryStatus.Stage.FINALIZE;
|
peerRecoveryStatus.stage = PeerRecoveryStatus.Stage.FINALIZE;
|
||||||
shard.performRecoveryFinalization(false, peerRecoveryStatus);
|
shard.performRecoveryFinalization(false, peerRecoveryStatus);
|
||||||
peerRecoveryStatus.took = System.currentTimeMillis() - peerRecoveryStatus.startTime;
|
peerRecoveryStatus.time = System.currentTimeMillis() - peerRecoveryStatus.startTime;
|
||||||
peerRecoveryStatus.stage = PeerRecoveryStatus.Stage.DONE;
|
peerRecoveryStatus.stage = PeerRecoveryStatus.Stage.DONE;
|
||||||
channel.sendResponse(VoidStreamable.INSTANCE);
|
channel.sendResponse(VoidStreamable.INSTANCE);
|
||||||
}
|
}
|
||||||
|
|
|
@ -143,10 +143,8 @@ public class RestIndicesStatusAction extends BaseRestHandler {
|
||||||
builder.startObject("peer_recovery");
|
builder.startObject("peer_recovery");
|
||||||
builder.field("stage", peerRecoveryStatus.stage());
|
builder.field("stage", peerRecoveryStatus.stage());
|
||||||
builder.field("start_time_in_millis", peerRecoveryStatus.startTime());
|
builder.field("start_time_in_millis", peerRecoveryStatus.startTime());
|
||||||
if (peerRecoveryStatus.took().millis() > 0) {
|
builder.field("time", peerRecoveryStatus.time());
|
||||||
builder.field("took", peerRecoveryStatus.took());
|
builder.field("took_in_millis", peerRecoveryStatus.time().millis());
|
||||||
builder.field("took_in_millis", peerRecoveryStatus.took().millis());
|
|
||||||
}
|
|
||||||
builder.field("retry_time", peerRecoveryStatus.retryTime());
|
builder.field("retry_time", peerRecoveryStatus.retryTime());
|
||||||
builder.field("retry_time_in_millis", peerRecoveryStatus.retryTime().millis());
|
builder.field("retry_time_in_millis", peerRecoveryStatus.retryTime().millis());
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue