Skip to content

Commit 50655d0

Browse files
SOLR-17582: Fix ClusterState serializing for older SolrJ versions (#3410)
1 parent c36283c commit 50655d0

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
@@ -1193,7 +1193,13 @@ private SolrVersion parseUserAgentSolrVersion() {
11931193
return null;
11941194
}
11951195
try {
1196-
return SolrVersion.valueOf(header.substring(header.lastIndexOf(' ') + 1));
1196+
String userAgent = header.substring(header.lastIndexOf(' ') + 1);
1197+
if ("1.0".equals(userAgent)) {
1198+
userAgent = "1.0.0";
1199+
} else if ("2.0".equals(userAgent)) {
1200+
userAgent = "2.0.0";
1201+
}
1202+
return SolrVersion.valueOf(userAgent);
11971203
} catch (Exception e) {
11981204
// unexpected but let's not freak out
11991205
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
@@ -233,6 +233,34 @@ public void testClusterStateProviderOldVersion() throws SolrServerException, IOE
233233
assertThat(
234234
clusterStateZk.getCollection("col2"), equalTo(clusterStateHttp.getCollection("col2")));
235235
}
236+
237+
try (var cspZk = zkClientClusterStateProvider();
238+
var cspHttp = http2ClusterStateProvider()) {
239+
// Even older SolrJ versionsg for non streamed response
240+
cspHttp
241+
.getHttpClient()
242+
.getHttpClient()
243+
.setUserAgentField(
244+
new HttpField(
245+
HttpHeader.USER_AGENT,
246+
"Solr[" + MethodHandles.lookup().lookupClass().getName() + "] " + "2.0"));
247+
248+
assertThat(cspHttp.getCollection("col1"), equalTo(cspZk.getCollection("col1")));
249+
250+
final var clusterStateZk = cspZk.getClusterState();
251+
final var clusterStateHttp = cspHttp.getClusterState();
252+
assertThat(
253+
clusterStateHttp.getLiveNodes(),
254+
containsInAnyOrder(clusterStateHttp.getLiveNodes().toArray()));
255+
assertEquals(2, clusterStateZk.size());
256+
assertEquals(clusterStateZk.size(), clusterStateHttp.size());
257+
assertThat(
258+
clusterStateHttp.collectionStream().toList(),
259+
containsInAnyOrder(clusterStateHttp.collectionStream().toArray()));
260+
261+
assertThat(
262+
clusterStateZk.getCollection("col2"), equalTo(clusterStateHttp.getCollection("col2")));
263+
}
236264
}
237265

238266
@Test

0 commit comments

Comments
 (0)