Example usage for org.apache.cassandra.streaming SessionInfo getTotalSizeToSend

List of usage examples for org.apache.cassandra.streaming SessionInfo getTotalSizeToSend

Introduction

In this page you can find the example usage for org.apache.cassandra.streaming SessionInfo getTotalSizeToSend.

Prototype

public long getTotalSizeToSend() 

Source Link

Usage

From source file:com.spotify.hdfs2cass.cassandra.thrift.ProgressIndicator.java

License:Open Source License

@Override
public void handleStreamEvent(StreamEvent event) {

    LOG.debug("Handling stream event");

    if (event.eventType == StreamEvent.Type.STREAM_PREPARED) {

        SessionInfo session = ((StreamEvent.SessionPreparedEvent) event).session;
        sessionsByHost.put(session.peer, session);
        LOG.info(String.format("Session to %s created", session.connecting.getHostAddress()));

    } else if (event.eventType == StreamEvent.Type.STREAM_COMPLETE) {

        StreamEvent.SessionCompleteEvent completionEvent = ((StreamEvent.SessionCompleteEvent) event);
        if (completionEvent.success) {
            LOG.info(String.format("Stream to %s successful.", completionEvent.peer.getHostAddress()));
        } else {//from  ww w . j a v  a  2s .c om
            LOG.info(String.format("Stream to %s failed.", completionEvent.peer.getHostAddress()));
        }
    } else if (event.eventType == StreamEvent.Type.FILE_PROGRESS) {

        ProgressInfo progressInfo = ((StreamEvent.ProgressEvent) event).progress;

        // update progress
        Set<ProgressInfo> progresses = progressByHost.get(progressInfo.peer);
        if (progresses == null) {
            progresses = Sets.newSetFromMap(Maps.<ProgressInfo, Boolean>newConcurrentMap());
            progressByHost.put(progressInfo.peer, progresses);
        }
        if (progresses.contains(progressInfo)) {
            progresses.remove(progressInfo);
        }
        progresses.add(progressInfo);

        // craft status update string
        StringBuilder sb = new StringBuilder();
        sb.append("progress: ");

        long totalProgress = 0;
        long totalSize = 0;
        for (Map.Entry<InetAddress, Set<ProgressInfo>> entry : progressByHost.entrySet()) {
            SessionInfo session = sessionsByHost.get(entry.getKey());

            long size = session.getTotalSizeToSend();
            long current = 0;
            int completed = 0;
            for (ProgressInfo progress : entry.getValue()) {
                if (progress.currentBytes == progress.totalBytes) {
                    completed++;
                }
                current += progress.currentBytes;
            }
            totalProgress += current;
            totalSize += size;
            sb.append("[").append(entry.getKey());
            sb.append(" ").append(completed).append("/").append(session.getTotalFilesToSend());
            sb.append(" (").append(size == 0 ? 100L : current * 100L / size).append("%)] ");
        }
        long time = System.nanoTime();
        long deltaTime = TimeUnit.NANOSECONDS.toMillis(time - lastTime);
        lastTime = time;
        long deltaProgress = totalProgress - lastProgress;
        lastProgress = totalProgress;

        sb.append("[total: ").append(totalSize == 0 ? 100L : totalProgress * 100L / totalSize).append("% - ");
        sb.append(mbPerSec(deltaProgress, deltaTime)).append("MB/s");
        sb.append(" (avg: ").append(mbPerSec(totalProgress, TimeUnit.NANOSECONDS.toMillis(time - start)))
                .append("MB/s)]");

        LOG.info(sb.toString());
    }
}

From source file:io.cassandrareaper.service.StreamFactory.java

License:Apache License

public static Stream newStream(String host, SessionInfo sessionInfo, long timeStamp) {

    final String peer = sessionInfo.peer.toString().replaceAll("/", "");

    final long sizeSent = sessionInfo.getTotalSizeSent();
    final long sizeReceived = sessionInfo.getTotalSizeReceived();

    Stream.Direction direction = Stream.Direction.BOTH;
    if (sizeReceived == 0 && sizeSent != 0) {
        direction = Stream.Direction.IN;
    }/*from  ww w .j a v a 2  s  .co  m*/
    if (sizeReceived != 0 && sizeSent == 0) {
        direction = Stream.Direction.OUT;
    }

    final String streamId = String.format("%s-%s-%s", host, direction, peer);

    final List<Stream.TableProgress> progressReceived = countProgressPerTable(sessionInfo.getReceivingFiles());
    final List<Stream.TableProgress> progressSent = countProgressPerTable(sessionInfo.getSendingFiles());

    return Stream.builder().withId(streamId).withHost(host).withPeer(peer).withDirection(direction)
            .withSizeToReceive(sessionInfo.getTotalSizeToReceive())
            .withSizeToSend(sessionInfo.getTotalSizeToSend()).withProgressSent(progressSent)
            .withProgressReceived(progressReceived).withSizeSent(sizeSent).withSizeReceived(sizeReceived)
            .withLastUpdated(timeStamp).withCompleted(sessionInfo.state == StreamSession.State.COMPLETE)
            .withSuccess(!sessionInfo.isFailed()).build();
}