sendLocalNodeInfo(nodeID) {
		const info = this.broker.getLocalNodeInfo();

		const payload = Object.assign(
			{
				ver: this.broker.PROTOCOL_VERSION,
				sender: this.broker.nodeID
			},
			info
		);

		const key = this.INFO_KEY;
		const seq = this.localNode.seq;
		let leaseInfo = this.leaseInfo;

		const p =
			!nodeID && this.broker.options.disableBalancer
				? this.transit.tx.makeBalancedSubscriptions()
				: this.Promise.resolve();
		return p
			.then(() => {
				if (leaseInfo) {
					if (seq != this.lastInfoSeq) {
						const p = leaseInfo.revoke();
						leaseInfo = null;
						return p;
					}
				}
			})
			.then(() => {
				if (!leaseInfo) {
					leaseInfo = this.client.lease(60);

					//Handle lease-lost event. Release lease when lost. Next heartbeat will request a new lease
					leaseInfo.on("lost", err => {
						this.logger.warn(
							"Lost info lease. Dropping lease and retrying info-send. Error:",
							err.message
						);
						leaseInfo.release();
						this.leaseInfo = null;
						// if broker is connected, send local node info immediately. Otherwise it is sent on reconnect.
						if (this.broker.transit.connected) {
							this.sendLocalNodeInfo(nodeID);
						}
					});

					return leaseInfo
						.grant() // Waiting for the lease creation on the server
						.then(() => (this.leaseInfo = leaseInfo));
				}
			})
			.then(() => leaseInfo.put(key).value(this.serializer.serialize(payload, P.PACKET_INFO)))
			.then(() => {
				this.lastInfoSeq = seq;

				// Sending a new heartbeat because it contains the `seq`
				if (!nodeID) return this.beat();
			})
			.catch(err => {
				this.logger.error("Unable to send INFO to etcd server", err);

				this.broker.broadcastLocal("$discoverer.error", {
					error: err,
					module: "discoverer",
					type: C.FAILED_SEND_INFO
				});
			});
	}
Local service registry has been changed. We should notify remote nodes.
@param {String} nodeID