瀏覽代碼

more resilient creation/deletion of networks

tags/v0.9.15
Jonathan Cobb 4 年之前
父節點
當前提交
2de0f7bf1e
共有 5 個文件被更改,包括 19 次插入8 次删除
  1. +12
    -3
      bubble-server/src/main/java/bubble/dao/bill/AccountPlanDAO.java
  2. +2
    -0
      bubble-server/src/main/java/bubble/model/cloud/BubbleNetwork.java
  3. +3
    -2
      bubble-server/src/main/java/bubble/resources/bill/AccountPlansResource.java
  4. +1
    -2
      bubble-server/src/main/java/bubble/service/cloud/NetworkMonitorService.java
  5. +1
    -1
      bubble-web

+ 12
- 3
bubble-server/src/main/java/bubble/dao/bill/AccountPlanDAO.java 查看文件

@@ -28,8 +28,7 @@ import java.util.List;

import static bubble.model.cloud.BubbleNetwork.validateHostname;
import static java.util.concurrent.TimeUnit.SECONDS;
import static org.cobbzilla.util.daemon.ZillaRuntime.background;
import static org.cobbzilla.util.daemon.ZillaRuntime.now;
import static org.cobbzilla.util.daemon.ZillaRuntime.*;
import static org.cobbzilla.util.system.Sleep.sleep;
import static org.cobbzilla.wizard.resources.ResourceUtil.invalidEx;
import static org.hibernate.criterion.Restrictions.*;
@@ -48,6 +47,12 @@ public class AccountPlanDAO extends AccountOwnedEntityDAO<AccountPlan> {
@Autowired private RefundService refundService;
@Autowired private BubbleConfiguration configuration;

@Override public AccountPlan findByAccountAndId(String accountUuid, String id) {
final AccountPlan byUuid = findByUniqueFields("account", accountUuid, "uuid", id);
if (byUuid != null) return byUuid;
return findByAccountAndIdAndNotDeleted(accountUuid, id);
}

public AccountPlan findByAccountAndNetwork(String accountUuid, String networkUuid) {
return findByUniqueFields("account", accountUuid, "network", networkUuid);
}
@@ -154,7 +159,11 @@ public class AccountPlanDAO extends AccountOwnedEntityDAO<AccountPlan> {

final BubbleNetwork network = networkDAO.findByUuid(accountPlan.getNetwork());
if (network != null && network.getState() != BubbleNetworkState.stopped) {
networkService.stopNetwork(network);
try {
networkService.stopNetwork(network);
} catch (Exception e) {
log.warn("delete: error stopping network: "+shortError(e));
}
}
update(accountPlan.setDeleted(now()).setEnabled(false));
if (accountPlan.getNetwork() == null && accountPlan.getDeletedNetwork() != null) {


+ 2
- 0
bubble-server/src/main/java/bubble/model/cloud/BubbleNetwork.java 查看文件

@@ -202,10 +202,12 @@ public class BubbleNetwork extends IdentifiableBase implements HasNetwork, HasBu
final String tryName = i == 0 ? name : name + i;
final BubbleNetwork network = networkDAO.findByNameAndDomainUuid(tryName, request.getDomain());
if (network != null && !network.getUuid().equals(request.getNetwork())) {
log.info("validateHostname: name "+tryName+" is ineligible (network="+network.getUuid()+") exists");
continue;
} else {
final Account acct = accountDAO.findByName(tryName);
if (acct != null && !acct.getUuid().equals(request.getAccount())) {
log.info("validateHostname: name "+tryName+" is ineligible (account="+acct.getUuid()+") exists (request.account="+request.getAccount()+")");
continue;
}
}


+ 3
- 2
bubble-server/src/main/java/bubble/resources/bill/AccountPlansResource.java 查看文件

@@ -42,6 +42,7 @@ import java.util.stream.Collectors;

import static bubble.ApiConstants.*;
import static bubble.model.cloud.BubbleNetwork.validateHostname;
import static org.cobbzilla.util.daemon.ZillaRuntime.empty;
import static org.cobbzilla.util.string.ValidationRegexes.HOST_PATTERN;
import static org.cobbzilla.util.string.ValidationRegexes.validateRegexMatches;
import static org.cobbzilla.wizard.resources.ResourceUtil.*;
@@ -77,11 +78,10 @@ public class AccountPlansResource extends AccountOwnedResource<AccountPlan, Acco
// do we have a geoLocation service?
final List<CloudService> geoLocationServices = cloudDAO.findByAccountAndType(request.getAccount(), CloudServiceType.geoLocation);
final String remoteHost = getRemoteHost(req);
for (CloudService geo : geoLocationServices) {
if (!empty(geoLocationServices)) {
try {
final GeoLocation location = geoService.locate(request.getAccount(), remoteHost);
if (configuration.isDisallowed(location.getCountry())) throw invalidEx("err.accountPlan.callerCountryDisallowed");
break;
} catch (Exception e) {
log.debug("canCreate: error geo-locating address "+remoteHost+": "+e);
}
@@ -105,6 +105,7 @@ public class AccountPlansResource extends AccountOwnedResource<AccountPlan, Acco
final ValidationResult errors = new ValidationResult();
if (!request.hasTimezone()) errors.addViolation("err.timezone.required");
if (!request.hasLocale()) errors.addViolation("err.locale.required");
request.setAccount(caller.getUuid());

if (request.hasSshKey()) {
final AccountSshKey sshKey = sshKeyDAO.findByAccountAndId(caller.getUuid(), request.getSshKey());


+ 1
- 2
bubble-server/src/main/java/bubble/service/cloud/NetworkMonitorService.java 查看文件

@@ -14,7 +14,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import static bubble.ApiConstants.ROOT_NETWORK_UUID;
import static java.util.concurrent.TimeUnit.HOURS;
import static java.util.concurrent.TimeUnit.MINUTES;
import static org.cobbzilla.util.daemon.ZillaRuntime.shortError;
import static org.cobbzilla.util.time.TimeUtil.formatDuration;
@@ -25,7 +24,7 @@ public class NetworkMonitorService extends SimpleDaemon {

private static final long STARTUP_DELAY = MINUTES.toMillis(1);
private static final long CHECK_INTERVAL = MINUTES.toMillis(30);
private static final long NO_NODES_GRACE_PERIOD = HOURS.toMillis(1);
private static final long NO_NODES_GRACE_PERIOD = MINUTES.toMillis(10);

@Override protected long getStartupDelay() { return STARTUP_DELAY; }
@Override protected long getSleepTime() { return CHECK_INTERVAL; }


+ 1
- 1
bubble-web

@@ -1 +1 @@
Subproject commit d0617bbadd003f5b65f1d712b5a84aa527ee841d
Subproject commit 0f08a7489d90ddca61c5cba053c3e6e8203a2e5d

Loading…
取消
儲存