本文首发于泊浮目的专栏: https://segmentfault.com/blog...
前言
随着ZStack的版本迭代,其可以掌管的资源也越来越多。但新增模块的结构却还是大致相同,此即是ZStack的经典设计模式——这套模式也被开发者称为ZStack三驾马车。
实例分析
以PrimaryStorage为例,其APIMsg的真正逻辑处理第一站就是PrimaryStorageManagerImpl
。
如果是对特定的PrimaryStorage进行操作,将会通过相应的Factory
得出对应类型并转发至相应的Base
:
private void passThrough(PrimaryStorageMessage pmsg) {
PrimaryStorageVO vo = dbf.findByUuid(pmsg.getPrimaryStorageUuid(), PrimaryStorageVO.class);
if (vo == null && allowedMessageAfterSoftDeletion.contains(pmsg.getClass())) {
PrimaryStorageEO eo = dbf.findByUuid(pmsg.getPrimaryStorageUuid(), PrimaryStorageEO.class);
vo = ObjectUtils.newAndCopy(eo, PrimaryStorageVO.class);
}
Message msg = (Message) pmsg;
if (vo == null) {
String err = String.format("Cannot find primary storage[uuid:%s], it may have been deleted", pmsg.getPrimaryStorageUuid());
bus.replyErrorByMessageType(msg, errf.instantiateErrorCode(SysErrors.RESOURCE_NOT_FOUND, err));
return;
}
PrimaryStorageFactory fa