Skip to content

Commit d788ca4

Browse files
committed
Merge tag 'v2.3.2' into dongnan_merge_v2.3.2
# Conflicts: # .github/workflows/linux_unit_test.yml # .github/workflows/windows_unit_test.yml # pom.xml # sofa-ark-bom/pom.xml # sofa-ark-parent/core-impl/archive/src/main/java/com/alipay/sofa/ark/loader/DirectoryContainerArchive.java # sofa-ark-parent/core-impl/archive/src/test/java/com/alipay/sofa/ark/loader/EmbedClassPathArchiveTest.java # sofa-ark-parent/core-impl/archive/src/test/java/com/alipay/sofa/ark/loader/jar/ZipInflaterInputStreamTest.java # sofa-ark-parent/core-impl/archive/src/test/java/com/alipay/sofa/ark/loader/test/jar/CentralDirectoryFileHeaderTest.java # sofa-ark-parent/core-impl/archive/src/test/java/com/alipay/sofa/ark/loader/test/jar/JarFileTest.java # sofa-ark-parent/core-impl/archive/src/test/resources/pom.xml # sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/ArkContainer.java # sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/model/BizModel.java # sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/pipeline/HandleArchiveStage.java # sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/service/extension/ExtensionLoaderServiceImpl.java # sofa-ark-parent/core/common/pom.xml # sofa-ark-parent/support/ark-maven-plugin/src/main/java/com/alipay/sofa/ark/boot/mojo/MavenUtils.java # sofa-ark-parent/support/ark-maven-plugin/src/main/java/com/alipay/sofa/ark/boot/mojo/ModuleSlimConfig.java # sofa-ark-parent/support/ark-maven-plugin/src/main/java/com/alipay/sofa/ark/boot/mojo/RepackageMojo.java # sofa-ark-parent/support/ark-maven-plugin/src/main/java/com/alipay/sofa/ark/boot/mojo/utils/ParseUtils.java # sofa-ark-parent/support/ark-maven-plugin/src/test/java/com/alipay/sofa/ark/boot/mojo/RepackageMojoTest.java # sofa-ark-parent/support/ark-maven-plugin/src/test/resources/baseDir/conf/ark/bootstrap.properties # sofa-ark-parent/support/ark-maven-plugin/src/test/resources/baseDir/conf/ark/bootstrap.yml # sofa-ark-parent/support/ark-plugin-maven-plugin/src/main/resources/META-INF/maven/plugin.xml # sofa-ark-parent/support/ark-springboot-integration/ark-compatible-springboot1/pom.xml # sofa-ark-parent/support/ark-springboot-integration/ark-compatible-springboot1/src/main/java/com/alipay/sofa/ark/springboot1/web/ArkTomcatEmbeddedServletContainerFactory.java # sofa-ark-parent/support/ark-springboot-integration/ark-compatible-springboot1/src/main/resources/META-INF/spring.factories # sofa-ark-parent/support/ark-springboot-integration/ark-compatible-springboot1/src/test/java/com/alipay/sofa/ark/test/springboot1/IntrospectBizEndpointOnArkDisabledTest.java # sofa-ark-parent/support/ark-springboot-integration/ark-compatible-springboot1/src/test/java/com/alipay/sofa/ark/test/springboot1/IntrospectBizEndpointOnArkEnabledTest.java # sofa-ark-parent/support/ark-springboot-integration/ark-compatible-springboot2/src/main/java/com/alipay/sofa/ark/springboot2/web/SwitchClassLoaderFilter.java # sofa-ark-parent/support/ark-springboot-integration/ark-springboot-starter/pom.xml # sofa-ark-parent/support/ark-springboot-integration/ark-springboot-starter/src/main/java/com/alipay/sofa/ark/springboot/ArkAutoConfiguration.java # sofa-ark-parent/support/ark-springboot-integration/ark-springboot-starter/src/main/java/com/alipay/sofa/ark/springboot/ArkServletAutoConfiguration.java # sofa-ark-parent/support/ark-springboot-integration/ark-springboot-starter/src/main/java/com/alipay/sofa/ark/springboot/ArkServletLegacyAutoConfiguration.java # sofa-ark-parent/support/ark-springboot-integration/ark-springboot-starter/src/main/java/com/alipay/sofa/ark/springboot/listener/ArkDeployStaticBizListener.java # sofa-ark-parent/support/ark-springboot-integration/ark-springboot-starter/src/main/java/com/alipay/sofa/ark/springboot/web/ArkCompositeReactorHttpHandlerAdapter.java # sofa-ark-parent/support/ark-springboot-integration/ark-springboot-starter/src/main/java/com/alipay/sofa/ark/springboot/web/ArkNettyReactiveWebServerFactory.java # sofa-ark-parent/support/ark-springboot-integration/ark-springboot-starter/src/main/resources/META-INF/spring.factories # sofa-ark-parent/support/ark-springboot-integration/ark-springboot-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports # sofa-ark-parent/support/ark-springboot-integration/ark-springboot-starter/src/test/java/com/alipay/sofa/ark/springboot/listener/ArkDeployStaticBizListenerTest.java # sofa-ark-parent/support/ark-springboot-integration/ark-springboot-starter/src/test/java/com/alipay/sofa/ark/test/ArkBootRunnerTest.java # sofa-ark-parent/support/ark-springboot-integration/ark-springboot-starter/src/test/java/com/alipay/sofa/ark/test/MultiArkBootRunnerTest.java # sofa-ark-parent/support/ark-support-starter/pom.xml # sofa-ark-plugin/netty-ark-plugin/pom.xml # sofa-ark-plugin/pom.xml # sofa-ark-plugin/web-ark-plugin/pom.xml # sofa-ark-plugin/web-ark-plugin/src/main/java/com/alipay/sofa/ark/web/embed/tomcat/SwitchClassLoaderAutoConfiguration.java
2 parents 247f1c5 + c008301 commit d788ca4

File tree

39 files changed

+167
-42
lines changed

39 files changed

+167
-42
lines changed

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
</modules>
1515

1616
<properties>
17-
<sofa.ark.version>3.1.10</sofa.ark.version>
18-
<sofa.ark.version.old>3.1.9</sofa.ark.version.old>
17+
<sofa.ark.version>3.1.11</sofa.ark.version>
18+
<sofa.ark.version.old>3.1.10</sofa.ark.version.old>
1919
<project.encoding>UTF-8</project.encoding>
2020
<java.version>17</java.version>
2121
<license.maven.plugin>3.0</license.maven.plugin>

sofa-ark-bom/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
<artifactId>sofa-ark-bom</artifactId>
1313
<packaging>pom</packaging>
14+
<name>${project.groupId}:${project.artifactId}</name>
1415

1516
<properties>
1617
<log4j.version>2.0.11</log4j.version>

sofa-ark-parent/assembly/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
</parent>
99

1010
<artifactId>sofa-ark-all</artifactId>
11+
<name>${project.groupId}:${project.artifactId}</name>
1112

1213
<properties>
1314
<sofa.ark.name>sofa-ark-all</sofa.ark.name>

sofa-ark-parent/core-impl/archive/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
</parent>
99

1010
<artifactId>sofa-ark-archive</artifactId>
11+
<name>${project.groupId}:${project.artifactId}</name>
1112

1213
<dependencies>
1314

sofa-ark-parent/core-impl/archive/src/test/java/com/alipay/sofa/ark/loader/jar/ZipInflaterInputStreamTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ public void testFill() throws Exception {
3333
new ByteArrayInputStream(new byte[0]), 0);
3434
assertEquals(0, zipInflaterInputStream.available());
3535
zipInflaterInputStream.fill();
36+
3637
Field field = ZipInflaterInputStream.class.getDeclaredField("extraBytesWritten");
3738
field.setAccessible(true);
3839
assertEquals(true, field.get(zipInflaterInputStream));

sofa-ark-parent/core-impl/container/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
</parent>
99

1010
<artifactId>sofa-ark-container</artifactId>
11+
<name>${project.groupId}:${project.artifactId}</name>
1112

1213
<dependencies>
1314

sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/model/BizModel.java

Lines changed: 35 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -50,15 +50,16 @@
5050
import java.net.URL;
5151
import java.nio.file.Files;
5252
import java.nio.file.Paths;
53-
import java.util.ArrayList;
5453
import java.util.Date;
54+
import java.util.ArrayList;
5555
import java.util.HashSet;
5656
import java.util.LinkedHashSet;
5757
import java.util.List;
5858
import java.util.Map;
5959
import java.util.Set;
6060
import java.util.concurrent.ConcurrentHashMap;
6161
import java.util.concurrent.CopyOnWriteArrayList;
62+
import java.util.concurrent.locks.ReentrantLock;
6263

6364
import static com.alipay.sofa.ark.spi.constant.Constants.BIZ_TEMP_WORK_DIR_RECYCLE_FILE_SUFFIX;
6465
import static com.alipay.sofa.ark.spi.constant.Constants.ACTIVATE_MULTI_BIZ_VERSION_ENABLE;
@@ -379,31 +380,42 @@ private void doStart(String[] args, Map<String, String> envs) throws Throwable {
379380

380381
BizManagerService bizManagerService = ArkServiceContainerHolder.getContainer().getService(
381382
BizManagerService.class);
383+
ReentrantLock bizLock = bizManagerService.getBizLock(bizName);
382384

383-
// case0: active the first module as activated
384-
if (bizManagerService.getActiveBiz(bizName) == null) {
385-
setBizState(BizState.ACTIVATED, StateChangeReason.STARTED);
386-
return;
387-
}
385+
// lock the bizName to ensure biz with same name install in sequence
386+
bizLock.lock();
387+
try {
388388

389-
// case1: support multiple version biz as activated: always activate the new version and keep the old module activated
390-
boolean activateMultiBizVersion = Boolean.parseBoolean(ArkConfigs.getStringValue(
391-
ACTIVATE_MULTI_BIZ_VERSION_ENABLE, "false"));
392-
if (activateMultiBizVersion) {
393-
setBizState(BizState.ACTIVATED, StateChangeReason.STARTED);
394-
return;
395-
}
389+
// case0: active the first module as activated
390+
if (bizManagerService.getActiveBiz(bizName) == null) {
391+
setBizState(BizState.ACTIVATED, StateChangeReason.STARTED);
392+
return;
393+
}
394+
395+
// case1: support multiple version biz as activated: always activate the new version and keep the old module activated
396+
boolean activateMultiBizVersion = Boolean.parseBoolean(ArkConfigs.getStringValue(
397+
ACTIVATE_MULTI_BIZ_VERSION_ENABLE, "false"));
398+
if (activateMultiBizVersion) {
399+
setBizState(BizState.ACTIVATED, StateChangeReason.STARTED);
400+
return;
401+
}
396402

397-
// case2: always activate the new version and deactivate the old module according to ACTIVATE_NEW_MODULE config
398-
if (Boolean.getBoolean(Constants.ACTIVATE_NEW_MODULE)) {
399-
Biz currentActiveBiz = bizManagerService.getActiveBiz(bizName);
400-
((BizModel) currentActiveBiz).setBizState(BizState.DEACTIVATED,
401-
StateChangeReason.SWITCHED, String.format("switch to new biz %s", getIdentity()));
402-
setBizState(BizState.ACTIVATED, StateChangeReason.STARTED,
403-
String.format("switch from old biz: %s", currentActiveBiz.getIdentity()));
404-
} else {
405-
// case3: always deactivate the new version and keep old module activated according to ACTIVATE_NEW_MODULE config
406-
setBizState(BizState.DEACTIVATED, StateChangeReason.STARTED, "start but is deactivated");
403+
// case2: always activate the new version and deactivate the old module according to ACTIVATE_NEW_MODULE config
404+
if (Boolean.getBoolean(Constants.ACTIVATE_NEW_MODULE)) {
405+
Biz currentActiveBiz = bizManagerService.getActiveBiz(bizName);
406+
((BizModel) currentActiveBiz).setBizState(BizState.DEACTIVATED,
407+
StateChangeReason.SWITCHED,
408+
String.format("switch to new biz %s", getIdentity()));
409+
setBizState(BizState.ACTIVATED, StateChangeReason.STARTED,
410+
String.format("switch from old biz: %s", currentActiveBiz.getIdentity()));
411+
} else {
412+
// case3: always deactivate the new version and keep old module activated according to ACTIVATE_NEW_MODULE config
413+
setBizState(BizState.DEACTIVATED, StateChangeReason.STARTED,
414+
"start but is deactivated");
415+
}
416+
} finally {
417+
// ensure the lock will be released, avoid deadlock
418+
bizLock.unlock();
407419
}
408420
}
409421

sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/service/biz/BizManagerServiceImpl.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030

3131
import java.util.*;
3232
import java.util.concurrent.ConcurrentHashMap;
33+
import java.util.concurrent.locks.ReentrantLock;
3334

3435
/**
3536
* Service Implementation to manager ark biz
@@ -42,6 +43,15 @@ public class BizManagerServiceImpl implements BizManagerService {
4243

4344
private final ConcurrentHashMap<String, ConcurrentHashMap<String, Biz>> bizRegistration = new ConcurrentHashMap<>();
4445

46+
private final ConcurrentHashMap<String, ReentrantLock> bizLocks = new ConcurrentHashMap<>();
47+
48+
@Override
49+
public ReentrantLock getBizLock(String bizName) {
50+
AssertUtils.isFalse(StringUtils.isEmpty(bizName), "Biz name must not be empty.");
51+
bizLocks.putIfAbsent(bizName, new ReentrantLock());
52+
return bizLocks.get(bizName);
53+
}
54+
4555
@Override
4656
public boolean registerBiz(Biz biz) {
4757
AssertUtils.assertNotNull(biz, "Biz must not be null.");

sofa-ark-parent/core-impl/container/src/main/java/com/alipay/sofa/ark/container/service/classloader/BizClassLoader.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -199,8 +199,8 @@ protected Class<?> preLoadClass(String className) throws ArkLoaderException {
199199
classloaderService, bizManagerService.getBizByIdentity(bizIdentity));
200200
} catch (Throwable throwable) {
201201
throw new ArkLoaderException(String.format(
202-
"Pre find class %s occurs an error via biz ClassLoaderHook: %s.", className,
203-
bizClassLoaderHook), throwable);
202+
"Pre find class %s occurs an error via biz %s ClassLoaderHook: %s.", className,
203+
bizIdentity, bizClassLoaderHook), throwable);
204204
}
205205
}
206206

@@ -212,8 +212,8 @@ protected Class<?> postLoadClass(String className) throws ArkLoaderException {
212212
classloaderService, bizManagerService.getBizByIdentity(bizIdentity));
213213
} catch (Throwable throwable) {
214214
throw new ArkLoaderException(String.format(
215-
"Post find class %s occurs an error via biz ClassLoaderHook: %s.", className,
216-
bizClassLoaderHook), throwable);
215+
"Post find class %s occurs an error via biz %s ClassLoaderHook: %s.", className,
216+
bizIdentity, bizClassLoaderHook), throwable);
217217
}
218218
}
219219

sofa-ark-parent/core-impl/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
</parent>
99

1010
<artifactId>sofa-ark-core-impl</artifactId>
11+
<name>${project.groupId}:${project.artifactId}</name>
1112
<packaging>pom</packaging>
1213

1314
<modules>

0 commit comments

Comments
 (0)