Skip to content

Commit b7ab25f

Browse files
committed
SOLR-17582: Fix ClusterState serializing for older SolrJ versions (#3410)
(cherry picked from commit 50655d0)
1 parent e533162 commit b7ab25f

File tree

2 files changed

+35
-1
lines changed

2 files changed

+35
-1
lines changed

solr/core/src/java/org/apache/solr/servlet/HttpSolrCall.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1226,7 +1226,13 @@ public SolrVersion getUserAgentSolrVersion() {
12261226
return null;
12271227
}
12281228
try {
1229-
return SolrVersion.valueOf(header.substring(header.lastIndexOf(' ') + 1));
1229+
String userAgent = header.substring(header.lastIndexOf(' ') + 1);
1230+
if ("1.0".equals(userAgent)) {
1231+
userAgent = "1.0.0";
1232+
} else if ("2.0".equals(userAgent)) {
1233+
userAgent = "2.0.0";
1234+
}
1235+
return SolrVersion.valueOf(userAgent);
12301236
} catch (Exception e) {
12311237
// unexpected but let's not freak out
12321238
assert false : e.toString();

solr/solrj/src/test/org/apache/solr/client/solrj/impl/ClusterStateProviderTest.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,34 @@ public void testClusterStateProviderOldVersion() throws SolrServerException, IOE
235235
assertThat(
236236
clusterStateZk.getCollection("col2"), equalTo(clusterStateHttp.getCollection("col2")));
237237
}
238+
239+
try (var cspZk = zkClientClusterStateProvider();
240+
var cspHttp = http2ClusterStateProvider()) {
241+
// Even older SolrJ versionsg for non streamed response
242+
cspHttp
243+
.getHttpClient()
244+
.getHttpClient()
245+
.setUserAgentField(
246+
new HttpField(
247+
HttpHeader.USER_AGENT,
248+
"Solr[" + MethodHandles.lookup().lookupClass().getName() + "] " + "2.0"));
249+
250+
assertThat(cspHttp.getCollection("col1"), equalTo(cspZk.getCollection("col1")));
251+
252+
final var clusterStateZk = cspZk.getClusterState();
253+
final var clusterStateHttp = cspHttp.getClusterState();
254+
assertThat(
255+
clusterStateHttp.getLiveNodes(),
256+
containsInAnyOrder(clusterStateHttp.getLiveNodes().toArray()));
257+
assertEquals(2, clusterStateZk.size());
258+
assertEquals(clusterStateZk.size(), clusterStateHttp.size());
259+
assertThat(
260+
clusterStateHttp.collectionStream().collect(Collectors.toList()),
261+
containsInAnyOrder(clusterStateHttp.collectionStream().toArray()));
262+
263+
assertThat(
264+
clusterStateZk.getCollection("col2"), equalTo(clusterStateHttp.getCollection("col2")));
265+
}
238266
}
239267

240268
@Test

0 commit comments

Comments
 (0)