private static boolean containsCoordinatorResponse(Collection<PingData> rsps) { if (rsps == null || rsps.isEmpty()) return false; for (PingData rsp : rsps) { if (rsp.isCoord()) return true; } return false; }
/** * Creates a byte[] representation of the PingData, but DISCARDING the view it contains. * * @param data the PingData instance to serialize. * @return */ protected byte[] serializeWithoutView(PingData data) { final PingData clone = new PingData( data.getAddress(), data.isServer(), data.getLogicalName(), data.getPhysicalAddr()) .coord(data.isCoord()); try { return Util.streamableToByteBuffer(clone); } catch (Exception e) { log.error(Util.getMessage("ErrorSerializingPingData"), e); return null; } }
public void addResponse(PingData rsp, boolean overwrite) { if (rsp == null) return; promise.getLock().lock(); try { if (overwrite) ping_rsps.remove(rsp); // https://jira.jboss.org/jira/browse/JGRP-1179 int index = ping_rsps.indexOf(rsp); if (index == -1) { ping_rsps.add(rsp); promise.getCond().signalAll(); } else if (rsp.isCoord()) { PingData pr = ping_rsps.get(index); // Check if the already existing element is not server if (!pr.isCoord()) { ping_rsps.set(index, rsp); promise.getCond().signalAll(); } } } finally { promise.getLock().unlock(); } }
protected void write(List<PingData> list, OutputStream out) throws Exception { try { for (PingData data : list) { String logical_name = data.getLogicalName(); Address addr = data.getAddress(); PhysicalAddress phys_addr = data.getPhysicalAddr(); if (logical_name == null || addr == null || phys_addr == null) continue; out.write(logical_name.getBytes()); out.write(WHITESPACE); out.write(addressAsString(addr).getBytes()); out.write(WHITESPACE); out.write(phys_addr.toString().getBytes()); out.write(WHITESPACE); out.write( data.isCoord() ? String.format("T%n").getBytes() : String.format("F%n").getBytes()); } } finally { Util.close(out); } }
@Override protected void readAll(List<Address> members, String clustername, Responses responses) { try { List<String> objects = swiftClient.listObjects(container); for (String object : objects) { List<PingData> list = null; byte[] bytes = swiftClient.readObject(container, object); if ((list = read(new ByteArrayInputStream(bytes))) == null) { log.warn("failed reading " + object); continue; } for (PingData data : list) { if (members == null || members.contains(data.getAddress())) responses.addResponse(data, data.isCoord()); if (local_addr != null && !local_addr.equals(data.getAddress())) addDiscoveryResponseToCaches( data.getAddress(), data.getLogicalName(), data.getPhysicalAddr()); } } } catch (Exception e) { log.error("Error unmarshalling object", e); } }