@@ -44,7 +44,7 @@ public final class NodeValidator {
4444 byte [] sessionToken ;
4545 long sessionExpiration ;
4646 int features ;
47- Version version ;
47+ Version serverVersion ;
4848
4949 /**
5050 * Return first valid node referenced by seed host aliases. In most cases, aliases
@@ -226,7 +226,6 @@ private void validateAddress(Cluster cluster, InetAddress address, String tlsNam
226226 commands .add ("node" );
227227 commands .add ("partition-generation" );
228228 commands .add ("build" );
229- commands .add ("features" );
230229
231230 boolean validateCluster = cluster .validateClusterName ();
232231 if (validateCluster ) {
@@ -262,11 +261,11 @@ private void validateAddress(Cluster cluster, InetAddress address, String tlsNam
262261 validatePartitionGeneration (map );
263262 validateServerBuildVersion (map );
264263
265- boolean sendUserAgent = version .isGreaterOrEqual (Version .SERVER_VERSION_8_1 );
264+ boolean sendUserAgent = serverVersion .isGreaterOrEqual (Version .SERVER_VERSION_8_1 );
266265 if (sendUserAgent ) {
267266 Info .request (conn , "user-agent-set:value=" + getB64userAgent (cluster ));
268267 }
269- setFeatures (map );
268+ setFeatures (serverVersion );
270269
271270 if (validateCluster ) {
272271 validateClusterName (cluster , map );
@@ -308,49 +307,62 @@ private void validatePartitionGeneration(HashMap<String,String> map) {
308307
309308 private void validateServerBuildVersion (HashMap <String ,String > map ) {
310309 String build = map .get ("build" );
311- version = Version .convertStringToVersion (build , name , primaryAddress );
310+ serverVersion = Version .convertStringToVersion (build , name , primaryAddress );
312311 }
313312
314- private void setFeatures (HashMap <String ,String > map ) {
315- try {
316- String featuresString = map .get ("features" );
317- int begin = 0 ;
318- int end = 0 ;
313+ /*
314+ private void SetFeatures(Version serverVersion)
315+ {
316+ if (serverVersion >= Node.SERVER_VERSION_PSCAN)
317+ {
318+ features |= Node.HAS_PARTITION_SCAN;
319+ }
320+ else
321+ {
322+ // This client requires partition scan support. Partition scans were first
323+ // supported in server version 4.9. Do not allow any server node into the
324+ // cluster that is running server version < 4.9.
325+ if ((this.features & Node.HAS_PARTITION_SCAN) == 0)
326+ {
327+ throw new AerospikeException("Node " + this.name + ' ' + this.primaryHost +
328+ " version < 4.9. This client requires server version >= 4.9");
329+ }
330+ }
319331
320- while (end < featuresString .length ()) {
321- end = featuresString .indexOf (';' , begin );
332+ if (serverVersion >= Node.SERVER_VERSION_QUERY_SHOW)
333+ {
334+ features |= Node.HAS_QUERY_SHOW;
335+ }
322336
323- if (end < 0 ) {
324- end = featuresString .length ();
325- }
337+ if (serverVersion >= Node.SERVER_VERSION_PQUERY_BATCH_ANY)
338+ {
339+ features |= Node.HAS_BATCH_ANY;
340+ features |= Node.HAS_PARTITION_QUERY;
341+ }
342+ }
343+ */
326344
327- int len = end - begin ;
328345
329- if (featuresString .regionMatches (begin , "pscans" , 0 , len )) {
330- this .features |= Node .HAS_PARTITION_SCAN ;
331- }
332- else if (featuresString .regionMatches (begin , "query-show" , 0 , len )) {
333- this .features |= Node .HAS_QUERY_SHOW ;
334- }
335- else if (featuresString .regionMatches (begin , "batch-any" , 0 , len )) {
336- this .features |= Node .HAS_BATCH_ANY ;
337- }
338- else if (featuresString .regionMatches (begin , "pquery" , 0 , len )) {
339- this .features |= Node .HAS_PARTITION_QUERY ;
340- }
341- begin = end + 1 ;
346+ private void setFeatures (Version serverVersion ) {
347+ if (serverVersion .isGreaterOrEqual (Version .SERVER_VERSION_PSCAN )) {
348+ this .features |= Node .HAS_PARTITION_SCAN ;
349+ } else {
350+ // This client requires partition scan support. Partition scans were first
351+ // supported in server version 4.9. Do not allow any server node into the
352+ // cluster that is running server version < 4.9.
353+ if ((this .features & Node .HAS_PARTITION_SCAN ) == 0 ) {
354+ throw new AerospikeException ("Node " + this .name + ' ' + this .primaryHost +
355+ " version < 4.9. This client requires server version >= 4.9" );
342356 }
343357 }
344- catch (Throwable e ) {
345- // Unexpected exception. Use defaults.
358+
359+ if (serverVersion .isGreaterOrEqual (Version .SERVER_VERSION_QUERY_SHOW )) {
360+ features |= Node .HAS_QUERY_SHOW ;
346361 }
347362
348- // This client requires partition scan support. Partition scans were first
349- // supported in server version 4.9. Do not allow any server node into the
350- // cluster that is running server version < 4.9.
351- if ((this .features & Node .HAS_PARTITION_SCAN ) == 0 ) {
352- throw new AerospikeException ("Node " + this .name + ' ' + this .primaryHost +
353- " version < 4.9. This client requires server version >= 4.9" );
363+ if (serverVersion .isGreaterOrEqual (Version .SERVER_VERSION_PQUERY_BATCH_ANY )) {
364+ features |= Node .HAS_BATCH_ANY ;
365+ features |= Node .HAS_PARTITION_QUERY ;
354366 }
355367 }
356368
0 commit comments