42
42
import org .opensearch .core .common .io .stream .StreamInput ;
43
43
import org .opensearch .core .common .io .stream .StreamOutput ;
44
44
import org .opensearch .core .common .io .stream .Writeable ;
45
+ import org .opensearch .core .index .Index ;
45
46
import org .opensearch .core .index .shard .ShardId ;
46
47
import org .opensearch .core .xcontent .MediaTypeRegistry ;
47
48
import org .opensearch .core .xcontent .ToXContent ;
66
67
import java .util .Set ;
67
68
import java .util .stream .Collectors ;
68
69
70
+ import static org .opensearch .common .xcontent .XContentUtils .readValue ;
69
71
import static org .opensearch .core .xcontent .XContentParserUtils .ensureExpectedToken ;
70
72
import static org .opensearch .core .xcontent .XContentParserUtils .ensureFieldName ;
71
73
import static org .opensearch .core .xcontent .XContentParserUtils .parseStringList ;
@@ -740,7 +742,6 @@ public XContentBuilder toXContent(XContentBuilder builder, Params params) throws
740
742
builder .field (STATE , status .state ());
741
743
builder .field (NODE , status .nodeId ());
742
744
if (params .param (Metadata .CONTEXT_MODE_PARAM , Metadata .CONTEXT_MODE_API ).equals (Metadata .CONTEXT_MODE_GATEWAY )) {
743
- builder .field (INDEX_UUID , shardId .getIndex ().getUUID ());
744
745
if (status .generation () != null ) builder .field (GENERATION , status .generation ());
745
746
if (status .reason () != null ) builder .field (REASON , status .reason ());
746
747
}
@@ -770,6 +771,7 @@ public XContentBuilder toXContent(XContentBuilder builder, Params params) throws
770
771
if (status .reason () != null ) builder .field (REASON , status .reason ());
771
772
builder .endObject ();
772
773
}
774
+ builder .endArray ();
773
775
builder .field (REMOTE_STORE_INDEX_SHALLOW_COPY , remoteStoreIndexShallowCopy );
774
776
}
775
777
builder .endObject ();
@@ -786,19 +788,18 @@ public static Entry fromXContent(XContentParser parser) throws IOException {
786
788
Version version = null ;
787
789
SnapshotId source = null ;
788
790
Map <String , Object > metadata = null ;
789
- byte state = - 1 ;
791
+ State state = null ;
790
792
List <IndexId > indices = new ArrayList <>();
791
793
long startTime = 0 ;
792
794
long repositoryStateId = -1L ;
793
795
Map <ShardId , ShardSnapshotStatus > shards = new HashMap <>();
794
796
List <String > dataStreams = new ArrayList <>();
795
797
Map <RepositoryShardId , ShardSnapshotStatus > clones = new HashMap <>();
796
798
boolean remoteStoreIndexShallowCopy = false ;
797
- ensureExpectedToken (XContentParser .Token .START_OBJECT , parser .nextToken (), parser );
799
+ ensureExpectedToken (XContentParser .Token .START_OBJECT , parser .currentToken (), parser );
798
800
while (parser .nextToken () != XContentParser .Token .END_OBJECT ) {
799
801
String currentFieldName = parser .currentName ();
800
802
parser .nextToken ();
801
-
802
803
switch (currentFieldName ) {
803
804
case REPOSITORY :
804
805
repository = parser .text ();
@@ -816,7 +817,7 @@ public static Entry fromXContent(XContentParser parser) throws IOException {
816
817
partial = parser .booleanValue ();
817
818
break ;
818
819
case STATE :
819
- state = ( byte ) parser .intValue ( );
820
+ state = State . fromString ( parser .text () );
820
821
break ;
821
822
case INDICES :
822
823
ensureExpectedToken (XContentParser .Token .START_ARRAY , parser .currentToken (), parser );
@@ -836,32 +837,28 @@ public static Entry fromXContent(XContentParser parser) throws IOException {
836
837
case SHARDS :
837
838
ensureExpectedToken (XContentParser .Token .START_ARRAY , parser .currentToken (), parser );
838
839
while (parser .nextToken () != XContentParser .Token .END_ARRAY ) {
839
- String index = null ;
840
- String indexUUID = null ;
840
+ Index index = null ;
841
841
int shardId = -1 ;
842
842
String nodeId = null ;
843
843
ShardState shardState = null ;
844
844
String reason = null ;
845
845
String generation = null ;
846
- ensureExpectedToken (XContentParser .Token .START_OBJECT , parser .nextToken (), parser );
846
+ ensureExpectedToken (XContentParser .Token .START_OBJECT , parser .currentToken (), parser );
847
847
while (parser .nextToken () != XContentParser .Token .END_OBJECT ) {
848
848
final String currentShardField = parser .currentName ();
849
849
parser .nextToken ();
850
850
switch (currentShardField ) {
851
851
case INDEX :
852
- index = parser . text ( );
852
+ index = Index . fromXContent ( parser );
853
853
break ;
854
854
case SHARD :
855
855
shardId = parser .intValue ();
856
856
break ;
857
- case INDEX_UUID :
858
- indexUUID = parser .text ();
859
- break ;
860
857
case NODE :
861
- nodeId = parser . text ( );
858
+ nodeId = ( String ) readValue ( parser , parser . currentToken () );
862
859
break ;
863
860
case STATE :
864
- shardState = ShardState .fromValue (( byte ) parser .intValue ());
861
+ shardState = ShardState .fromString ( parser .text ());
865
862
break ;
866
863
case REASON :
867
864
reason = parser .text ();
@@ -873,7 +870,7 @@ public static Entry fromXContent(XContentParser parser) throws IOException {
873
870
throw new IllegalArgumentException ("unknown field [" + currentShardField + "]" );
874
871
}
875
872
}
876
- shards .put (new ShardId (index , indexUUID , shardId ),
873
+ shards .put (new ShardId (index , shardId ),
877
874
reason != null ? new ShardSnapshotStatus (nodeId , shardState , reason , generation ) :
878
875
new ShardSnapshotStatus (nodeId , shardState , generation ));
879
876
}
@@ -950,7 +947,7 @@ public static Entry fromXContent(XContentParser parser) throws IOException {
950
947
snapshot ,
951
948
includeGlobalState ,
952
949
partial ,
953
- State . fromValue ( state ) ,
950
+ state ,
954
951
indices ,
955
952
dataStreams ,
956
953
startTime ,
@@ -1203,6 +1200,25 @@ public static State fromValue(byte value) {
1203
1200
throw new IllegalArgumentException ("No snapshot state for value [" + value + "]" );
1204
1201
}
1205
1202
}
1203
+
1204
+ public static State fromString (String value ) {
1205
+ switch (value ) {
1206
+ case "INIT" :
1207
+ return INIT ;
1208
+ case "STARTED" :
1209
+ return STARTED ;
1210
+ case "SUCCESS" :
1211
+ return SUCCESS ;
1212
+ case "FAILED" :
1213
+ return FAILED ;
1214
+ case "ABORTED" :
1215
+ return ABORTED ;
1216
+ case "PARTIAL" :
1217
+ return PARTIAL ;
1218
+ default :
1219
+ throw new IllegalArgumentException ("No snapshot state for value [" + value + "]" );
1220
+ }
1221
+ }
1206
1222
}
1207
1223
1208
1224
private final List <Entry > entries ;
@@ -1311,6 +1327,12 @@ public XContentBuilder toXContent(XContentBuilder builder, ToXContent.Params par
1311
1327
}
1312
1328
1313
1329
public static SnapshotsInProgress fromXContent (XContentParser parser ) throws IOException {
1330
+ if (parser .currentToken () == null ) { // fresh parser? move to the first token
1331
+ parser .nextToken ();
1332
+ }
1333
+ if (parser .currentToken () == XContentParser .Token .START_OBJECT ) {
1334
+ parser .nextToken ();
1335
+ }
1314
1336
ensureFieldName (parser , parser .currentToken (), SNAPSHOTS );
1315
1337
ensureExpectedToken (XContentParser .Token .START_ARRAY , parser .nextToken (), parser );
1316
1338
List <Entry > entries = new ArrayList <>();
@@ -1380,5 +1402,26 @@ public static ShardState fromValue(byte value) {
1380
1402
throw new IllegalArgumentException ("No shard snapshot state for value [" + value + "]" );
1381
1403
}
1382
1404
}
1405
+
1406
+ public static ShardState fromString (String state ) {
1407
+ switch (state ) {
1408
+ case "INIT" :
1409
+ return INIT ;
1410
+ case "SUCCESS" :
1411
+ return SUCCESS ;
1412
+ case "FAILED" :
1413
+ return FAILED ;
1414
+ case "ABORTED" :
1415
+ return ABORTED ;
1416
+ case "MISSING" :
1417
+ return MISSING ;
1418
+ case "WAITING" :
1419
+ return WAITING ;
1420
+ case "QUEUED" :
1421
+ return QUEUED ;
1422
+ default :
1423
+ throw new IllegalArgumentException ("No shard snapshot state for value [" + state + "]" );
1424
+ }
1425
+ }
1383
1426
}
1384
1427
}
0 commit comments