@Override public boolean equals(Object o) { if(!(o instanceof CHKBlock)) return false; CHKBlock block = (CHKBlock) o; if(!chk.equals(block.chk)) return false; if(!Arrays.equals(data, block.data)) return false; if(!Arrays.equals(headers, block.headers)) return false; if(hashIdentifier != block.hashIdentifier) return false; return true; }
public void senderTransferEnds(NodeCHK key, RequestSender requestSender) { synchronized(this) { if(!senderTransferring) // Already unlocked. This is okay. return; senderTransferring = false; assert(this.sender != null && this.sender.get() == requestSender); assert(this.key != null && this.key.equals(key)); this.key = null; } tracker.removeTransferringSender(key, requestSender); }
private void checkDecodedBlock(int i, byte[] data) { ClientCHK key = getKey(i); if(key == null) { Logger.error(this, "Key not found"); failOffThread(new FetchException(FetchExceptionMode.INTERNAL_ERROR, "Key not found")); return; } ClientCHKBlock block = encodeBlock(key, data); String decoded = i >= dataBlockCount ? "Encoded" : "Decoded"; if(block == null || !key.getNodeCHK().equals(block.getKey())) { Logger.error(this, decoded+" cross-segment block "+i+" failed!"); failOffThread(new FetchException(FetchExceptionMode.SPLITFILE_DECODE_ERROR, decoded+" cross-segment block does not match expected key")); return; } else { reportBlockToSegmentOffThread(i, key, block, data); } }