本文整理汇总了Java中org.apache.cassandra.utils.MerkleTree类的典型用法代码示例。如果您正苦于以下问题:Java MerkleTree类的具体用法?Java MerkleTree怎么用?Java MerkleTree使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
MerkleTree类属于org.apache.cassandra.utils包,在下文中一共展示了MerkleTree类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Java代码示例。
示例1: rowHash
import org.apache.cassandra.utils.MerkleTree; //导入依赖的package包/类
private MerkleTree.RowHash rowHash(AbstractCompactedRow row)
{
validated++;
// MerkleTree uses XOR internally, so we want lots of output bits here
CountingDigest digest = new CountingDigest(FBUtilities.newMessageDigest("SHA-256"));
row.update(digest);
// only return new hash for merkle tree in case digest was updated - see CASSANDRA-8979
if (digest.count > 0)
{
return new MerkleTree.RowHash(row.key.getToken(), digest.digest(), digest.count);
}
else
{
return null;
}
}
开发者ID:vcostet,项目名称:cassandra-kmean,代码行数:17,代码来源:Validator.java
示例2: addTree
import org.apache.cassandra.utils.MerkleTree; //导入依赖的package包/类
/**
* Add a new received tree and return the number of remaining tree to
* be received for the job to be complete.
*
* Callers may assume exactly one addTree call will result in zero remaining endpoints.
*
* @param endpoint address of the endpoint that sent response
* @param tree sent Merkle tree or null if validation failed on endpoint
* @return the number of responses waiting to receive
*/
public synchronized int addTree(InetAddress endpoint, MerkleTree tree)
{
// Wait for all request to have been performed (see #3400)
try
{
requestsSent.await();
}
catch (InterruptedException e)
{
throw new AssertionError("Interrupted while waiting for requests to be sent");
}
if (tree == null)
failed = true;
else
trees.add(new TreeResponse(endpoint, tree));
return treeRequests.completed(endpoint);
}
开发者ID:vcostet,项目名称:cassandra-kmean,代码行数:29,代码来源:RepairJob.java
示例3: run
import org.apache.cassandra.utils.MerkleTree; //导入依赖的package包/类
/**
* Compares our trees, and triggers repairs for any ranges that mismatch.
*/
public void run()
{
// compare trees, and collect differences
differences.addAll(MerkleTree.difference(r1.tree, r2.tree));
// choose a repair method based on the significance of the difference
String format = String.format("[repair #%s] Endpoints %s and %s %%s for %s", desc.sessionId, r1.endpoint, r2.endpoint, desc.columnFamily);
if (differences.isEmpty())
{
logger.info(String.format(format, "are consistent"));
// send back sync complete message
MessagingService.instance().sendOneWay(new SyncComplete(desc, r1.endpoint, r2.endpoint, true).createMessage(), FBUtilities.getLocalAddress());
return;
}
// non-0 difference: perform streaming repair
logger.info(String.format(format, "have " + differences.size() + " range(s) out of sync"));
performStreamingRepair();
}
开发者ID:vcostet,项目名称:cassandra-kmean,代码行数:23,代码来源:Differencer.java
示例4: testValidationCompleteWrite
import org.apache.cassandra.utils.MerkleTree; //导入依赖的package包/类
private void testValidationCompleteWrite() throws IOException
{
// empty validation
Validator v0 = new Validator(DESC, FBUtilities.getBroadcastAddress(), -1);
ValidationComplete c0 = new ValidationComplete(DESC, v0.tree);
// validation with a tree
IPartitioner p = new RandomPartitioner();
MerkleTree mt = new MerkleTree(p, FULL_RANGE, MerkleTree.RECOMMENDED_DEPTH, Integer.MAX_VALUE);
for (int i = 0; i < 10; i++)
mt.split(p.getRandomToken());
Validator v1 = new Validator(DESC, FBUtilities.getBroadcastAddress(), mt, -1);
ValidationComplete c1 = new ValidationComplete(DESC, v1.tree);
// validation failed
ValidationComplete c3 = new ValidationComplete(DESC);
testRepairMessageWrite("service.ValidationComplete.bin", c0, c1, c3);
}
开发者ID:pgaref,项目名称:ACaZoo,代码行数:20,代码来源:SerializationsTest.java
示例5: testTreeResponseWrite
import org.apache.cassandra.utils.MerkleTree; //导入依赖的package包/类
private void testTreeResponseWrite() throws IOException
{
// empty validation
AntiEntropyService.Validator v0 = new AntiEntropyService.Validator(Statics.req);
// validation with a tree
IPartitioner p = new RandomPartitioner();
MerkleTree mt = new MerkleTree(p, FULL_RANGE, MerkleTree.RECOMMENDED_DEPTH, Integer.MAX_VALUE);
for (int i = 0; i < 10; i++)
mt.split(p.getRandomToken());
AntiEntropyService.Validator v1 = new AntiEntropyService.Validator(Statics.req, mt);
DataOutputStream out = getOutput("service.TreeResponse.bin");
AntiEntropyService.Validator.serializer.serialize(v0, out, getVersion());
AntiEntropyService.Validator.serializer.serialize(v1, out, getVersion());
v0.createMessage().serialize(out, getVersion());
v1.createMessage().serialize(out, getVersion());
out.close();
// test serializedSize
testSerializedSize(v0, AntiEntropyService.Validator.serializer);
testSerializedSize(v1, AntiEntropyService.Validator.serializer);
}
开发者ID:dprguiuc,项目名称:Cassandra-Wasef,代码行数:24,代码来源:SerializationsTest.java
示例6: run
import org.apache.cassandra.utils.MerkleTree; //导入依赖的package包/类
/**
* Compares our trees, and triggers repairs for any ranges that mismatch.
*/
public void run()
{
// compare trees, and collect differences
differences.addAll(MerkleTree.difference(r1.tree, r2.tree));
// choose a repair method based on the significance of the difference
String format = String.format("[repair #%s] Endpoints %s and %s %%s for %s", desc.sessionId, r1.endpoint, r2.endpoint, desc.columnFamily);
if (differences.isEmpty())
{
logger.info(String.format(format, "are consistent"));
// send back sync complete message
MessagingService.instance().sendOneWay(new SyncComplete(desc, r1.endpoint, r2.endpoint, true).createMessage(), FBUtilities.getLocalAddress());
return;
}
// non-0 difference: perform streaming repair
logger.info(format, "have {} range(s) out of sync", differences.size());
performStreamingRepair();
}
开发者ID:mafernandez-stratio,项目名称:cassandra-cqlMod,代码行数:23,代码来源:Differencer.java
示例7: testTreeResponseWrite
import org.apache.cassandra.utils.MerkleTree; //导入依赖的package包/类
private void testTreeResponseWrite() throws IOException
{
AntiEntropyService.Validator v0 = new AntiEntropyService.Validator(Statics.req);
IPartitioner part = new RandomPartitioner();
MerkleTree mt = new MerkleTree(part, FULL_RANGE, MerkleTree.RECOMMENDED_DEPTH, Integer.MAX_VALUE);
List<Token> tokens = new ArrayList<Token>();
for (int i = 0; i < 10; i++)
{
Token t = part.getRandomToken();
tokens.add(t);
mt.split(t);
}
AntiEntropyService.Validator v1 = new AntiEntropyService.Validator(Statics.req, mt);
DataOutputStream out = getOutput("service.TreeResponse.bin");
AntiEntropyService.TreeResponseVerbHandler.SERIALIZER.serialize(v0, out, getVersion());
AntiEntropyService.TreeResponseVerbHandler.SERIALIZER.serialize(v1, out, getVersion());
Message.serializer().serialize(AntiEntropyService.TreeResponseVerbHandler.makeVerb(FBUtilities.getLocalAddress(), v0), out, getVersion());
Message.serializer().serialize(AntiEntropyService.TreeResponseVerbHandler.makeVerb(FBUtilities.getLocalAddress(), v1), out, getVersion());
out.close();
}
开发者ID:devdattakulkarni,项目名称:Cassandra-KVPM,代码行数:21,代码来源:SerializationsTest.java
示例8: prepare
import org.apache.cassandra.utils.MerkleTree; //导入依赖的package包/类
public void prepare(ColumnFamilyStore cfs, MerkleTree tree)
{
this.tree = tree;
if (!tree.partitioner().preservesOrder())
{
// You can't beat an even tree distribution for md5
tree.init();
}
else
{
List<DecoratedKey> keys = new ArrayList<>();
for (DecoratedKey sample : cfs.keySamples(desc.range))
{
assert desc.range.contains(sample.getToken()): "Token " + sample.getToken() + " is not within range " + desc.range;
keys.add(sample);
}
if (keys.isEmpty())
{
// use an even tree distribution
tree.init();
}
else
{
int numkeys = keys.size();
Random random = new Random();
// sample the column family using random keys from the index
while (true)
{
DecoratedKey dk = keys.get(random.nextInt(numkeys));
if (!tree.split(dk.getToken()))
break;
}
}
}
logger.debug("Prepared AEService tree of size {} for {}", tree.size(), desc);
ranges = tree.invalids();
}
开发者ID:vcostet,项目名称:cassandra-kmean,代码行数:40,代码来源:Validator.java
示例9: ValidationComplete
import org.apache.cassandra.utils.MerkleTree; //导入依赖的package包/类
public ValidationComplete(RepairJobDesc desc, MerkleTree tree)
{
super(Type.VALIDATION_COMPLETE, desc);
assert tree != null;
this.success = true;
this.tree = tree;
}
开发者ID:vcostet,项目名称:cassandra-kmean,代码行数:8,代码来源:ValidationComplete.java
示例10: serialize
import org.apache.cassandra.utils.MerkleTree; //导入依赖的package包/类
public void serialize(ValidationComplete message, DataOutputPlus out, int version) throws IOException
{
RepairJobDesc.serializer.serialize(message.desc, out, version);
out.writeBoolean(message.success);
if (message.success)
MerkleTree.serializer.serialize(message.tree, out, version);
}
开发者ID:vcostet,项目名称:cassandra-kmean,代码行数:8,代码来源:ValidationComplete.java
示例11: deserialize
import org.apache.cassandra.utils.MerkleTree; //导入依赖的package包/类
public ValidationComplete deserialize(DataInput in, int version) throws IOException
{
RepairJobDesc desc = RepairJobDesc.serializer.deserialize(in, version);
if (in.readBoolean())
{
MerkleTree tree = MerkleTree.serializer.deserialize(in, version);
return new ValidationComplete(desc, tree);
}
else
{
return new ValidationComplete(desc);
}
}
开发者ID:vcostet,项目名称:cassandra-kmean,代码行数:14,代码来源:ValidationComplete.java
示例12: serializedSize
import org.apache.cassandra.utils.MerkleTree; //导入依赖的package包/类
public long serializedSize(ValidationComplete message, int version)
{
long size = RepairJobDesc.serializer.serializedSize(message.desc, version);
size += TypeSizes.NATIVE.sizeof(message.success);
if (message.success)
size += MerkleTree.serializer.serializedSize(message.tree, version);
return size;
}
开发者ID:vcostet,项目名称:cassandra-kmean,代码行数:9,代码来源:ValidationComplete.java
示例13: testDifference
import org.apache.cassandra.utils.MerkleTree; //导入依赖的package包/类
@Test
public void testDifference() throws Throwable
{
Range<Token> range = new Range<>(partirioner.getMinimumToken(), partirioner.getRandomToken());
UUID parentRepairSession = UUID.randomUUID();
Keyspace keyspace = Keyspace.open("Keyspace1");
ColumnFamilyStore cfs = keyspace.getColumnFamilyStore("Standard1");
ActiveRepairService.instance.registerParentRepairSession(parentRepairSession, Arrays.asList(cfs), Arrays.asList(range));
RepairJobDesc desc = new RepairJobDesc(parentRepairSession, UUID.randomUUID(), "Keyspace1", "Standard1", range);
MerkleTree tree1 = createInitialTree(desc);
MerkleTree tree2 = createInitialTree(desc);
// change a range in one of the trees
Token token = partirioner.midpoint(range.left, range.right);
tree1.invalidate(token);
MerkleTree.TreeRange changed = tree1.get(token);
changed.hash("non-empty hash!".getBytes());
Set<Range<Token>> interesting = new HashSet<>();
interesting.add(changed);
// difference the trees
// note: we reuse the same endpoint which is bogus in theory but fine here
TreeResponse r1 = new TreeResponse(InetAddress.getByName("127.0.0.1"), tree1);
TreeResponse r2 = new TreeResponse(InetAddress.getByName("127.0.0.2"), tree2);
Differencer diff = new Differencer(desc, r1, r2);
diff.run();
// ensure that the changed range was recorded
assertEquals("Wrong differing ranges", interesting, new HashSet<>(diff.differences));
}
开发者ID:vcostet,项目名称:cassandra-kmean,代码行数:35,代码来源:DifferencerTest.java
示例14: createInitialTree
import org.apache.cassandra.utils.MerkleTree; //导入依赖的package包/类
private MerkleTree createInitialTree(RepairJobDesc desc)
{
MerkleTree tree = new MerkleTree(partirioner, desc.range, MerkleTree.RECOMMENDED_DEPTH, (int)Math.pow(2, 15));
tree.init();
for (MerkleTree.TreeRange r : tree.invalids())
{
r.ensureHashInitialised();
}
return tree;
}
开发者ID:vcostet,项目名称:cassandra-kmean,代码行数:11,代码来源:DifferencerTest.java
示例15: Validator
import org.apache.cassandra.utils.MerkleTree; //导入依赖的package包/类
/**
* Create Validator with default size of initial Merkle Tree.
*/
public Validator(RepairJobDesc desc, InetAddress initiator, int gcBefore)
{
this(desc,
initiator,
// TODO: memory usage (maxsize) should either be tunable per
// CF, globally, or as shared for all CFs in a cluster
new MerkleTree(DatabaseDescriptor.getPartitioner(), desc.range, MerkleTree.RECOMMENDED_DEPTH, (int)Math.pow(2, 15)),
gcBefore);
}
开发者ID:pgaref,项目名称:ACaZoo,代码行数:13,代码来源:Validator.java
示例16: rowHash
import org.apache.cassandra.utils.MerkleTree; //导入依赖的package包/类
private MerkleTree.RowHash rowHash(AbstractCompactedRow row)
{
validated++;
// MerkleTree uses XOR internally, so we want lots of output bits here
CountingDigest digest = new CountingDigest(FBUtilities.newMessageDigest("SHA-256"));
row.update(digest);
return new MerkleTree.RowHash(row.key.token, digest.digest(), digest.count);
}
开发者ID:pgaref,项目名称:ACaZoo,代码行数:9,代码来源:Validator.java
示例17: serialize
import org.apache.cassandra.utils.MerkleTree; //导入依赖的package包/类
public void serialize(ValidationComplete message, DataOutput out, int version) throws IOException
{
RepairJobDesc.serializer.serialize(message.desc, out, version);
out.writeBoolean(message.success);
if (message.success)
MerkleTree.serializer.serialize(message.tree, out, version);
}
开发者ID:pgaref,项目名称:ACaZoo,代码行数:8,代码来源:ValidationComplete.java
示例18: testDifference
import org.apache.cassandra.utils.MerkleTree; //导入依赖的package包/类
@Test
public void testDifference() throws Throwable
{
Range<Token> range = new Range<>(partirioner.getMinimumToken(), partirioner.getRandomToken());
RepairJobDesc desc = new RepairJobDesc(UUID.randomUUID(), "Keyspace1", "Standard1", range);
MerkleTree tree1 = createInitialTree(desc);
MerkleTree tree2 = createInitialTree(desc);
// change a range in one of the trees
Token token = partirioner.midpoint(range.left, range.right);
tree1.invalidate(token);
MerkleTree.TreeRange changed = tree1.get(token);
changed.hash("non-empty hash!".getBytes());
Set<Range<Token>> interesting = new HashSet<>();
interesting.add(changed);
// difference the trees
// note: we reuse the same endpoint which is bogus in theory but fine here
TreeResponse r1 = new TreeResponse(InetAddress.getByName("127.0.0.1"), tree1);
TreeResponse r2 = new TreeResponse(InetAddress.getByName("127.0.0.2"), tree2);
Differencer diff = new Differencer(desc, r1, r2);
diff.run();
// ensure that the changed range was recorded
assertEquals("Wrong differing ranges", interesting, new HashSet<>(diff.differences));
}
开发者ID:pgaref,项目名称:ACaZoo,代码行数:29,代码来源:DifferencerTest.java
示例19: rowHash
import org.apache.cassandra.utils.MerkleTree; //导入依赖的package包/类
private MerkleTree.RowHash rowHash(UnfilteredRowIterator partition)
{
validated++;
// MerkleTree uses XOR internally, so we want lots of output bits here
CountingDigest digest = new CountingDigest(FBUtilities.newMessageDigest("SHA-256"));
UnfilteredRowIterators.digest(null, partition, digest, MessagingService.current_version);
// only return new hash for merkle tree in case digest was updated - see CASSANDRA-8979
return digest.count > 0
? new MerkleTree.RowHash(partition.partitionKey().getToken(), digest.digest(), digest.count)
: null;
}
开发者ID:scylladb,项目名称:scylla-tools-java,代码行数:12,代码来源:Validator.java
示例20: testDifference
import org.apache.cassandra.utils.MerkleTree; //导入依赖的package包/类
@Test
public void testDifference() throws Throwable
{
Range<Token> range = new Range<>(partirioner.getMinimumToken(), partirioner.getRandomToken());
UUID parentRepairSession = UUID.randomUUID();
Keyspace keyspace = Keyspace.open(KEYSPACE1);
ColumnFamilyStore cfs = keyspace.getColumnFamilyStore("Standard1");
ActiveRepairService.instance.registerParentRepairSession(parentRepairSession, FBUtilities.getBroadcastAddress(), Arrays.asList(cfs), Arrays.asList(range), false, System.currentTimeMillis(), false);
RepairJobDesc desc = new RepairJobDesc(parentRepairSession, UUID.randomUUID(), KEYSPACE1, "Standard1", Arrays.asList(range));
MerkleTrees tree1 = createInitialTree(desc);
MerkleTrees tree2 = createInitialTree(desc);
// change a range in one of the trees
Token token = partirioner.midpoint(range.left, range.right);
tree1.invalidate(token);
MerkleTree.TreeRange changed = tree1.get(token);
changed.hash("non-empty hash!".getBytes());
Set<Range<Token>> interesting = new HashSet<>();
interesting.add(changed);
// difference the trees
// note: we reuse the same endpoint which is bogus in theory but fine here
TreeResponse r1 = new TreeResponse(InetAddress.getByName("127.0.0.1"), tree1);
TreeResponse r2 = new TreeResponse(InetAddress.getByName("127.0.0.2"), tree2);
LocalSyncTask task = new LocalSyncTask(desc, r1, r2, ActiveRepairService.UNREPAIRED_SSTABLE);
task.run();
// ensure that the changed range was recorded
assertEquals("Wrong differing ranges", interesting.size(), task.getCurrentStat().numberOfDifferences);
}
开发者ID:scylladb,项目名称:scylla-tools-java,代码行数:36,代码来源:LocalSyncTaskTest.java
注:本文中的org.apache.cassandra.utils.MerkleTree类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论