Skip to content

Commit dbd3c06

Browse files
authored
Fix when duplication spi class found using SpiLoader (#3387)
1 parent cd02b1d commit dbd3c06

File tree

1 file changed

+11
-6
lines changed
  • sentinel-core/src/main/java/com/alibaba/csp/sentinel/spi

1 file changed

+11
-6
lines changed

sentinel-core/src/main/java/com/alibaba/csp/sentinel/spi/SpiLoader.java

+11-6
Original file line numberDiff line numberDiff line change
@@ -329,11 +329,11 @@ public void load() {
329329
try {
330330
urls = classLoader.getResources(fullFileName);
331331
} catch (IOException e) {
332-
fail("Error locating SPI configuration file, filename=" + fullFileName + ", classloader=" + classLoader, e);
332+
fail("Error locating SPI configuration file,filename=" + fullFileName + ",classloader=" + classLoader, e);
333333
}
334334

335335
if (urls == null || !urls.hasMoreElements()) {
336-
RecordLog.warn("No SPI configuration file, filename=" + fullFileName + ", classloader=" + classLoader);
336+
RecordLog.warn("No SPI configuration file,filename=" + fullFileName + ",classloader=" + classLoader);
337337
return;
338338
}
339339

@@ -371,8 +371,13 @@ public void load() {
371371
fail("class " + line + " not found", e);
372372
}
373373

374+
if (classMap.containsValue(clazz)) {
375+
RecordLog.warn("duplicate class found,className=" + clazz.getName() + ",SPI configuration file[" + url + "]");
376+
continue;
377+
}
378+
374379
if (!service.isAssignableFrom(clazz)) {
375-
fail("class " + clazz.getName() + "is not subtype of " + service.getName() + ",SPI configuration file=" + fullFileName);
380+
fail("class " + clazz.getName() + "is not subtype of " + service.getName() + ",SPI configuration file[" + url + "]");
376381
}
377382

378383
classList.add(clazz);
@@ -381,13 +386,13 @@ public void load() {
381386
if (classMap.containsKey(aliasName)) {
382387
Class<? extends S> existClass = classMap.get(aliasName);
383388
fail("Found repeat alias name for " + clazz.getName() + " and "
384-
+ existClass.getName() + ",SPI configuration file=" + fullFileName);
389+
+ existClass.getName() + ",SPI configuration file[" + url + "]");
385390
}
386391
classMap.put(aliasName, clazz);
387392

388393
if (spi != null && spi.isDefault()) {
389394
if (defaultClass != null) {
390-
fail("Found more than one default Provider, SPI configuration file=" + fullFileName);
395+
fail("Found more than one default Provider,className=" + clazz.getName() + ",SPI configuration file[" + url + "]");
391396
}
392397
defaultClass = clazz;
393398
}
@@ -400,7 +405,7 @@ public void load() {
400405
, spi == null ? 0 : spi.order());
401406
}
402407
} catch (IOException e) {
403-
fail("error reading SPI configuration file", e);
408+
fail("error reading SPI configuration file[" + url + "]", e);
404409
} finally {
405410
closeResources(in, br);
406411
}

0 commit comments

Comments
 (0)