5050import org .hyperledger .fabric .sdk .transaction .TransactionContext ;
5151
5252import static java .lang .String .format ;
53+ import static org .hyperledger .fabric .sdk .helper .Utils .toHexString ;
5354
5455public class ServiceDiscovery {
5556 private static final Log logger = LogFactory .getLog (ServiceDiscovery .class );
@@ -114,11 +115,17 @@ class SDNetwork {
114115 long discoveryTime ;
115116
116117 void addTlsCert (String mspid , byte [] cert ) {
118+ if (IS_TRACE_LEVEL ) {
119+ logger .trace (format ("Channel %s service discovery MSPID %s adding TLSCert %s" , channelName , mspid , toHexString (cert )));
120+ }
117121 tlsCerts .computeIfAbsent (mspid , k -> new LinkedList <>()).add (cert );
118122
119123 }
120124
121125 void addTlsIntermCert (String mspid , byte [] cert ) {
126+ if (IS_TRACE_LEVEL ) {
127+ logger .trace (format ("Channel %s service discovery MSPID %s adding intermediate TLSCert %s" , channelName , mspid , toHexString (cert )));
128+ }
122129 tlsIntermCerts .computeIfAbsent (mspid , k -> new LinkedList <>()).add (cert );
123130
124131 }
@@ -173,21 +180,31 @@ Set<String> getChaincodesNames() {
173180
174181 }
175182
176- Collection <byte []> getTlsCerts (String mspid ) {
183+ Collection <byte []> getTlsCerts (final String mspid ) {
184+
177185 final Collection <byte []> bytes = tlsCerts .get (mspid );
178186 if (null == bytes ) {
187+ logger .debug (format ("Channel %s no tls ca certs for mspid: %s" , channelName , mspid ));
179188 return Collections .emptyList ();
180189
181190 }
191+ if (bytes .isEmpty ()) {
192+ logger .debug (format ("Channel %s no tls ca certs for mspid: %s" , channelName , mspid ));
193+ }
182194 return Collections .unmodifiableCollection (bytes );
183195 }
184196
185197 Collection <byte []> getTlsIntermediateCerts (String mspid ) {
186198 final Collection <byte []> bytes = tlsIntermCerts .get (mspid );
199+
187200 if (null == bytes ) {
201+ logger .debug (format ("Channel %s no tls intermediary ca certs for mspid: %s" , channelName , mspid ));
188202 return Collections .emptyList ();
189203
190204 }
205+ if (bytes .isEmpty ()) {
206+ logger .debug (format ("Channel %s no tls intermediary ca certs for mspid: %s" , channelName , mspid ));
207+ }
191208 return Collections .unmodifiableCollection (bytes );
192209
193210 }
@@ -211,7 +228,7 @@ SDNetwork networkDiscovery(TransactionContext ltransactionContext, boolean force
211228 }
212229 ret = null ;
213230
214- for (Peer serviceDiscoveryPeer : speers ) {
231+ for (final Peer serviceDiscoveryPeer : speers ) {
215232
216233 try {
217234
@@ -306,9 +323,19 @@ SDNetwork networkDiscovery(TransactionContext ltransactionContext, boolean force
306323
307324 Protocol .Endpoints value = i .getValue ();
308325 for (Protocol .Endpoint l : value .getEndpointList ()) {
309- logger .trace (format ("Channel %s discovered orderer MSPID: %s, endpoint: %s:%s" , channelName , mspid , l .getHost (), l .getPort ()));
326+ logger .trace (format ("Channel: %s peer: %s discovered orderer MSPID: %s, endpoint: %s:%s" , channelName , serviceDiscoveryPeer , mspid , l .getHost (), l .getPort ()));
310327 String endpoint = (l .getHost () + ":" + l .getPort ()).trim ().toLowerCase ();
311328
329+ SDOrderer discoveredAlready = ordererEndpoints .get (endpoint );
330+ if (discoveredAlready != null ) {
331+ if (!mspid .equals (discoveredAlready .getMspid ())) {
332+ logger .error (format ("Service discovery in channel: %s, peer: %s found Orderer endpoint: %s with two mspids: '%s', '%s'" , channelName , serviceDiscoveryPeer , endpoint , mspid , discoveredAlready .getMspid ()));
333+ continue ; // report it and ignore.
334+ }
335+ logger .debug (format ("Service discovery in channel: %s, peer: %s found Orderer endpoint: %s mspid: %s discovered twice" , channelName , serviceDiscoveryPeer , endpoint , mspid ));
336+ continue ;
337+ }
338+
312339 final SDOrderer sdOrderer = new SDOrderer (mspid , endpoint , lsdNetwork .getTlsCerts (mspid ), lsdNetwork .getTlsIntermediateCerts (mspid ));
313340
314341 ordererEndpoints .put (sdOrderer .getEndPoint (), sdOrderer );
@@ -322,12 +349,24 @@ SDNetwork networkDiscovery(TransactionContext ltransactionContext, boolean force
322349
323350 for (Map .Entry <String , Protocol .Peers > peers : membership .getPeersByOrgMap ().entrySet ()) {
324351 final String mspId = peers .getKey ();
325- Protocol .Peers peer = peers .getValue ();
352+ final Protocol .Peers peer = peers .getValue ();
326353
327354 for (Protocol .Peer pp : peer .getPeersList ()) {
328355
329356 SDEndorser ppp = new SDEndorser (pp , lsdNetwork .getTlsCerts (mspId ), lsdNetwork .getTlsIntermediateCerts (mspId ));
330- logger .trace (format ("Channel %s discovered peer MSPID: %s, endpoint: %s" , channelName , mspId , ppp .getEndpoint ()));
357+
358+ SDEndorser discoveredAlready = lsdNetwork .endorsers .get (ppp .getEndpoint ());
359+ if (null != discoveredAlready ) {
360+ if (!mspId .equals (discoveredAlready .getMspid ())) {
361+ logger .error (format ("Service discovery in channel: %s, peer: %s, found endorser endpoint: %s with two mspids: '%s', '%s'" , channelName , serviceDiscoveryPeer , ppp .getEndpoint (), mspId , discoveredAlready .getMspid ()));
362+ continue ; // report it and ignore.
363+ }
364+ logger .debug (format ("Service discovery in channel %s peer: %s found Endorser endpoint: %s mspid: %s discovered twice" , channelName , serviceDiscoveryPeer , ppp .getEndpoint (), mspId ));
365+ continue ;
366+ }
367+
368+ logger .trace (format ("Channel %s peer: %s discovered peer mspid group: %s, endpoint: %s, mspid: %s" , channelName , serviceDiscoveryPeer , mspId , ppp .getEndpoint (), ppp .getMspid ()));
369+
331370 lsdNetwork .endorsers .put (ppp .getEndpoint (), ppp );
332371
333372 }
0 commit comments