blob: ef73eb95ff8b7e48cec26ce047166d575a8690dd [file] [log] [blame]
/*-
* Copyright (C) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
*
* This file was distributed by Oracle as part of a version of Oracle Berkeley
* DB Java Edition made available at:
*
* http://www.oracle.com/technetwork/database/database-technologies/berkeleydb/downloads/index.html
*
* Please see the LICENSE file included in the top-level directory of the
* appropriate version of Oracle Berkeley DB Java Edition for a copy of the
* license and additional information.
*/
package com.sleepycat.je.rep.impl.node;
import static com.sleepycat.je.rep.utilint.BinaryProtocolStatDefinition.N_BYTES_READ;
import static com.sleepycat.je.rep.utilint.BinaryProtocolStatDefinition.N_MESSAGES_READ;
import com.sleepycat.je.EnvironmentFailureException;
import com.sleepycat.je.StatsConfig;
import com.sleepycat.je.rep.utilint.BinaryProtocol.Message;
import com.sleepycat.je.utilint.StatGroup;
public class ReplicaFactory {
private static ReplicaType type = ReplicaType.DEFAULT;
private static long statsInterval = 0;
public enum ReplicaType {
DEFAULT,
NULL_REPLICA
}
public static void setReplicaType(ReplicaType t) {
type = t;
}
public static void setStatsInterval(long interval) {
statsInterval = interval;
}
public static Replica create(RepNode repNode, Replay replay) {
switch (type) {
case DEFAULT:
return new Replica(repNode, replay);
case NULL_REPLICA:
/**
* Create a replica which just eats messages. Used for testing
* network bandwidth.
*/
return
new Replica(repNode, replay) {
@Override
protected void doRunReplicaLoopInternalWork()
throws Exception {
long ctime = System.currentTimeMillis();
long opCount = 0;
while (true) {
opCount++;
@SuppressWarnings("unused")
Message message =
getProtocol().read(getReplicaFeederChannel());
if (statsInterval > 0 &&
(opCount % statsInterval) == 0) {
StatGroup stats = getProtocol().
getStats(StatsConfig.DEFAULT);
long bytesRead =
stats.getLong(N_BYTES_READ);
long messagesRead =
stats.getLong(N_MESSAGES_READ);
long elapsedTime =
System.currentTimeMillis() - ctime;
long bytesPerMilliSecond =
bytesRead / elapsedTime;
System.out.println
(" Bytes Read: " + bytesRead +
" Messages Read: " + messagesRead +
" BytesPerMSec: " + bytesPerMilliSecond +
" MS: " + elapsedTime);
ctime = System.currentTimeMillis();
}
}
}
};
default:
throw EnvironmentFailureException.unexpectedState
("unknown type passed to makeReplica: " + type);
}
}
}