diff --git a/compute/src/main/java/org/zstack/compute/allocator/HostAllocatorChain.java b/compute/src/main/java/org/zstack/compute/allocator/HostAllocatorChain.java index 2262251d02e..2ce76fa5e43 100755 --- a/compute/src/main/java/org/zstack/compute/allocator/HostAllocatorChain.java +++ b/compute/src/main/java/org/zstack/compute/allocator/HostAllocatorChain.java @@ -146,7 +146,10 @@ private void runFlow(AbstractHostAllocatorFlow flow) { } } catch (Throwable t) { logger.warn("unhandled throwable", t); - completion.fail(inerr(ORG_ZSTACK_COMPUTE_ALLOCATOR_10019, t.toString())); + String errMsg = t != null ? t.toString() : "unknown error"; + if (completion != null) { + completion.fail(inerr(ORG_ZSTACK_COMPUTE_ALLOCATOR_10019, errMsg)); + } } } diff --git a/compute/src/main/java/org/zstack/compute/host/HostBase.java b/compute/src/main/java/org/zstack/compute/host/HostBase.java index 38eb654804f..c53db5a2b68 100755 --- a/compute/src/main/java/org/zstack/compute/host/HostBase.java +++ b/compute/src/main/java/org/zstack/compute/host/HostBase.java @@ -1443,7 +1443,7 @@ public String getName() { @Override protected String getDeduplicateString() { - return String.format("connect-host-%s", self.getUuid()); + return String.format("connect-host-%s", self == null ? "unknown" : self.getUuid()); } }); } diff --git a/compute/src/main/java/org/zstack/compute/vm/VmCapabilitiesJudger.java b/compute/src/main/java/org/zstack/compute/vm/VmCapabilitiesJudger.java index 92054658fb2..d3ceeb603b8 100644 --- a/compute/src/main/java/org/zstack/compute/vm/VmCapabilitiesJudger.java +++ b/compute/src/main/java/org/zstack/compute/vm/VmCapabilitiesJudger.java @@ -53,6 +53,12 @@ private void checkPrimaryStorageCapabilities(VmCapabilities capabilities, VmInst q.add(PrimaryStorageVO_.uuid, SimpleQuery.Op.EQ, rootVolume.getPrimaryStorageUuid()); String type = q.findValue(); + if (type == null) { + capabilities.setSupportLiveMigration(false); + capabilities.setSupportVolumeMigration(false); + return; + } + PrimaryStorageType psType = PrimaryStorageType.valueOf(type); if (vm.getState() != VmInstanceState.Running) { diff --git a/core/src/main/java/org/zstack/core/db/UpdateQueryImpl.java b/core/src/main/java/org/zstack/core/db/UpdateQueryImpl.java index 6475b903c6e..b30adb194b5 100755 --- a/core/src/main/java/org/zstack/core/db/UpdateQueryImpl.java +++ b/core/src/main/java/org/zstack/core/db/UpdateQueryImpl.java @@ -54,7 +54,8 @@ public UpdateQuery set(SingularAttribute attr, Object val) { @Override public UpdateQuery condAnd(SingularAttribute attr, Op op, Object val) { if ((op == Op.IN || op == Op.NOT_IN) && !(val instanceof Collection)) { - throw new CloudRuntimeException(String.format("for operation IN or NOT IN, a Collection value is expected, but %s got", val.getClass())); + throw new CloudRuntimeException(String.format("for operation IN or NOT IN, a Collection value is expected, but %s got", + val == null ? "null" : val.getClass())); } Cond cond = new Cond(); diff --git a/core/src/main/java/org/zstack/core/log/LogSafeGson.java b/core/src/main/java/org/zstack/core/log/LogSafeGson.java index c3dcd26626c..13456c13bc0 100644 --- a/core/src/main/java/org/zstack/core/log/LogSafeGson.java +++ b/core/src/main/java/org/zstack/core/log/LogSafeGson.java @@ -208,6 +208,9 @@ private static JsonSerializer getSerializer() { } public static JsonElement toJsonElement(Object o) { + if (o == null) { + return JsonNull.INSTANCE; + } return logSafeGson.toJsonTree(o, getGsonType(o.getClass())); } diff --git a/header/src/main/java/org/zstack/header/vm/VmAbnormalLifeCycleStruct.java b/header/src/main/java/org/zstack/header/vm/VmAbnormalLifeCycleStruct.java index 43023821394..7da68329c09 100755 --- a/header/src/main/java/org/zstack/header/vm/VmAbnormalLifeCycleStruct.java +++ b/header/src/main/java/org/zstack/header/vm/VmAbnormalLifeCycleStruct.java @@ -72,7 +72,7 @@ boolean match(VmAbnormalLifeCycleStruct struct) { boolean match(VmAbnormalLifeCycleStruct struct) { return struct.getOriginalState() == VmInstanceState.Paused && struct.getCurrentState() == VmInstanceState.Stopped - && struct.getCurrentHostUuid().equals(struct.getOriginalHostUuid()); + && Objects.equals(struct.getCurrentHostUuid(), struct.getOriginalHostUuid()); } }, VmMigrateToAnotherHost { diff --git a/identity/src/main/java/org/zstack/identity/AuthorizationManager.java b/identity/src/main/java/org/zstack/identity/AuthorizationManager.java index fa50e2b9e8d..daa5152d1f7 100755 --- a/identity/src/main/java/org/zstack/identity/AuthorizationManager.java +++ b/identity/src/main/java/org/zstack/identity/AuthorizationManager.java @@ -116,6 +116,11 @@ public APIMessage intercept(APIMessage msg) throws ApiMessageInterceptionExcepti session = evaluateSession(msg); } + if (session == null) { + throw new ApiMessageInterceptionException(err(ORG_ZSTACK_IDENTITY_10012, IdentityErrors.INVALID_SESSION, + "evaluated session is null for message[%s]", msg.getMessageName())); + } + logger.trace(String.format("authorizing message[%s] with user[accountUuid:%s, uuid:%s] session", msg.getMessageName(), session.getAccountUuid(), diff --git a/plugin/ceph/src/main/java/org/zstack/storage/ceph/primary/CephPrimaryStorageBase.java b/plugin/ceph/src/main/java/org/zstack/storage/ceph/primary/CephPrimaryStorageBase.java index d80b40a1d6a..c3b01dc3c8b 100755 --- a/plugin/ceph/src/main/java/org/zstack/storage/ceph/primary/CephPrimaryStorageBase.java +++ b/plugin/ceph/src/main/java/org/zstack/storage/ceph/primary/CephPrimaryStorageBase.java @@ -3974,15 +3974,17 @@ public void done() { mon.connect(new Completion(releaseLock) { @Override public void success() { + String monUuid = mon.getSelf() == null ? "unknown" : mon.getSelf().getUuid(); logger.debug(String.format("successfully reconnected the mon[uuid:%s] of the ceph primary" + - " storage[uuid:%s, name:%s]", mon.getSelf().getUuid(), self.getUuid(), self.getName())); + " storage[uuid:%s, name:%s]", monUuid, self.getUuid(), self.getName())); releaseLock.done(); } @Override public void fail(ErrorCode errorCode) { + String monUuid = mon.getSelf() == null ? "unknown" : mon.getSelf().getUuid(); logger.warn(String.format("failed to reconnect the mon[uuid:%s] server of the ceph primary" + - " storage[uuid:%s, name:%s], %s", mon.getSelf().getUuid(), self.getUuid(), self.getName(), errorCode)); + " storage[uuid:%s, name:%s], %s", monUuid, self.getUuid(), self.getName(), errorCode)); releaseLock.done(); } }); diff --git a/plugin/ceph/src/main/java/org/zstack/storage/ceph/primary/CephPrimaryStorageMonBase.java b/plugin/ceph/src/main/java/org/zstack/storage/ceph/primary/CephPrimaryStorageMonBase.java index 90b6220d53a..7ca3e710291 100755 --- a/plugin/ceph/src/main/java/org/zstack/storage/ceph/primary/CephPrimaryStorageMonBase.java +++ b/plugin/ceph/src/main/java/org/zstack/storage/ceph/primary/CephPrimaryStorageMonBase.java @@ -141,7 +141,7 @@ public void fail(ErrorCode errorCode) { @Override public String getName() { - return String.format("connect-ceph-primary-storage-mon-%s", self.getUuid()); + return String.format("connect-ceph-primary-storage-mon-%s", self == null ? "unknown" : self.getUuid()); } }); } @@ -420,7 +420,7 @@ public void fail(ErrorCode errorCode) { @Override public String getName() { - return String.format("ping-ceph-primary-storage-%s", self.getUuid()); + return String.format("ping-ceph-primary-storage-%s", self == null ? "unknown" : self.getUuid()); } }); } diff --git a/plugin/localstorage/src/main/java/org/zstack/storage/primary/local/LocalStorageAllocatorFactory.java b/plugin/localstorage/src/main/java/org/zstack/storage/primary/local/LocalStorageAllocatorFactory.java index b72673df10a..785b4092144 100755 --- a/plugin/localstorage/src/main/java/org/zstack/storage/primary/local/LocalStorageAllocatorFactory.java +++ b/plugin/localstorage/src/main/java/org/zstack/storage/primary/local/LocalStorageAllocatorFactory.java @@ -385,7 +385,12 @@ private String getHostUuidFromAllocateMsg(AllocatePrimaryStorageSpaceMsg msg) { throw new OperationFailureException( argerr(ORG_ZSTACK_STORAGE_PRIMARY_LOCAL_10023, "invalid uri, correct example is file://$URL;hostUuid://$HOSTUUID or volume://$VOLUMEUUID ")); } - hostUuid = uriParsers.get(protocol).parseUri(msg.getRequiredInstallUri()).hostUuid; + AbstractUriParser parser = uriParsers.get(protocol); + if (parser == null) { + throw new OperationFailureException( + argerr(ORG_ZSTACK_STORAGE_PRIMARY_LOCAL_10023, "unsupported protocol[%s] in uri[%s]", protocol, msg.getRequiredInstallUri())); + } + hostUuid = parser.parseUri(msg.getRequiredInstallUri()).hostUuid; } if (hostUuid != null) { diff --git a/plugin/localstorage/src/main/java/org/zstack/storage/primary/local/LocalStorageKvmBackend.java b/plugin/localstorage/src/main/java/org/zstack/storage/primary/local/LocalStorageKvmBackend.java index 3b78ffab51b..f0b01f3ed48 100755 --- a/plugin/localstorage/src/main/java/org/zstack/storage/primary/local/LocalStorageKvmBackend.java +++ b/plugin/localstorage/src/main/java/org/zstack/storage/primary/local/LocalStorageKvmBackend.java @@ -3797,7 +3797,8 @@ public void success(CheckInitializedFileRsp rsp) { @Override public void fail(ErrorCode errorCode) { - completion.fail(operr(ORG_ZSTACK_STORAGE_PRIMARY_LOCAL_10081, "cannot find flag file [%s] on host [%s], because: %s", makeInitializedFilePath(), hostUuid, errorCode.getCause().getDetails())); + String causeDetails = errorCode.getCause() != null ? errorCode.getCause().getDetails() : errorCode.getDetails(); + completion.fail(operr(ORG_ZSTACK_STORAGE_PRIMARY_LOCAL_10081, "cannot find flag file [%s] on host [%s], because: %s", makeInitializedFilePath(), hostUuid, causeDetails)); } }); }