Skip to content

Commit 942f36e

Browse files
committed
handle when share context is disabled
Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com>
1 parent fdfcfe6 commit 942f36e

2 files changed

Lines changed: 17 additions & 2 deletions

File tree

framework/extensions/src/main/java/org/apache/cloudstack/framework/extensions/manager/ExtensionsShareManagerImpl.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
import com.cloud.utils.component.ManagerBase;
6363
import com.cloud.utils.concurrency.NamedThreadFactory;
6464
import com.cloud.utils.db.GlobalLock;
65+
import com.cloud.utils.exception.CloudRuntimeException;
6566

6667
public class ExtensionsShareManagerImpl extends ManagerBase implements ExtensionsShareManager {
6768

@@ -82,6 +83,7 @@ public class ExtensionsShareManagerImpl extends ManagerBase implements Extension
8283

8384
private ScheduledExecutorService extensionShareCleanupExecutor;
8485
private int shareLinkValidityInterval;
86+
private boolean serverShareEnabled = true;
8587

8688
protected Path getExtensionsSharePath() {
8789
String shareBaseDir = ServerPropertiesUtil.getShareBaseDirectory();
@@ -213,7 +215,10 @@ protected ArchiveInfo createArchiveForDownload(Extension extension) throws IOExc
213215
* @throws InvalidKeyException if the secret key is invalid
214216
*/
215217
protected String generateSignedArchiveUrl(ManagementServerHost managementServer, Path archivePath)
216-
throws DecoderException, NoSuchAlgorithmException, InvalidKeyException {
218+
throws DecoderException, NoSuchAlgorithmException, InvalidKeyException, CloudRuntimeException {
219+
if (!serverShareEnabled) {
220+
throw new CloudRuntimeException("Share context is disabled on this management server in server.properties");
221+
}
217222
final String baseUrl = getManagementServerBaseUrl(managementServer);
218223
final long expiresAtEpochSec = System.currentTimeMillis() / 1000L + shareLinkValidityInterval;
219224
final String secretKey = ServerPropertiesUtil.getShareSecret();
@@ -442,6 +447,7 @@ public boolean start() {
442447
initialDelay, shareLinkValidityInterval);
443448
extensionShareCleanupExecutor.scheduleWithFixedDelay(new ShareCleanupWorker(),
444449
initialDelay, shareLinkValidityInterval, TimeUnit.SECONDS);
450+
serverShareEnabled = ServerPropertiesUtil.getShareEnabled();
445451
return true;
446452
}
447453

@@ -468,7 +474,7 @@ public Pair<Boolean, String> syncExtension(Extension extension, ManagementServer
468474
String signedUrl;
469475
try {
470476
signedUrl = generateSignedArchiveUrl(sourceManagementServer, archiveInfo.getPath());
471-
} catch (DecoderException | NoSuchAlgorithmException | InvalidKeyException e) {
477+
} catch (DecoderException | NoSuchAlgorithmException | InvalidKeyException | CloudRuntimeException e) {
472478
String msg = "Failed to generate signed URL";
473479
logger.error("{} for {} using {}", msg, extension, sourceManagementServer, e);
474480
return new Pair<>(false, msg);

framework/extensions/src/test/java/org/apache/cloudstack/framework/extensions/manager/ExtensionsShareManagerImplTest.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,15 @@
5959
import org.mockito.Mockito;
6060
import org.mockito.Spy;
6161
import org.mockito.junit.MockitoJUnitRunner;
62+
import org.springframework.test.util.ReflectionTestUtils;
6263

6364
import com.cloud.agent.api.Answer;
6465
import com.cloud.cluster.ClusterManager;
6566
import com.cloud.serializer.GsonHelper;
6667
import com.cloud.utils.FileUtil;
6768
import com.cloud.utils.HttpUtils;
6869
import com.cloud.utils.Pair;
70+
import com.cloud.utils.exception.CloudRuntimeException;
6971

7072
@RunWith(MockitoJUnitRunner.class)
7173
public class ExtensionsShareManagerImplTest {
@@ -360,6 +362,13 @@ public void createArchiveForDownloadThrowsExceptionWhenPackingFails() throws IOE
360362
assertTrue(exception.getMessage().contains("Failed to create archive"));
361363
}
362364

365+
@Test(expected = CloudRuntimeException.class)
366+
public void generateSignedArchiveUrlThrowsExceptionONSHareContextDisabled() throws Exception {
367+
ReflectionTestUtils.setField(extensionsShareManager, "serverShareEnabled", false);
368+
extensionsShareManager.generateSignedArchiveUrl(mock(ManagementServerHost.class),
369+
Path.of("/share/extensions/test-archive.tgz"));
370+
}
371+
363372
@Test
364373
public void generateSignedArchiveUrlReturnsValidUrlWithSignature() throws Exception {
365374
ManagementServerHost managementServer = mock(ManagementServerHost.class);

0 commit comments

Comments
 (0)