TShortHashSet tmp = new TShortHashSet(tagSet);
TShortHashSet tmp = new TShortHashSet(tagSet);
private TShortHashSet allocateSharerSet(int size) { if (freeSharerSetList == null) return new TShortHashSet(size); TShortHashSet sharers = freeSharerSetList.pollFirst(); if (sharers != null) return sharers; return new TShortHashSet(size); }
public BroadcastEntry(LineMessage message, Set<Short> nodes) { this.message = message; this.nodes = new TShortHashSet(nodes); this.nodes.remove(Comm.SERVER); // NOT TO SERVER LOG.debug("Awaiting ACKS for message {} from nodes {}", message, this.nodes); }
@Override public double compare(final short[] h1, final short[] h2) { TShortHashSet union = new TShortHashSet(h1); union.addAll(h2); TShortHashSet intersection = new TShortHashSet(h1); intersection.retainAll(h2.clone()); //retainAll sorts the input, so we need to make a copy return 1.0 - (((double)intersection.size()) / (double)union.size()); } },
@Override public double compare(final short[] h1, final short[] h2) { TShortHashSet union = new TShortHashSet(h1); union.addAll(h2); TShortHashSet intersection = new TShortHashSet(h1); intersection.retainAll(h2.clone()); //retainAll sorts the input, so we need to make a copy return 1.0 - (((double)intersection.size()) / (double)union.size()); } },
@Override public double compare(final SparseShortArray h1, final SparseShortArray h2) { short[] h1v = h1.values(); short[] h2v = h2.values(); TShortHashSet union = new TShortHashSet(h1v); union.addAll(h2v); if (h1v.length != h1.length || h2v.length != h2.length) union.add((short)0); TShortHashSet intersection = new TShortHashSet(h1v); intersection.retainAll(h2v); if (h1v.length != h1.length && h2v.length != h2.length) union.add((short)0); return 1.0 - (((double)intersection.size()) / (double)union.size()); } },
@Override public double compare(final SparseShortArray h1, final SparseShortArray h2) { short[] h1v = h1.values(); short[] h2v = h2.values(); TShortHashSet union = new TShortHashSet(h1v); union.addAll(h2v); if (h1v.length != h1.length || h2v.length != h2.length) union.add((short)0); TShortHashSet intersection = new TShortHashSet(h1v); intersection.retainAll(h2v); if (h1v.length != h1.length && h2v.length != h2.length) union.add((short)0); return 1.0 - (((double)intersection.size()) / (double)union.size()); } },
/** * Can block */ @Override protected synchronized void broadcast(Message message) { // synchronized for message ID ordering try { assert message.isBroadcast() && !message.isResponse(); assignMessageId(message); final boolean unicast = getNumPeerNodes() < minimumNodesToMulticast; final TShortHashSet nodes = new TShortHashSet(); for (NodePeer peer : peers.values()) { nodes.add(peer.node); peer.sendMessage(message, unicast); executor.submit(peer); } if (nodes.isEmpty()) { if (message instanceof LineMessage) { LOG.debug("No other nodes in cluster. Responding with NOT_FOUND to message {}", message); receive(Message.NOT_FOUND((LineMessage) message).setIncoming()); } return; } broadcastPeer.sendMessage(message, nodes, unicast); if (!unicast) executor.submit(broadcastPeer); } catch (InterruptedException ex) { LOG.error("InterruptedException", ex); throw new RuntimeException(ex); } }
@Override public Array<Boolean> distinct(int limit) { final TShortSet set = new TShortHashSet(limit); final ArrayBuilder<Boolean> builder = ArrayBuilder.of(2, Boolean.class); for (int i=0; i<length(); ++i) { final boolean value = getBoolean(i); if (set.add(value ? (short)1 : (short)0)) { builder.addBoolean(value); if (set.size() >= limit) { break; } } } return builder.toArray(); }
@Override public Array<Boolean> distinct(int limit) { final TShortSet set = new TShortHashSet(limit); final ArrayBuilder<Boolean> builder = ArrayBuilder.of(2, Boolean.class); for (int i=0; i<length(); ++i) { final boolean value = getBoolean(i); if (set.add(value ? (short)1 : (short)0)) { builder.addBoolean(value); if (set.size() >= limit) { break; } } } return builder.toArray(); }
private int handleMessagePutX(Message.PUTX msg, CacheLine line) throws IrrelevantStateException { relevantStates(line, State.I, State.S); if (line.version > msg.getVersion()) { LOG.warn("Got PUTX with version {} which is older than current version {}", msg.getVersion(), line.version); return LINE_NO_CHANGE; } final TShortHashSet sharers = new TShortHashSet((msg.getSharers() != null ? msg.getSharers().length : 0) + 1); if (msg.getSharers() != null) sharers.addAll(msg.getSharers()); if (hasServer && msg.getNode() != Comm.SERVER) sharers.add(Comm.SERVER); // this is so we make sure the server was notified for the ownership transfer. this is done by INV sharers.remove(myNodeId()); // don't INV myself int change = LINE_NO_CHANGE; change |= line.getState().isLessThan(State.O) ? LINE_OWNER_CHANGED : 0; change |= setState(line, sharers.isEmpty() ? State.E : State.O) ? LINE_STATE_CHANGED : 0; if (sharers.isEmpty()) change |= setOwner(line, myNodeId()) ? LINE_OWNER_CHANGED : 0; else setOwner(line, msg.getNode()); // We set owner to the PREVIOUS owner - used// change |= setOwner(line, cluster.getMyNodeId()) ? LINE_OWNER_CHANGED : 0; line.sharers.addAll(sharers); line.version = msg.getVersion(); writeData(line, (Object) msg.getData()); line.parts = (short) msg.getMessages(); setOwnerClock(line, msg); fireLineReceived(line); if (hasServer && msg.getNode() != Comm.SERVER) send(Message.INV(Comm.SERVER, line.id, msg.getNode())); return change; }