This commit is contained in:
Daman Arora 2026-01-22 09:06:30 -05:00 committed by GitHub
commit 740886e30d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 48 additions and 1 deletions

View File

@ -400,7 +400,9 @@ public class DefaultEndPointSelector implements EndPointSelector {
}
if (object instanceof TemplateInfo) {
TemplateInfo tmplInfo = (TemplateInfo)object;
if (store.getScope().getScopeType() == ScopeType.ZONE && store.getScope().getScopeId() == null && tmplInfo.getTemplateType() == TemplateType.SYSTEM) {
if (tmplInfo.getTemplateType() == TemplateType.SYSTEM &&
(store.getScope().getScopeType() == ScopeType.REGION ||
(store.getScope().getScopeType() == ScopeType.ZONE && store.getScope().getScopeId() == null))) {
return LocalHostEndpoint.getEndpoint(); // for bootstrap system vm template downloading to region image store
}
}

View File

@ -1249,6 +1249,10 @@ public class SecondaryStorageManagerImpl extends ManagerBase implements Secondar
protected void addSecondaryStorageServerAddressToBuffer(StringBuilder buffer, List<DataStore> dataStores, String vmName) {
List<String> addresses = new ArrayList<>();
for (DataStore dataStore: dataStores) {
// S3 and other object stores may not have a URL, so better to skip them
if (dataStore == null || dataStore.getTO() == null || dataStore.getTO().getUrl() == null) {
continue;
}
String url = dataStore.getTO().getUrl();
String[] urlArray = url.split("/");

View File

@ -117,6 +117,45 @@ public class SecondaryStorageManagerImplTest {
runAddSecondaryStorageServerAddressToBufferTest(addresses, StringUtils.join(List.of(randomIp1, randomIp2), ","));
}
@Test
public void testAddSecondaryStorageServerAddressToBufferWithNullEntries() {
String randomIp1 = InetAddresses.fromInteger(secureRandom.nextInt()).getHostAddress();
String randomIp2 = InetAddresses.fromInteger(secureRandom.nextInt()).getHostAddress();
List<DataStore> dataStores = new ArrayList<>();
DataStore validStore1 = Mockito.mock(DataStore.class);
DataStoreTO validStoreTO1 = Mockito.mock(DataStoreTO.class);
when(validStoreTO1.getUrl()).thenReturn(String.format("http://%s", randomIp1));
when(validStore1.getTO()).thenReturn(validStoreTO1);
dataStores.add(validStore1);
dataStores.add(null);
DataStore nullToStore = Mockito.mock(DataStore.class);
when(nullToStore.getTO()).thenReturn(null);
dataStores.add(nullToStore);
DataStore nullUrlStore = Mockito.mock(DataStore.class);
DataStoreTO nullUrlStoreTO = Mockito.mock(DataStoreTO.class);
when(nullUrlStoreTO.getUrl()).thenReturn(null);
when(nullUrlStore.getTO()).thenReturn(nullUrlStoreTO);
dataStores.add(nullUrlStore);
DataStore validStore2 = Mockito.mock(DataStore.class);
DataStoreTO validStoreTO2 = Mockito.mock(DataStoreTO.class);
when(validStoreTO2.getUrl()).thenReturn(String.format("http://%s", randomIp2));
when(validStore2.getTO()).thenReturn(validStoreTO2);
dataStores.add(validStore2);
StringBuilder builder = new StringBuilder();
secondaryStorageManager.addSecondaryStorageServerAddressToBuffer(builder, dataStores, "VM");
String result = builder.toString();
result = result.contains("=") ? result.split("=")[1] : null;
assertEquals(StringUtils.join(List.of(randomIp1, randomIp2), ","), result);
}
@Test
public void testCreateSecondaryStorageVm_New() {
long dataCenterId = 1L;

View File

@ -114,6 +114,8 @@ public final class S3Utils {
LOGGER.debug(format("Setting the end point for S3 client with access key %1$s to %2$s.", clientOptions.getAccessKey(), clientOptions.getEndPoint()));
client.setEndpoint(clientOptions.getEndPoint());
// Enable path-style access for S3-compatible storage
client.setS3ClientOptions(com.amazonaws.services.s3.S3ClientOptions.builder().setPathStyleAccess(true).build());
}
TRANSFERMANAGER_ACCESSKEY_MAP.put(clientOptions.getAccessKey(), new TransferManager(client));