Package org.apache.hedwig.protocol.PubSubProtocol

Examples of org.apache.hedwig.protocol.PubSubProtocol.LedgerRanges


            }, ctx);
        }

        void processTopicLedgersNodeData(byte[] data, int version) {

            final LedgerRanges ranges;
            try {
                ranges = LedgerRanges.parseFrom(data);
            } catch (InvalidProtocolBufferException e) {
                String msg = "Ledger ranges for topic:" + topic.toStringUtf8() + " could not be deserialized";
                logger.error(msg, e);
                cb.operationFailed(ctx, new PubSubException.UnexpectedConditionException(msg));
                return;
            }

            Iterator<LedgerRange> lrIterator = ranges.getRangesList().iterator();
            TopicInfo topicInfo = new TopicInfo();

            long startOfLedger = 1;

            while (lrIterator.hasNext()) {
View Full Code Here


        for (int i = 1; i <= 100; i++) {
            pub.publish(topic, Message.newBuilder().setBody(
                                ByteString.copyFromUtf8(String.valueOf(i))).build());
        }
        LedgerRanges r = LedgerRanges.parseFrom(bktb.getZooKeeperClient().getData(ledgersPath, false, null));
        assertEquals("Should only have 1 ledger yet", 1, r.getRangesList().size());
        long firstLedger = r.getRangesList().get(0).getLedgerId();

        stopHubServers();
        startHubServers();

        pub.publish(topic, Message.newBuilder().setBody(
                            ByteString.copyFromUtf8(String.valueOf(0xdeadbeef))).build());

        r = LedgerRanges.parseFrom(bktb.getZooKeeperClient().getData(ledgersPath, false, null));
        assertEquals("Should have 2 ledgers after restart", 2, r.getRangesList().size());

        for (int i = 100; i <= 200; i++) {
            pub.publish(topic, Message.newBuilder().setBody(
                                ByteString.copyFromUtf8(String.valueOf(i))).build());
        }
        Thread.sleep(5000); // give GC a chance to happen

        r = LedgerRanges.parseFrom(bktb.getZooKeeperClient().getData(ledgersPath, false, null));
        long secondLedger = r.getRangesList().get(0).getLedgerId();

        assertEquals("Should only have 1 ledger after GC", 1, r.getRangesList().size());

        // ensure original ledger doesn't exist
        String firstLedgerPath = String.format("/ledgers/L%010d", firstLedger);
        String secondLedgerPath = String.format("/ledgers/L%010d", secondLedger);
        assertNull("Ledger should not exist", bktb.getZooKeeperClient().exists(firstLedgerPath, false));
View Full Code Here

        private void parseAndReturnTopicLedgerRanges(ByteString topic, byte[] data, Version version,
                Callback<Versioned<LedgerRanges>> callback, Object ctx) {
            try {
                LedgerRanges.Builder rangesBuilder = LedgerRanges.newBuilder();
                TextFormat.merge(new String(data, UTF8), rangesBuilder);
                LedgerRanges lr = rangesBuilder.build();
                Versioned<LedgerRanges> ranges = new Versioned<LedgerRanges>(lr, version);
                callback.operationFinished(ctx, ranges);
            } catch (ParseException e) {
                StringBuilder sb = new StringBuilder();
                sb.append("Ledger ranges for topic ").append(topic.toStringUtf8())
View Full Code Here

        if (!syncObj.isSuccess()) {
            throw syncObj.exception;
        }

        LedgerRanges ranges = syncObj.value;
        if (null == ranges) {
            return null;
        }
        List<LedgerRange> results = new ArrayList<LedgerRange>();
        List<LedgerRange> lrs = ranges.getRangesList();
        long startSeqId = 1L;
        if (!lrs.isEmpty()) {
            LedgerRange range = lrs.get(0);
            if (!range.hasStartSeqIdIncluded() && range.hasEndSeqIdIncluded()) {
                long ledgerId = range.getLedgerId();
View Full Code Here

        Assert.assertEquals(LedgerRanges.getDefaultInstance(), ranges.getValue());

        LedgerRange lastRange = LedgerRange.newBuilder().setLedgerId(1).build();
        LedgerRanges.Builder builder = LedgerRanges.newBuilder();
        builder.addRanges(lastRange);
        LedgerRanges newRanges = builder.build();

        // write existed persistence info with null version
        tpManager.writeTopicPersistenceInfo(topic, newRanges, Version.NEW,
                                            writeCallback, null);
        res = writeCallback.queue.take();
        Assert.assertNotNull(res.right());
        Assert.assertTrue(res.right() instanceof PubSubException.TopicPersistenceInfoExistsException);

        // write existed persistence info with right version
        tpManager.writeTopicPersistenceInfo(topic, newRanges, v1,
                                            writeCallback, null);
        res = writeCallback.queue.take();
        Assert.assertEquals(null, res.right());
        Version v2 = res.left();
        Assert.assertEquals(Version.Occurred.AFTER, v2.compare(v1));

        // read persistence info
        tpManager.readTopicPersistenceInfo(topic, readCallback, null);
        ranges = readCallback.queue.take().left();
        Assert.assertEquals(Version.Occurred.CONCURRENTLY, v2.compare(ranges.getVersion()));
        Assert.assertEquals(newRanges, ranges.getValue());

        lastRange = LedgerRange.newBuilder().setLedgerId(2).build();
        builder = LedgerRanges.newBuilder();
        builder.addRanges(lastRange);
        LedgerRanges newRanges2 = builder.build();

        // write existed persistence info with bad version
        tpManager.writeTopicPersistenceInfo(topic, newRanges2, v1,
                                            writeCallback, null);
        res = writeCallback.queue.take();
View Full Code Here

        for (int i = 1; i <= 100; i++) {
            pub.publish(topic, Message.newBuilder().setBody(
                                ByteString.copyFromUtf8(String.valueOf(i))).build());
        }
        LedgerRanges r = LedgerRanges.parseFrom(bktb.getZooKeeperClient().getData(ledgersPath, false, null));
        assertEquals("Should only have 1 ledger yet", 1, r.getRangesList().size());
        long firstLedger = r.getRangesList().get(0).getLedgerId();

        stopHubServers();
        startHubServers();

        pub.publish(topic, Message.newBuilder().setBody(
                            ByteString.copyFromUtf8(String.valueOf(0xdeadbeef))).build());

        r = LedgerRanges.parseFrom(bktb.getZooKeeperClient().getData(ledgersPath, false, null));
        assertEquals("Should have 2 ledgers after restart", 2, r.getRangesList().size());

        for (int i = 100; i <= 200; i++) {
            pub.publish(topic, Message.newBuilder().setBody(
                                ByteString.copyFromUtf8(String.valueOf(i))).build());
        }
        Thread.sleep(5000); // give GC a chance to happen

        r = LedgerRanges.parseFrom(bktb.getZooKeeperClient().getData(ledgersPath, false, null));
        long secondLedger = r.getRangesList().get(0).getLedgerId();

        assertEquals("Should only have 1 ledger after GC", 1, r.getRangesList().size());

        // ensure original ledger doesn't exist
        String firstLedgerPath = String.format("/ledgers/L%010d", firstLedger);
        String secondLedgerPath = String.format("/ledgers/L%010d", secondLedger);
        assertNull("Ledger should not exist", bktb.getZooKeeperClient().exists(firstLedgerPath, false));
View Full Code Here

                }
            }
            builder.addRanges(topicInfo.currentLedgerRange.range);

            if (!keysToRemove.isEmpty()) {
                final LedgerRanges newRanges = builder.build();
                tpManager.writeTopicPersistenceInfo(
                topic, newRanges, topicInfo.ledgerRangesVersion, new Callback<Version>() {
                    public void operationFinished(Object ctx, Version newVersion) {
                        // Finally, all done
                        for (Long k : keysToRemove) {
View Full Code Here

     *          Topic name
     * @return ledger ranges forming the topic
     * @throws Exception
     */
    public List<LedgerRange> getTopicLedgers(ByteString topic) throws Exception {
        LedgerRanges ranges = null;
        try {
            Stat stat = new Stat();
            byte[] ledgersData = zk.getData(ledgersPath(topic), false, stat);
            if (null != ledgersData) {
                ranges = LedgerRanges.parseFrom(ledgersData);
            }
        } catch (KeeperException.NoNodeException nne) {
        }
        if (null == ranges) {
            return null;
        }
        List<LedgerRange> lrs = ranges.getRangesList();
        if (lrs.isEmpty()) {
            return lrs;
        }
        // try to check last ledger (it may still open)
        LedgerRange lastRange = lrs.get(lrs.size() - 1);
View Full Code Here

                }
            }
            builder.addRanges(topicInfo.currentLedgerRange.range);

            if (needsUpdate) {
                final LedgerRanges newRanges = builder.build();
                updateLedgerRangesNode(topic, newRanges, topicInfo.ledgerRangesZnodeVersion,
                                       new Callback<Integer>() {
                                           public void operationFinished(Object ctx, Integer newVersion) {
                                               // Finally, all done
                                               for (Long k : keysToRemove) {
View Full Code Here

            }, ctx);
        }

        void processTopicLedgersNodeData(byte[] data, int version) {

            final LedgerRanges ranges;
            try {
                ranges = LedgerRanges.parseFrom(data);
            } catch (InvalidProtocolBufferException e) {
                String msg = "Ledger ranges for topic:" + topic.toStringUtf8() + " could not be deserialized";
                logger.error(msg, e);
                cb.operationFailed(ctx, new PubSubException.UnexpectedConditionException(msg));
                return;
            }

            Iterator<LedgerRange> lrIterator = ranges.getRangesList().iterator();
            TopicInfo topicInfo = new TopicInfo();

            long startOfLedger = 1;

            while (lrIterator.hasNext()) {
View Full Code Here

TOP

Related Classes of org.apache.hedwig.protocol.PubSubProtocol.LedgerRanges

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.