Package org.apache.hedwig.protocol.PubSubProtocol

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


            TopicInfo topicInfo = new TopicInfo();

            long startOfLedger = 1;

            while (lrIterator.hasNext()) {
                LedgerRange range = lrIterator.next();

                if (range.hasEndSeqIdIncluded()) {
                    // this means it was a valid and completely closed ledger
                    long endOfLedger = range.getEndSeqIdIncluded().getLocalComponent();
                    topicInfo.ledgerRanges.put(endOfLedger, new InMemoryLedgerRange(range, startOfLedger));
                    startOfLedger = endOfLedger + 1;
                    continue;
                }

                // If it doesn't have a valid end, it must be the last ledger
                if (lrIterator.hasNext()) {
                    String msg = "Ledger-id: " + range.getLedgerId() + " for topic: " + topic.toStringUtf8()
                                 + " is not the last one but still does not have an end seq-id";
                    logger.error(msg);
                    cb.operationFailed(ctx, new PubSubException.UnexpectedConditionException(msg));
                    return;
                }

                // The last ledger does not have a valid seq-id, lets try to
                // find it out
                recoverLastTopicLedgerAndOpenNewOne(range.getLedgerId(), version, topicInfo);
                return;
            }

            // All ledgers were found properly closed, just start a new one
            openNewTopicLedger(version, topicInfo);
View Full Code Here


                                return;
                            }

                            long prevLedgerEnd = topicInfo.ledgerRanges.isEmpty() ? 0 : topicInfo.ledgerRanges
                                                 .lastKey();
                            LedgerRange lr = LedgerRange.newBuilder().setLedgerId(ledgerId)
                                             .setEndSeqIdIncluded(lastMessage.getMsgId()).build();
                            topicInfo.ledgerRanges.put(lr.getEndSeqIdIncluded().getLocalComponent(),
                                                       new InMemoryLedgerRange(lr, prevLedgerEnd + 1, lh));

                            logger.info("Recovered unclosed ledger: " + ledgerId + " for topic: "
                                        + topic.toStringUtf8() + " with " + numEntriesInLastLedger + " entries");
View Full Code Here

                    topicInfo.lastSeqIdPushed = topicInfo.ledgerRanges.isEmpty() ? MessageSeqId.newBuilder()
                                                .setLocalComponent(0).build() : topicInfo.ledgerRanges.lastEntry().getValue().range
                                                .getEndSeqIdIncluded();

                    LedgerRange lastRange = LedgerRange.newBuilder().setLedgerId(lh.getId()).build();
                    topicInfo.currentLedgerRange = new InMemoryLedgerRange(lastRange, topicInfo.lastSeqIdPushed
                            .getLocalComponent() + 1, lh);

                    // Persist the fact that we started this new
                    // ledger to ZK
View Full Code Here

            return RC_NOLEDGERS;
        }
        Iterator<LedgerRange> lrIterator = ranges.iterator();
        long startOfLedger = 1;
        while (lrIterator.hasNext()) {
            LedgerRange range = lrIterator.next();
            if (range.hasEndSeqIdIncluded()) {
                long endOfLedger = range.getEndSeqIdIncluded().getLocalComponent();
                ledgers.put(endOfLedger, new InMemoryLedgerRange(range, startOfLedger));
                startOfLedger = endOfLedger + 1;
                continue;
            }
            if (lrIterator.hasNext()) {
                throw new IOException("Ledger-id: " + range.getLedgerId() + " for topic: " + topic
                        + " is not the last one but still does not have an end seq-id");
            }
            // admin has read last confirmed entry of last ledger
            // so we don't need to handle here
        }
View Full Code Here

                return;
            }
            Iterator<LedgerRange> lrIterator = lrs.iterator();
            long startOfLedger = 1;
            while (lrIterator.hasNext()) {
                LedgerRange range = lrIterator.next();
                long endOfLedger = Long.MAX_VALUE;
                if (range.hasEndSeqIdIncluded()) {
                    endOfLedger = range.getEndSeqIdIncluded().getLocalComponent();
                }
                System.out.println("Ledger " + range.getLedgerId() + " [ " + startOfLedger + " ~ " + (endOfLedger == Long.MAX_VALUE ? "" : endOfLedger) + " ]");

                startOfLedger = endOfLedger + 1;
            }
            System.out.println();
        }
View Full Code Here

        }
        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();
                try {
                    LedgerHandle lh = bk.openLedgerNoRecovery(ledgerId, DigestType.CRC32, passwd);
                    long numEntries = lh.readLastConfirmed() + 1;
                    long endOfLedger = range.getEndSeqIdIncluded().getLocalComponent();
                    startSeqId = endOfLedger - numEntries + 1;
                } catch (BKException.BKNoSuchLedgerExistsException be) {
                    // ignore it
                }
            }
        }
        Iterator<LedgerRange> lrIter = lrs.iterator();
        while (lrIter.hasNext()) {
            LedgerRange range = lrIter.next();
            if (range.hasEndSeqIdIncluded()) {
                long endOfLedger = range.getEndSeqIdIncluded().getLocalComponent();
                if (range.hasStartSeqIdIncluded()) {
                    startSeqId = range.getStartSeqIdIncluded();
                } else {
                    range = buildLedgerRange(range.getLedgerId(), startSeqId, range.getEndSeqIdIncluded());
                }
                results.add(range);
                if (startSeqId < endOfLedger + 1) {
                    startSeqId = endOfLedger + 1;
                }
                continue;
            }
            if (lrIter.hasNext()) {
                throw new IllegalStateException("Ledger " + range.getLedgerId() + " for topic " + topic.toString()
                                                + " is not the last one but still does not have an end seq-id");
            }

            if (range.hasStartSeqIdIncluded()) {
                startSeqId = range.getStartSeqIdIncluded();
            }

            LedgerHandle lh = bk.openLedgerNoRecovery(range.getLedgerId(), DigestType.CRC32, passwd);
            long endOfLedger = startSeqId + lh.readLastConfirmed();
            MessageSeqId endSeqId = MessageSeqId.newBuilder().setLocalComponent(endOfLedger).build();
            results.add(buildLedgerRange(range.getLedgerId(), startSeqId, endSeqId));
        }
        return results;
    }
View Full Code Here

        tpManager.readTopicPersistenceInfo(topic, readCallback, null);
        Versioned<LedgerRanges> ranges = readCallback.queue.take().left();
        Assert.assertEquals(Version.Occurred.CONCURRENTLY, v1.compare(ranges.getVersion()));
        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
View Full Code Here

                    topicInfo.lastSeqIdPushed = topicInfo.ledgerRanges.isEmpty() ? MessageSeqId.newBuilder()
                                                .setLocalComponent(startSeqId - 1).build() : topicInfo.ledgerRanges.lastEntry().getValue().range
                                                .getEndSeqIdIncluded();
                }

                LedgerRange lastRange = LedgerRange.newBuilder().setLedgerId(lh.getId())
                                        .setStartSeqIdIncluded(startSeqId).build();
                topicInfo.currentLedgerRange = new InMemoryLedgerRange(lastRange, lh);
                topicInfo.lastEntryIdAckedInCurrentLedger = -1;

                // Persist the fact that we started this new
View Full Code Here

            }
            LedgerRanges.Builder builder = LedgerRanges.newBuilder();
            final Set<Long> keysToRemove = new HashSet<Long>();
            boolean foundUnconsumedLedger = false;
            for (Map.Entry<Long, InMemoryLedgerRange> e : topicInfo.ledgerRanges.entrySet()) {
                LedgerRange lr = e.getValue().range;
                long ledgerId = lr.getLedgerId();
                if (!foundUnconsumedLedger && ledgersDeleted.contains(ledgerId)) {
                    keysToRemove.add(e.getKey());
                    if (!lr.hasEndSeqIdIncluded()) {
                        String msg = "Should not remove unclosed ledger " + ledgerId + " for topic " + topic.toStringUtf8();
                        logger.error(msg);
                        cb.operationFailed(ctx, new PubSubException.UnexpectedConditionException(msg));
                        return;
                    }
View Full Code Here

        }

        void processTopicLedgerRanges(final LedgerRanges ranges, final Version version) {
            final List<LedgerRange> rangesList = ranges.getRangesList();
            if (!rangesList.isEmpty()) {
                LedgerRange range = rangesList.get(0);
                if (range.hasStartSeqIdIncluded()) {
                    // we already have start seq id
                    processTopicLedgerRanges(rangesList, version, range.getStartSeqIdIncluded());
                    return;
                }
                getStartSeqIdToProcessTopicLedgerRanges(rangesList, version);
                return;
            }
View Full Code Here

TOP

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

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.