• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Java MerkleTree类代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了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;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Java LoggingStateChangeListener类代码示例发布时间:2022-05-22
下一篇:
Java WorldGenDesertWells类代码示例发布时间:2022-05-22
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap