10
10
import org .elasticsearch .action .support .IndicesOptions ;
11
11
import org .elasticsearch .common .io .stream .StreamInput ;
12
12
import org .elasticsearch .common .io .stream .StreamOutput ;
13
+ import org .elasticsearch .core .Nullable ;
13
14
import org .elasticsearch .index .query .QueryBuilder ;
14
15
import org .elasticsearch .index .shard .ShardId ;
15
16
import org .elasticsearch .transport .TransportRequest ;
20
21
import java .util .Set ;
21
22
22
23
/**
23
- * Internal terms enum request executed directly against a specific node, querying potentially many
24
+ * Internal terms enum request executed directly against a specific node, querying potentially many
24
25
* shards in one request
25
26
*/
26
27
public class NodeTermsEnumRequest extends TransportRequest implements IndicesRequest {
@@ -36,12 +37,27 @@ public class NodeTermsEnumRequest extends TransportRequest implements IndicesReq
36
37
private final QueryBuilder indexFilter ;
37
38
private Set <ShardId > shardIds ;
38
39
private String nodeId ;
39
-
40
+
41
+ public NodeTermsEnumRequest (final String nodeId ,
42
+ final Set <ShardId > shardIds ,
43
+ TermsEnumRequest request ,
44
+ long taskStartTimeMillis ) {
45
+ this .field = request .field ();
46
+ this .string = request .string ();
47
+ this .searchAfter = request .searchAfter ();
48
+ this .caseInsensitive = request .caseInsensitive ();
49
+ this .size = request .size ();
50
+ this .timeout = request .timeout ().getMillis ();
51
+ this .taskStartedTimeMillis = taskStartTimeMillis ;
52
+ this .indexFilter = request .indexFilter ();
53
+ this .nodeId = nodeId ;
54
+ this .shardIds = shardIds ;
55
+ }
40
56
41
57
public NodeTermsEnumRequest (StreamInput in ) throws IOException {
42
58
super (in );
43
59
field = in .readString ();
44
- string = in .readString ();
60
+ string = in .readOptionalString ();
45
61
searchAfter = in .readOptionalString ();
46
62
caseInsensitive = in .readBoolean ();
47
63
size = in .readVInt ();
@@ -56,36 +72,47 @@ public NodeTermsEnumRequest(StreamInput in) throws IOException {
56
72
}
57
73
}
58
74
59
- public NodeTermsEnumRequest (final String nodeId , final Set <ShardId > shardIds , TermsEnumRequest request ) {
60
- this .field = request .field ();
61
- this .string = request .string ();
62
- this .searchAfter = request .searchAfter ();
63
- this .caseInsensitive = request .caseInsensitive ();
64
- this .size = request .size ();
65
- this .timeout = request .timeout ().getMillis ();
66
- this .taskStartedTimeMillis = request .taskStartTimeMillis ;
67
- this .indexFilter = request .indexFilter ();
68
- this .nodeId = nodeId ;
69
- this .shardIds = shardIds ;
75
+ @ Override
76
+ public void writeTo (StreamOutput out ) throws IOException {
77
+ super .writeTo (out );
78
+ out .writeString (field );
79
+ out .writeOptionalString (string );
80
+ out .writeOptionalString (searchAfter );
81
+ out .writeBoolean (caseInsensitive );
82
+ out .writeVInt (size );
83
+ // Adjust the amount of permitted time the shard has remaining to gather terms.
84
+ long timeSpentSoFarInCoordinatingNode = System .currentTimeMillis () - taskStartedTimeMillis ;
85
+ long remainingTimeForShardToUse = (timeout - timeSpentSoFarInCoordinatingNode );
86
+ // TODO - if already timed out can we shortcut the trip somehow? Throw exception if remaining time < 0?
87
+ out .writeVLong (remainingTimeForShardToUse );
88
+ out .writeVLong (taskStartedTimeMillis );
89
+ out .writeOptionalNamedWriteable (indexFilter );
90
+ out .writeString (nodeId );
91
+ out .writeVInt (shardIds .size ());
92
+ for (ShardId shardId : shardIds ) {
93
+ shardId .writeTo (out );
94
+ }
70
95
}
71
96
72
97
public String field () {
73
98
return field ;
74
99
}
75
100
101
+ @ Nullable
76
102
public String string () {
77
103
return string ;
78
104
}
79
105
106
+ @ Nullable
80
107
public String searchAfter () {
81
108
return searchAfter ;
82
109
}
83
110
84
111
public long taskStartedTimeMillis () {
85
112
return this .taskStartedTimeMillis ;
86
113
}
87
-
88
- /**
114
+
115
+ /**
89
116
* The time this request was materialized on a node
90
117
*/
91
118
long nodeStartedTimeMillis () {
@@ -94,12 +121,12 @@ long nodeStartedTimeMillis() {
94
121
nodeStartedTimeMillis = System .currentTimeMillis ();
95
122
}
96
123
return this .nodeStartedTimeMillis ;
97
- }
98
-
124
+ }
125
+
99
126
public void startTimerOnDataNode () {
100
127
nodeStartedTimeMillis = System .currentTimeMillis ();
101
128
}
102
-
129
+
103
130
public Set <ShardId > shardIds () {
104
131
return Collections .unmodifiableSet (shardIds );
105
132
}
@@ -119,28 +146,6 @@ public String nodeId() {
119
146
return nodeId ;
120
147
}
121
148
122
- @ Override
123
- public void writeTo (StreamOutput out ) throws IOException {
124
- super .writeTo (out );
125
- out .writeString (field );
126
- out .writeString (string );
127
- out .writeOptionalString (searchAfter );
128
- out .writeBoolean (caseInsensitive );
129
- out .writeVInt (size );
130
- // Adjust the amount of permitted time the shard has remaining to gather terms.
131
- long timeSpentSoFarInCoordinatingNode = System .currentTimeMillis () - taskStartedTimeMillis ;
132
- long remainingTimeForShardToUse = (timeout - timeSpentSoFarInCoordinatingNode );
133
- // TODO - if already timed out can we shortcut the trip somehow? Throw exception if remaining time < 0?
134
- out .writeVLong (remainingTimeForShardToUse );
135
- out .writeVLong (taskStartedTimeMillis );
136
- out .writeOptionalNamedWriteable (indexFilter );
137
- out .writeString (nodeId );
138
- out .writeVInt (shardIds .size ());
139
- for (ShardId shardId : shardIds ) {
140
- shardId .writeTo (out );
141
- }
142
- }
143
-
144
149
public QueryBuilder indexFilter () {
145
150
return indexFilter ;
146
151
}
@@ -162,5 +167,4 @@ public IndicesOptions indicesOptions() {
162
167
public boolean remove (ShardId shardId ) {
163
168
return shardIds .remove (shardId );
164
169
}
165
-
166
170
}
0 commit comments