8000 batchRegisterInstance Why is there no recalculateRevision · Issue #11192 · alibaba/nacos · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content
batchRegisterInstance Why is there no recalculateRevision #11192
Closed
@E1se2t

Description

@E1se2t

在registerInstance方法中,ClientManager根据clientId获取客户端的信息,然后recalculateRevision方法重新计算了客户端的版本号

@Override
public void registerInstance(Service service, Instance instance, String clientId) throws NacosException {
NamingUtils.checkInstanceIsLegal(instance);
Service singleton = ServiceManager.getInstance().getSingleton(service);
if (!singleton.isEphemeral()) {
throw new NacosRuntimeException(NacosException.INVALID_PARAM,
String.format("Current service %s is persistent service, can't register ephemeral instance.",
singleton.getGroupedServiceName()));
}
Client client = clientManager.getClient(clientId);
if (!clientIsLegal(client, clientId)) {
return;
}
InstancePublishInfo instanceInfo = getPublishInfo(instance);
client.addServiceInstance(singleton, instanceInfo);
client.setLastUpdatedTime();
client.recalculateRevision();
NotifyCenter.publishEvent(new ClientOperationEvent.ClientRegisterServiceEvent(singleton, clientId));
NotifyCenter
.publishEvent(new MetadataEvent.InstanceMetadataEvent(singleton, instanceInfo.getMetadataId(), false));

但是我看batchRegisterInstance却没有这个recalculateRevision的操作,如果是批量注册的Instance,难道就不用重新计算客户端版本号了吗?

@Override
public void batchRegisterInstance(Service service, List<Instance> instances, String clientId) {
Service singleton = ServiceManager.getInstance().getSingleton(service);
if (!singleton.isEphemeral()) {
throw new NacosRuntimeException(NacosException.INVALID_PARAM,
String.format("Current service %s is persistent service, can't batch register ephemeral instance.",
singleton.getGroupedServiceName()));
}
Client client = clientManager.getClient(clientId);
if (!clientIsLegal(client, clientId)) {
return;
}
BatchInstancePublishInfo batchInstancePublishInfo = new BatchInstancePublishInfo();
List<InstancePublishInfo> resultList = new ArrayList<>();
for (Instance instance : instances) {
InstancePublishInfo instanceInfo = getPublishInfo(instance);
resultList.add(instanceInfo);
}
batchInstancePublishInfo.setInstancePublishInfos(resultList);
client.addServiceInstance(singleton, batchInstancePublishInfo);
client.setLastUpdatedTime();
NotifyCenter.publishEvent(new ClientOperationEvent.ClientRegisterServiceEvent(singleton, clientId));
NotifyCenter.publishEvent(
new MetadataEvent.InstanceMetadataEvent(singleton, batchInstancePublishInfo.getMetadataId(), false));

那Distro的DistroDataRequest发送gRpc去verifyData的时候,如果是批量注册的那些Instance,客户端版本号也没变,那这就算校验成功了吗?

@Override
public boolean verifyClient(DistroClientVerifyInfo verifyData) {
String clientId = verifyData.getClientId();
IpPortBasedClient client = clients.get(clientId);
if (null != client) {
// remote node of old version will always verify with zero revision
if (0 == verifyData.getRevision() || client.getRevision() == verifyData.getRevision()) {
NamingExecuteTaskDispatcher.getInstance()
.dispatchAndExecuteTask(clientId, new ClientBeatUpdateTask(client));
return true;
} else {
Loggers.DISTRO.info("[DISTRO-VERIFY-FAILED] IpPortBasedClient[{}] revision local={}, remote={}",
client.getClientId(), client.getRevision(), verifyData.getRevision());
}
}
return false;

batchRegisterInstance是不是也需要有recalculateRevision这个操作呢?

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/Namingkind/bugCategory issues or prs related to bug.

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      0