20
20
package org .elasticsearch .cluster .action .shard ;
21
21
22
22
import org .elasticsearch .ExceptionsHelper ;
23
- import org .elasticsearch .cluster .*;
23
+ import org .elasticsearch .cluster .ClusterService ;
24
+ import org .elasticsearch .cluster .ClusterState ;
25
+ import org .elasticsearch .cluster .ClusterStateTaskConfig ;
26
+ import org .elasticsearch .cluster .ClusterStateTaskExecutor ;
27
+ import org .elasticsearch .cluster .ClusterStateTaskListener ;
24
28
import org .elasticsearch .cluster .metadata .IndexMetaData ;
25
29
import org .elasticsearch .cluster .node .DiscoveryNode ;
26
30
import org .elasticsearch .cluster .routing .RoutingService ;
37
41
import org .elasticsearch .common .settings .Settings ;
38
42
import org .elasticsearch .common .unit .TimeValue ;
39
43
import org .elasticsearch .threadpool .ThreadPool ;
40
- import org .elasticsearch .transport .*;
44
+ import org .elasticsearch .transport .EmptyTransportResponseHandler ;
45
+ import org .elasticsearch .transport .TransportChannel ;
46
+ import org .elasticsearch .transport .TransportException ;
47
+ import org .elasticsearch .transport .TransportRequest ;
48
+ import org .elasticsearch .transport .TransportRequestHandler ;
49
+ import org .elasticsearch .transport .TransportRequestOptions ;
50
+ import org .elasticsearch .transport .TransportResponse ;
51
+ import org .elasticsearch .transport .TransportService ;
41
52
42
53
import java .io .IOException ;
43
54
import java .util .ArrayList ;
44
55
import java .util .List ;
45
56
46
57
import static org .elasticsearch .cluster .routing .ShardRouting .readShardRoutingEntry ;
47
58
48
- /**
49
- *
50
- */
51
- public class ShardStateAction extends AbstractComponent {
52
59
60
+ public class ShardStateAction extends AbstractComponent {
53
61
public static final String SHARD_STARTED_ACTION_NAME = "internal:cluster/shard/started" ;
54
62
public static final String SHARD_FAILED_ACTION_NAME = "internal:cluster/shard/failure" ;
55
63
@@ -97,52 +105,26 @@ private void innerShardFailed(final ShardRouting shardRouting, final String inde
97
105
options = TransportRequestOptions .builder ().withTimeout (timeout ).build ();
98
106
}
99
107
transportService .sendRequest (masterNode ,
100
- SHARD_FAILED_ACTION_NAME , shardRoutingEntry , options , new EmptyTransportResponseHandler (ThreadPool .Names .SAME ) {
101
- @ Override
102
- public void handleResponse (TransportResponse .Empty response ) {
103
- listener .onSuccess ();
104
- }
105
-
106
- @ Override
107
- public void handleException (TransportException exp ) {
108
- logger .warn ("failed to send failed shard to {}" , exp , masterNode );
109
- listener .onShardFailedFailure (masterNode , exp );
110
- }
111
- });
112
- }
113
-
114
- public void shardStarted (final ShardRouting shardRouting , String indexUUID , final String reason ) {
115
- DiscoveryNode masterNode = clusterService .state ().nodes ().masterNode ();
116
- if (masterNode == null ) {
117
- logger .warn ("{} can't send shard started for {}, no master known." , shardRouting .shardId (), shardRouting );
118
- return ;
119
- }
120
- shardStarted (shardRouting , indexUUID , reason , masterNode );
121
- }
122
-
123
- public void shardStarted (final ShardRouting shardRouting , String indexUUID , final String reason , final DiscoveryNode masterNode ) {
124
- ShardRoutingEntry shardRoutingEntry = new ShardRoutingEntry (shardRouting , indexUUID , reason , null );
125
- logger .debug ("{} sending shard started for {}" , shardRoutingEntry .shardRouting .shardId (), shardRoutingEntry );
126
- transportService .sendRequest (masterNode ,
127
- SHARD_STARTED_ACTION_NAME , new ShardRoutingEntry (shardRouting , indexUUID , reason , null ), new EmptyTransportResponseHandler (ThreadPool .Names .SAME ) {
128
- @ Override
129
- public void handleException (TransportException exp ) {
130
- logger .warn ("failed to send shard started to [{}]" , exp , masterNode );
131
- }
108
+ SHARD_FAILED_ACTION_NAME , shardRoutingEntry , options , new EmptyTransportResponseHandler (ThreadPool .Names .SAME ) {
109
+ @ Override
110
+ public void handleResponse (TransportResponse .Empty response ) {
111
+ listener .onSuccess ();
112
+ }
132
113
133
- });
114
+ @ Override
115
+ public void handleException (TransportException exp ) {
116
+ logger .warn ("failed to send failed shard to {}" , exp , masterNode );
117
+ listener .onShardFailedFailure (masterNode , exp );
118
+ }
119
+ });
134
120
}
135
121
136
- private final ShardFailedClusterStateHandler shardFailedClusterStateHandler = new ShardFailedClusterStateHandler ();
137
-
138
- private void handleShardFailureOnMaster (final ShardRoutingEntry shardRoutingEntry ) {
139
- logger .warn ("{} received shard failed for {}" , shardRoutingEntry .failure , shardRoutingEntry .shardRouting .shardId (), shardRoutingEntry );
140
- clusterService .submitStateUpdateTask (
141
- "shard-failed (" + shardRoutingEntry .shardRouting + "), message [" + shardRoutingEntry .message + "]" ,
142
- shardRoutingEntry ,
143
- ClusterStateTaskConfig .build (Priority .HIGH ),
144
- shardFailedClusterStateHandler ,
145
- shardFailedClusterStateHandler );
122
+ private class ShardFailedTransportHandler implements TransportRequestHandler <ShardRoutingEntry > {
123
+ @ Override
124
+ public void messageReceived (ShardRoutingEntry request , TransportChannel channel ) throws Exception {
125
+ handleShardFailureOnMaster (request );
126
+ channel .sendResponse (TransportResponse .Empty .INSTANCE );
127
+ }
146
128
}
147
129
148
130
class ShardFailedClusterStateHandler implements ClusterStateTaskExecutor <ShardRoutingEntry >, ClusterStateTaskListener {
@@ -168,10 +150,10 @@ public BatchResult<ShardRoutingEntry> execute(ClusterState currentState, List<Sh
168
150
169
151
@ Override
170
152
public void clusterStateProcessed (String source , ClusterState oldState , ClusterState newState ) {
171
- if (oldState != newState && newState .getRoutingNodes ().unassigned ().size () > 0 ) {
172
- logger .trace ("unassigned shards after shard failures. scheduling a reroute." );
173
- routingService .reroute ("unassigned shards after shard failures, scheduling a reroute" );
174
- }
153
+ if (oldState != newState && newState .getRoutingNodes ().unassigned ().size () > 0 ) {
154
+ logger .trace ("unassigned shards after shard failures. scheduling a reroute." );
155
+ routingService .reroute ("unassigned shards after shard failures, scheduling a reroute" );
156
+ }
175
157
}
176
158
177
159
@ Override
@@ -180,18 +162,45 @@ public void onFailure(String source, Throwable t) {
180
162
}
181
163
}
182
164
183
- private final ShardStartedClusterStateHandler shardStartedClusterStateHandler =
184
- new ShardStartedClusterStateHandler ();
185
-
186
- private void shardStartedOnMaster (final ShardRoutingEntry shardRoutingEntry ) {
187
- logger .debug ("received shard started for {}" , shardRoutingEntry );
165
+ private final ShardFailedClusterStateHandler shardFailedClusterStateHandler = new ShardFailedClusterStateHandler ();
188
166
167
+ private void handleShardFailureOnMaster (final ShardRoutingEntry shardRoutingEntry ) {
168
+ logger .warn ("{} received shard failed for {}" , shardRoutingEntry .failure , shardRoutingEntry .shardRouting .shardId (), shardRoutingEntry );
189
169
clusterService .submitStateUpdateTask (
190
- "shard-started (" + shardRoutingEntry .shardRouting + "), reason [" + shardRoutingEntry .message + "]" ,
191
- shardRoutingEntry ,
192
- ClusterStateTaskConfig .build (Priority .URGENT ),
193
- shardStartedClusterStateHandler ,
194
- shardStartedClusterStateHandler );
170
+ "shard-failed (" + shardRoutingEntry .shardRouting + "), message [" + shardRoutingEntry .message + "]" ,
171
+ shardRoutingEntry ,
172
+ ClusterStateTaskConfig .build (Priority .HIGH ),
173
+ shardFailedClusterStateHandler ,
174
+ shardFailedClusterStateHandler );
175
+ }
176
+
177
+ public void shardStarted (final ShardRouting shardRouting , String indexUUID , final String reason ) {
178
+ DiscoveryNode masterNode = clusterService .state ().nodes ().masterNode ();
179
+ if (masterNode == null ) {
180
+ logger .warn ("{} can't send shard started for {}, no master known." , shardRouting .shardId (), shardRouting );
181
+ return ;
182
+ }
183
+ shardStarted (shardRouting , indexUUID , reason , masterNode );
184
+ }
185
+
186
+ public void shardStarted (final ShardRouting shardRouting , String indexUUID , final String reason , final DiscoveryNode masterNode ) {
187
+ ShardRoutingEntry shardRoutingEntry = new ShardRoutingEntry (shardRouting , indexUUID , reason , null );
188
+ logger .debug ("{} sending shard started for {}" , shardRoutingEntry .shardRouting .shardId (), shardRoutingEntry );
189
+ transportService .sendRequest (masterNode ,
190
+ SHARD_STARTED_ACTION_NAME , new ShardRoutingEntry (shardRouting , indexUUID , reason , null ), new EmptyTransportResponseHandler (ThreadPool .Names .SAME ) {
191
+ @ Override
192
+ public void handleException (TransportException exp ) {
193
+ logger .warn ("failed to send shard started to [{}]" , exp , masterNode );
194
+ }
195
+ });
196
+ }
197
+
198
+ class ShardStartedTransportHandler implements TransportRequestHandler <ShardRoutingEntry > {
199
+ @ Override
200
+ public void messageReceived (ShardRoutingEntry request , TransportChannel channel ) throws Exception {
201
+ handleShardStartedOnMaster (request );
202
+ channel .sendResponse (TransportResponse .Empty .INSTANCE );
203
+ }
195
204
}
196
205
197
206
class ShardStartedClusterStateHandler implements ClusterStateTaskExecutor <ShardRoutingEntry >, ClusterStateTaskListener {
@@ -223,26 +232,20 @@ public void onFailure(String source, Throwable t) {
223
232
}
224
233
}
225
234
226
- private class ShardFailedTransportHandler implements TransportRequestHandler < ShardRoutingEntry > {
235
+ private final ShardStartedClusterStateHandler shardStartedClusterStateHandler = new ShardStartedClusterStateHandler ();
227
236
228
- @ Override
229
- public void messageReceived (ShardRoutingEntry request , TransportChannel channel ) throws Exception {
230
- handleShardFailureOnMaster (request );
231
- channel .sendResponse (TransportResponse .Empty .INSTANCE );
232
- }
233
- }
234
-
235
- class ShardStartedTransportHandler implements TransportRequestHandler <ShardRoutingEntry > {
237
+ private void handleShardStartedOnMaster (final ShardRoutingEntry shardRoutingEntry ) {
238
+ logger .debug ("received shard started for {}" , shardRoutingEntry );
236
239
237
- @ Override
238
- public void messageReceived (ShardRoutingEntry request , TransportChannel channel ) throws Exception {
239
- shardStartedOnMaster (request );
240
- channel .sendResponse (TransportResponse .Empty .INSTANCE );
241
- }
240
+ clusterService .submitStateUpdateTask (
241
+ "shard-started (" + shardRoutingEntry .shardRouting + "), reason [" + shardRoutingEntry .message + "]" ,
242
+ shardRoutingEntry ,
243
+ ClusterStateTaskConfig .build (Priority .URGENT ),
244
+ shardStartedClusterStateHandler ,
245
+ shardStartedClusterStateHandler );
242
246
}
243
247
244
248
public static class ShardRoutingEntry extends TransportRequest {
245
-
246
249
ShardRouting shardRouting ;
247
250
String indexUUID = IndexMetaData .INDEX_UUID_NA_VALUE ;
248
251
String message ;
@@ -283,8 +286,13 @@ public String toString() {
283
286
}
284
287
285
288
public interface Listener {
286
- default void onSuccess () {}
287
- default void onShardFailedNoMaster () {}
288
- default void onShardFailedFailure (final DiscoveryNode master , final TransportException e ) {}
289
+ default void onSuccess () {
290
+ }
291
+
292
+ default void onShardFailedNoMaster () {
293
+ }
294
+
295
+ default void onShardFailedFailure (final DiscoveryNode master , final TransportException e ) {
296
+ }
289
297
}
290
298
}
0 commit comments