This is an automated email from the ASF dual-hosted git repository.
merlimat pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/bookkeeper.git
The following commit(s) were added to refs/heads/master by this push:
new 12d4bbdfed Migrate DataFormats from protobuf-java to LightProto (#4779)
12d4bbdfed is described below
commit 12d4bbdfedfa8372638b20268c3b7e0a530ce217
Author: Matteo Merli <[email protected]>
AuthorDate: Thu May 7 21:31:55 2026 -0700
Migrate DataFormats from protobuf-java to LightProto (#4779)
* Fix LedgerHandle.batchReadUnconfirmedAsync: use slog log instead of LOG
The batchReadUnconfirmedAsync method added in #4739 calls LOG.error(...),
but LedgerHandle was migrated to slog and only has a lowercase `log`
field. Master fails to compile.
Convert the call to the slog builder style used elsewhere in the file.
* Migrate DataFormats and DbLedgerStorageDataFormats from protobuf-java to
LightProto
Replace Google's protobuf-java with StreamNative LightProto for the storage
and
metadata formats in `bookkeeper-proto`. The wire protocol
(`BookkeeperProtocol`)
remains on protobuf-java for now.
LightProto generates mutable, reusable, ByteBuf-aware classes with built-in
proto2 TextFormat (de)serialization (via `generateTextFormat=true`), so the
existing TextFormat-based znode payloads (cookies, auditor votes, lock data,
underreplication entries, layout) round-trip byte-identically.
Notable behavior changes:
- `BookKeeper.DigestType.toProtoDigestType` now returns the
LightProto-generated
enum (same constants, different package).
- v3 ledger metadata uses a hand-rolled length-prefixed delimited
writer/reader
matching protobuf's `writeDelimitedTo`/`mergeDelimitedFrom`.
* Add SpotBugs excludes for lightproto-generated classes
The existing exclude `~org.apache.bookkeeper.proto.DataFormats.*` matched
protobuf's nested `DataFormats$LedgerMetadataFormat` etc. LightProto
generates
the same messages as flat top-level classes (`LedgerMetadataFormat` directly
in `org.apache.bookkeeper.proto`), so those weren't excluded and triggered
12 bugs in the generated code (bit-twiddling, exposed internal byte arrays,
etc.) that aren't actionable.
Replace the obsolete `DataFormats.*` exclude with explicit per-message
patterns covering both packages and `LightProtoCodec` (also generated
per-package).
* Fix checkstyle: remove redundant same-package import in MockBookies
---
bookkeeper-proto/pom.xml | 32 ++-
.../java/org/apache/bookkeeper/bookie/Cookie.java | 29 +--
.../bookie/storage/ldb/LedgerMetadataIndex.java | 31 ++-
.../bookie/storage/ldb/LedgersIndexCheckOp.java | 10 +-
.../bookie/storage/ldb/LedgersIndexRebuildOp.java | 10 +-
.../ldb/SingleDirectoryDbLedgerStorage.java | 19 +-
.../org/apache/bookkeeper/client/BookKeeper.java | 12 +-
.../org/apache/bookkeeper/client/LedgerHandle.java | 5 +-
.../bookkeeper/discover/ZKRegistrationClient.java | 36 +--
.../bookkeeper/discover/ZKRegistrationManager.java | 41 +---
.../bookkeeper/meta/LedgerMetadataSerDe.java | 260 +++++++++++----------
.../bookkeeper/meta/ZkLedgerAuditorManager.java | 16 +-
.../meta/ZkLedgerUnderreplicationManager.java | 108 +++++----
.../bookkeeper/proto/checksum/DigestManager.java | 2 +-
.../bookie/BookieInitializationTest.java | 7 +-
.../org/apache/bookkeeper/client/ClientUtil.java | 2 +-
.../bookkeeper/client/ReadLastConfirmedOpTest.java | 2 +-
.../org/apache/bookkeeper/proto/MockBookies.java | 2 +-
.../TestLedgerUnderreplicationManager.java | 17 +-
.../apache/bookkeeper/test/BookieClientTest.java | 14 +-
.../main/resources/bookkeeper/findbugsExclude.xml | 10 +-
.../proto/checksum/DigestManagerBenchmark.java | 2 +-
.../proto/checksum/DigestTypeBenchmark.java | 2 +-
pom.xml | 1 +
24 files changed, 339 insertions(+), 331 deletions(-)
diff --git a/bookkeeper-proto/pom.xml b/bookkeeper-proto/pom.xml
index 21e28cafce..d997fbde43 100644
--- a/bookkeeper-proto/pom.xml
+++ b/bookkeeper-proto/pom.xml
@@ -29,6 +29,10 @@
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
</dependency>
+ <dependency>
+ <groupId>io.netty</groupId>
+ <artifactId>netty-buffer</artifactId>
+ </dependency>
</dependencies>
<build>
<plugins>
@@ -37,10 +41,9 @@
<artifactId>apache-rat-plugin</artifactId>
<configuration>
<excludes>
- <!-- exclude generated file //-->
- <exclude>**/DataFormats.java</exclude>
+ <!-- exclude generated files //-->
<exclude>**/BookkeeperProtocol.java</exclude>
- <exclude>**/DbLedgerStorageDataFormats.java</exclude>
+ <exclude>target/generated-sources/lightproto/**</exclude>
<exclude>**/.checkstyle</exclude>
</excludes>
</configuration>
@@ -52,6 +55,9 @@
<configuration>
<protocArtifact>com.google.protobuf:protoc:${protoc.version}:exe:${os.detected.classifier}</protocArtifact>
<checkStaleness>true</checkStaleness>
+ <includes>
+ <include>BookkeeperProtocol.proto</include>
+ </includes>
</configuration>
<executions>
<execution>
@@ -61,6 +67,26 @@
</execution>
</executions>
</plugin>
+ <plugin>
+ <groupId>io.streamnative.lightproto</groupId>
+ <artifactId>lightproto-maven-plugin</artifactId>
+ <version>${lightproto-maven-plugin.version}</version>
+ <configuration>
+ <sources>
+
<source>${project.basedir}/src/main/proto/DataFormats.proto</source>
+
<source>${project.basedir}/src/main/proto/DbLedgerStorageDataFormats.proto</source>
+ </sources>
+
<targetSourcesSubDir>generated-sources/lightproto/java</targetSourcesSubDir>
+ <generateTextFormat>true</generateTextFormat>
+ </configuration>
+ <executions>
+ <execution>
+ <goals>
+ <goal>generate</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
</plugins>
</build>
</project>
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/Cookie.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/Cookie.java
index b6a8795a6a..d85e672cea 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/Cookie.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/Cookie.java
@@ -24,7 +24,6 @@ import static java.nio.charset.StandardCharsets.UTF_8;
import com.google.common.base.Joiner;
import com.google.common.collect.Sets;
-import com.google.protobuf.TextFormat;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.EOFException;
@@ -36,6 +35,7 @@ import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.StringReader;
+import java.io.StringWriter;
import java.net.InetSocketAddress;
import java.net.UnknownHostException;
import java.util.Objects;
@@ -46,7 +46,7 @@ import
org.apache.bookkeeper.bookie.BookieException.UnknownBookieIdException;
import org.apache.bookkeeper.conf.ServerConfiguration;
import org.apache.bookkeeper.discover.RegistrationManager;
import org.apache.bookkeeper.net.BookieId;
-import org.apache.bookkeeper.proto.DataFormats.CookieFormat;
+import org.apache.bookkeeper.proto.CookieFormat;
import org.apache.bookkeeper.util.BookKeeperConstants;
import org.apache.bookkeeper.versioning.LongVersion;
import org.apache.bookkeeper.versioning.Version;
@@ -181,20 +181,20 @@ public class Cookie {
if (layoutVersion <= 3) {
return toStringVersion3();
}
- CookieFormat.Builder builder = CookieFormat.newBuilder();
- builder.setBookieHost(bookieId);
- builder.setJournalDir(journalDirs);
- builder.setLedgerDirs(ledgerDirs);
+ CookieFormat fmt = new CookieFormat();
+ fmt.setBookieHost(bookieId);
+ fmt.setJournalDir(journalDirs);
+ fmt.setLedgerDirs(ledgerDirs);
if (null != instanceId) {
- builder.setInstanceId(instanceId);
+ fmt.setInstanceId(instanceId);
}
if (null != indexDirs) {
- builder.setIndexDirs(indexDirs);
+ fmt.setIndexDirs(indexDirs);
}
StringBuilder b = new StringBuilder();
b.append(CURRENT_COOKIE_LAYOUT_VERSION).append("\n");
- b.append(builder.build());
+ fmt.writeTextFormatTo(b);
return b.toString();
}
@@ -226,17 +226,18 @@ public class Cookie {
cBuilder.setJournalDirs(reader.readLine());
cBuilder.setLedgerDirs(reader.readLine());
} else if (layoutVersion >= 4) {
- CookieFormat.Builder cfBuilder = CookieFormat.newBuilder();
- TextFormat.merge(reader, cfBuilder);
- CookieFormat data = cfBuilder.build();
+ CookieFormat data = new CookieFormat();
+ StringWriter rest = new StringWriter();
+ reader.transferTo(rest);
+ data.parseFromTextFormat(rest.toString());
cBuilder.setBookieId(data.getBookieHost());
cBuilder.setJournalDirs(data.getJournalDir());
cBuilder.setLedgerDirs(data.getLedgerDirs());
// Since InstanceId is optional
- if (null != data.getInstanceId() &&
!data.getInstanceId().isEmpty()) {
+ if (data.hasInstanceId() && !data.getInstanceId().isEmpty()) {
cBuilder.setInstanceId(data.getInstanceId());
}
- if (null != data.getIndexDirs() && !data.getIndexDirs().isEmpty())
{
+ if (data.hasIndexDirs() && !data.getIndexDirs().isEmpty()) {
cBuilder.setIndexDirs(data.getIndexDirs());
}
}
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/storage/ldb/LedgerMetadataIndex.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/storage/ldb/LedgerMetadataIndex.java
index 7162c0c6c2..9037d4d075 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/storage/ldb/LedgerMetadataIndex.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/storage/ldb/LedgerMetadataIndex.java
@@ -23,8 +23,8 @@ package org.apache.bookkeeper.bookie.storage.ldb;
import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
import com.google.common.collect.Sets;
-import com.google.protobuf.ByteString;
import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufUtil;
import java.io.Closeable;
import java.io.IOException;
import java.util.AbstractMap.SimpleEntry;
@@ -37,7 +37,6 @@ import java.util.concurrent.locks.ReentrantLock;
import lombok.CustomLog;
import org.apache.bookkeeper.bookie.Bookie;
import org.apache.bookkeeper.bookie.BookieException;
-import
org.apache.bookkeeper.bookie.storage.ldb.DbLedgerStorageDataFormats.LedgerData;
import
org.apache.bookkeeper.bookie.storage.ldb.KeyValueStorage.CloseableIterator;
import
org.apache.bookkeeper.bookie.storage.ldb.KeyValueStorageFactory.DbConfigType;
import org.apache.bookkeeper.conf.ServerConfiguration;
@@ -82,7 +81,8 @@ public class LedgerMetadataIndex implements Closeable {
Entry<byte[], byte[]> entry = iterator.next();
long ledgerId = ArrayUtil.getLong(entry.getKey(), 0);
if (ledgerId >= 0) {
- LedgerData ledgerData =
LedgerData.parseFrom(entry.getValue());
+ LedgerData ledgerData = new LedgerData();
+ ledgerData.parseFrom(entry.getValue());
ledgers.put(ledgerId, ledgerData);
ledgersCount.incrementAndGet();
}
@@ -119,7 +119,7 @@ public class LedgerMetadataIndex implements Closeable {
}
public void set(long ledgerId, LedgerData ledgerData) throws IOException {
- ledgerData = LedgerData.newBuilder(ledgerData).setExists(true).build();
+ ledgerData = new LedgerData().copyFrom(ledgerData).setExists(true);
ReentrantLock lock = lockForLedger(ledgerId);
lock.lock();
@@ -170,11 +170,11 @@ public class LedgerMetadataIndex implements Closeable {
lock.lock();
try {
LedgerData ledgerData = get(ledgerId);
- if (ledgerData.getFenced()) {
+ if (ledgerData.isFenced()) {
return false;
}
- LedgerData newLedgerData =
LedgerData.newBuilder(ledgerData).setFenced(true).build();
+ LedgerData newLedgerData = new
LedgerData().copyFrom(ledgerData).setFenced(true);
if (ledgers.put(ledgerId, newLedgerData) == null) {
// Ledger had been deleted
@@ -197,11 +197,11 @@ public class LedgerMetadataIndex implements Closeable {
lock.lock();
try {
LedgerData ledgerData = get(ledgerId);
- if (ledgerData.getLimbo()) {
+ if (ledgerData.isLimbo()) {
return false;
}
- LedgerData newLedgerData =
LedgerData.newBuilder(ledgerData).setLimbo(true).build();
+ LedgerData newLedgerData = new
LedgerData().copyFrom(ledgerData).setLimbo(true);
if (ledgers.put(ledgerId, newLedgerData) == null) {
// Ledger had been deleted
@@ -227,8 +227,8 @@ public class LedgerMetadataIndex implements Closeable {
if (ledgerData == null) {
throw new Bookie.NoLedgerException(ledgerId);
}
- final boolean oldValue = ledgerData.getLimbo();
- LedgerData newLedgerData =
LedgerData.newBuilder(ledgerData).setLimbo(false).build();
+ final boolean oldValue = ledgerData.isLimbo();
+ LedgerData newLedgerData = new
LedgerData().copyFrom(ledgerData).setLimbo(false);
if (ledgers.put(ledgerId, newLedgerData) == null) {
// Ledger had been deleted
@@ -254,14 +254,13 @@ public class LedgerMetadataIndex implements Closeable {
LedgerData ledgerData = ledgers.get(ledgerId);
if (ledgerData == null) {
// New ledger inserted
- ledgerData =
LedgerData.newBuilder().setExists(true).setFenced(false)
- .setMasterKey(ByteString.copyFrom(masterKey)).build();
+ ledgerData = new
LedgerData().setExists(true).setFenced(false).setMasterKey(masterKey);
log.debug().attr("ledgerId", ledgerId).log("Inserting new
ledger");
} else {
- byte[] storedMasterKey =
ledgerData.getMasterKey().toByteArray();
+ byte[] storedMasterKey = ledgerData.getMasterKey();
if (ArrayUtil.isArrayAllZeros(storedMasterKey)) {
// update master key of the ledger
- ledgerData =
LedgerData.newBuilder(ledgerData).setMasterKey(ByteString.copyFrom(masterKey)).build();
+ ledgerData = new
LedgerData().copyFrom(ledgerData).setMasterKey(masterKey);
log.debug()
.attr("storedMasterKey", storedMasterKey)
.attr("newMasterKey", masterKey)
@@ -388,8 +387,8 @@ public class LedgerMetadataIndex implements Closeable {
void setExplicitLac(long ledgerId, ByteBuf lac) throws IOException {
LedgerData ledgerData = ledgers.get(ledgerId);
if (ledgerData != null) {
- LedgerData newLedgerData = LedgerData.newBuilder(ledgerData)
-
.setExplicitLac(ByteString.copyFrom(lac.nioBuffer())).build();
+ LedgerData newLedgerData = new LedgerData().copyFrom(ledgerData)
+ .setExplicitLac(ByteBufUtil.getBytes(lac));
if (ledgers.put(ledgerId, newLedgerData) == null) {
// Ledger had been deleted
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/storage/ldb/LedgersIndexCheckOp.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/storage/ldb/LedgersIndexCheckOp.java
index 8a7df8f565..c9cae7ddff 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/storage/ldb/LedgersIndexCheckOp.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/storage/ldb/LedgersIndexCheckOp.java
@@ -77,17 +77,17 @@ public class LedgersIndexCheckOp {
ctr++;
Map.Entry<byte[], byte[]> entry = iterator.next();
long ledgerId = ArrayUtil.getLong(entry.getKey(), 0);
- DbLedgerStorageDataFormats.LedgerData ledgerData =
-
DbLedgerStorageDataFormats.LedgerData.parseFrom(entry.getValue());
+ LedgerData ledgerData = new LedgerData();
+ ledgerData.parseFrom(entry.getValue());
if (verbose) {
log.info()
.attr("scanned", ctr)
.attr("ledgerId", ledgerId)
- .attr("exists", (ledgerData.hasExists() ?
ledgerData.getExists() : "-"))
- .attr("isFenced", (ledgerData.hasFenced()
? ledgerData.getFenced() : "-"))
+ .attr("exists", (ledgerData.hasExists() ?
ledgerData.isExists() : "-"))
+ .attr("isFenced", (ledgerData.hasFenced()
? ledgerData.isFenced() : "-"))
.attr("masterKey",
(ledgerData.hasMasterKey()
? Base64.getEncoder()
-
.encodeToString(ledgerData.getMasterKey().toByteArray())
+
.encodeToString(ledgerData.getMasterKey())
: "-"))
.attr("explicitLAC",
(ledgerData.hasExplicitLac()
? ledgerData.getExplicitLac() :
"-"))
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/storage/ldb/LedgersIndexRebuildOp.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/storage/ldb/LedgersIndexRebuildOp.java
index fc9f94559a..960d9cd8c1 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/storage/ldb/LedgersIndexRebuildOp.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/storage/ldb/LedgersIndexRebuildOp.java
@@ -21,7 +21,6 @@
package org.apache.bookkeeper.bookie.storage.ldb;
import com.google.common.collect.Lists;
-import com.google.protobuf.ByteString;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
@@ -109,11 +108,10 @@ public class LedgersIndexRebuildOp {
log.info().attr("tempPath", indexTempPath).log("Created
ledgers index at temp location");
for (Long ledgerId : ledgers) {
- DbLedgerStorageDataFormats.LedgerData ledgerData =
-
DbLedgerStorageDataFormats.LedgerData.newBuilder()
- .setExists(true)
- .setFenced(true)
-
.setMasterKey(ByteString.EMPTY).build();
+ LedgerData ledgerData = new LedgerData()
+ .setExists(true)
+ .setFenced(true)
+ .setMasterKey(new byte[0]);
byte[] ledgerArray = new byte[16];
ArrayUtil.setLong(ledgerArray, 0, ledgerId);
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/storage/ldb/SingleDirectoryDbLedgerStorage.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/storage/ldb/SingleDirectoryDbLedgerStorage.java
index 708b63da62..6778de2f82 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/storage/ldb/SingleDirectoryDbLedgerStorage.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/storage/ldb/SingleDirectoryDbLedgerStorage.java
@@ -26,7 +26,6 @@ import static com.google.common.base.Preconditions.checkState;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
-import com.google.protobuf.ByteString;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufAllocator;
@@ -68,7 +67,6 @@ import
org.apache.bookkeeper.bookie.LedgerDirsManager.LedgerDirsListener;
import org.apache.bookkeeper.bookie.LedgerEntryPage;
import org.apache.bookkeeper.bookie.StateManager;
import org.apache.bookkeeper.bookie.storage.EntryLogger;
-import
org.apache.bookkeeper.bookie.storage.ldb.DbLedgerStorageDataFormats.LedgerData;
import org.apache.bookkeeper.bookie.storage.ldb.KeyValueStorage.Batch;
import org.apache.bookkeeper.common.util.MathUtils;
import org.apache.bookkeeper.common.util.Watcher;
@@ -372,9 +370,9 @@ public class SingleDirectoryDbLedgerStorage implements
CompactableLedgerStorage
LedgerData ledgerData = ledgerIndex.get(ledgerId);
log.debug()
.attr("ledgerId", ledgerId)
- .attr("exists", () -> ledgerData.getExists())
+ .attr("exists", () -> ledgerData.isExists())
.log("Ledger exists");
- return ledgerData.getExists();
+ return ledgerData.isExists();
} catch (Bookie.NoLedgerException nle) {
// ledger does not exist
return false;
@@ -426,7 +424,7 @@ public class SingleDirectoryDbLedgerStorage implements
CompactableLedgerStorage
@Override
public boolean isFenced(long ledgerId) throws IOException, BookieException
{
- boolean isFenced = ledgerIndex.get(ledgerId).getFenced();
+ boolean isFenced = ledgerIndex.get(ledgerId).isFenced();
log.debug()
.attr("ledgerId", ledgerId)
@@ -464,7 +462,7 @@ public class SingleDirectoryDbLedgerStorage implements
CompactableLedgerStorage
@Override
public byte[] readMasterKey(long ledgerId) throws IOException,
BookieException {
log.debug().attr("ledgerId", ledgerId).log("Read master key");
- return ledgerIndex.get(ledgerId).getMasterKey().toByteArray();
+ return ledgerIndex.get(ledgerId).getMasterKey();
}
@Override
@@ -1037,8 +1035,7 @@ public class SingleDirectoryDbLedgerStorage implements
CompactableLedgerStorage
return null;
}
log.debug().attr("ledgerId", ledgerId).log("getExplicitLac returned
from LedgerData");
- ByteString persistedLac = ledgerData.getExplicitLac();
-
ledgerInfo.setExplicitLac(Unpooled.wrappedBuffer(persistedLac.toByteArray()));
+
ledgerInfo.setExplicitLac(Unpooled.wrappedBuffer(ledgerData.getExplicitLac()));
return ledgerInfo.getExplicitLac();
}
@@ -1074,8 +1071,8 @@ public class SingleDirectoryDbLedgerStorage implements
CompactableLedgerStorage
@SuppressFBWarnings("RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE")
public long addLedgerToIndex(long ledgerId, boolean isFenced, byte[]
masterKey,
LedgerCache.PageEntriesIterable pages) throws Exception {
- LedgerData ledgerData =
LedgerData.newBuilder().setExists(true).setFenced(isFenced)
- .setMasterKey(ByteString.copyFrom(masterKey)).build();
+ LedgerData ledgerData = new
LedgerData().setExists(true).setFenced(isFenced)
+ .setMasterKey(masterKey);
ledgerIndex.set(ledgerId, ledgerData);
MutableLong numberOfEntries = new MutableLong();
@@ -1217,7 +1214,7 @@ public class SingleDirectoryDbLedgerStorage implements
CompactableLedgerStorage
@Override
public boolean hasLimboState(long ledgerId) throws IOException {
log.debug().attr("ledgerId", ledgerId).log("hasLimboState");
- return ledgerIndex.get(ledgerId).getLimbo();
+ return ledgerIndex.get(ledgerId).isLimbo();
}
@Override
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/BookKeeper.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/BookKeeper.java
index e34a2ebefa..db34b482f2 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/BookKeeper.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/BookKeeper.java
@@ -85,7 +85,7 @@ import org.apache.bookkeeper.net.DNSToSwitchMapping;
import org.apache.bookkeeper.proto.BookieAddressResolver;
import org.apache.bookkeeper.proto.BookieClient;
import org.apache.bookkeeper.proto.BookieClientImpl;
-import org.apache.bookkeeper.proto.DataFormats;
+import org.apache.bookkeeper.proto.LedgerMetadataFormat;
import org.apache.bookkeeper.stats.NullStatsLogger;
import org.apache.bookkeeper.stats.StatsLogger;
import org.apache.bookkeeper.util.EventLoopUtil;
@@ -738,16 +738,16 @@ public class BookKeeper implements
org.apache.bookkeeper.client.api.BookKeeper {
throw new IllegalArgumentException("Unable to convert
digest type " + digestType);
}
}
- public static DataFormats.LedgerMetadataFormat.DigestType
toProtoDigestType(DigestType digestType) {
+ public static LedgerMetadataFormat.DigestType
toProtoDigestType(DigestType digestType) {
switch (digestType) {
case MAC:
- return DataFormats.LedgerMetadataFormat.DigestType.HMAC;
+ return LedgerMetadataFormat.DigestType.HMAC;
case CRC32:
- return DataFormats.LedgerMetadataFormat.DigestType.CRC32;
+ return LedgerMetadataFormat.DigestType.CRC32;
case CRC32C:
- return DataFormats.LedgerMetadataFormat.DigestType.CRC32C;
+ return LedgerMetadataFormat.DigestType.CRC32C;
case DUMMY:
- return DataFormats.LedgerMetadataFormat.DigestType.DUMMY;
+ return LedgerMetadataFormat.DigestType.DUMMY;
default:
throw new IllegalArgumentException("Unable to convert
digest type " + digestType);
}
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerHandle.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerHandle.java
index e9e63282ff..0a1005f6ce 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerHandle.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerHandle.java
@@ -982,7 +982,10 @@ public class LedgerHandle implements WriteHandle {
public CompletableFuture<LedgerEntries> batchReadUnconfirmedAsync(long
startEntry, int maxCount, long maxSize) {
// Little sanity check
if (startEntry < 0 || maxCount < 0 || maxSize < 0) {
- LOG.error("IncorrectParameterException on ledgerId:{}
firstEntry:{} when batch read", ledgerId, startEntry);
+ log.error()
+ .attr("ledgerId", ledgerId)
+ .attr("startEntry", startEntry)
+ .log("IncorrectParameterException when batch read");
return FutureUtils.exception(new BKIncorrectParameterException());
}
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/discover/ZKRegistrationClient.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/discover/ZKRegistrationClient.java
index f0ff9121c3..8622f667bd 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/discover/ZKRegistrationClient.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/discover/ZKRegistrationClient.java
@@ -26,8 +26,10 @@ import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.Sets;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ConcurrentHashMap;
@@ -36,7 +38,6 @@ import java.util.concurrent.RejectedExecutionException;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.function.BiConsumer;
-import java.util.stream.Collectors;
import lombok.AccessLevel;
import lombok.CustomLog;
import lombok.Getter;
@@ -44,7 +45,7 @@ import org.apache.bookkeeper.client.BKException;
import org.apache.bookkeeper.client.BKException.ZKException;
import org.apache.bookkeeper.common.concurrent.FutureUtils;
import org.apache.bookkeeper.net.BookieId;
-import org.apache.bookkeeper.proto.DataFormats.BookieServiceInfoFormat;
+import org.apache.bookkeeper.proto.BookieServiceInfoFormat;
import org.apache.bookkeeper.versioning.LongVersion;
import org.apache.bookkeeper.versioning.Version;
import org.apache.bookkeeper.versioning.Version.Occurred;
@@ -322,23 +323,26 @@ public class ZKRegistrationClient implements
RegistrationClient {
return
BookieServiceInfoUtils.buildLegacyBookieServiceInfo(bookieId.toString());
}
- BookieServiceInfoFormat builder =
BookieServiceInfoFormat.parseFrom(bookieServiceInfo);
+ BookieServiceInfoFormat fmt = new BookieServiceInfoFormat();
+ fmt.parseFrom(bookieServiceInfo);
BookieServiceInfo bsi = new BookieServiceInfo();
- List<BookieServiceInfo.Endpoint> endpoints =
builder.getEndpointsList().stream()
- .map(e -> {
- BookieServiceInfo.Endpoint endpoint = new
BookieServiceInfo.Endpoint();
- endpoint.setId(e.getId());
- endpoint.setPort(e.getPort());
- endpoint.setHost(e.getHost());
- endpoint.setProtocol(e.getProtocol());
- endpoint.setAuth(e.getAuthList());
- endpoint.setExtensions(e.getExtensionsList());
- return endpoint;
- })
- .collect(Collectors.toList());
+ List<BookieServiceInfo.Endpoint> endpoints = new
ArrayList<>(fmt.getEndpointsCount());
+ for (int i = 0; i < fmt.getEndpointsCount(); i++) {
+ BookieServiceInfoFormat.Endpoint e = fmt.getEndpointAt(i);
+ BookieServiceInfo.Endpoint endpoint = new
BookieServiceInfo.Endpoint();
+ endpoint.setId(e.getId());
+ endpoint.setPort(e.getPort());
+ endpoint.setHost(e.getHost());
+ endpoint.setProtocol(e.getProtocol());
+ endpoint.setAuth(e.getAuthsList());
+ endpoint.setExtensions(e.getExtensionsList());
+ endpoints.add(endpoint);
+ }
bsi.setEndpoints(endpoints);
- bsi.setProperties(builder.getPropertiesMap());
+ Map<String, String> properties = new HashMap<>();
+ fmt.forEachProperties(properties::put);
+ bsi.setProperties(properties);
return bsi;
}
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/discover/ZKRegistrationManager.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/discover/ZKRegistrationManager.java
index 80a45c0dd7..84827125ca 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/discover/ZKRegistrationManager.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/discover/ZKRegistrationManager.java
@@ -27,7 +27,6 @@ import static
org.apache.bookkeeper.util.BookKeeperConstants.READONLY;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.Lists;
-import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
@@ -37,7 +36,6 @@ import java.util.UUID;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
-import java.util.stream.Collectors;
import lombok.CustomLog;
import org.apache.bookkeeper.bookie.BookieException;
import org.apache.bookkeeper.bookie.BookieException.BookieIllegalOpException;
@@ -56,7 +54,7 @@ import org.apache.bookkeeper.meta.ZkLayoutManager;
import org.apache.bookkeeper.meta.ZkLedgerUnderreplicationManager;
import org.apache.bookkeeper.meta.zk.ZKMetadataDriverBase;
import org.apache.bookkeeper.net.BookieId;
-import org.apache.bookkeeper.proto.DataFormats.BookieServiceInfoFormat;
+import org.apache.bookkeeper.proto.BookieServiceInfoFormat;
import org.apache.bookkeeper.util.BookKeeperConstants;
import org.apache.bookkeeper.util.ZkUtils;
import org.apache.bookkeeper.versioning.LongVersion;
@@ -239,33 +237,18 @@ public class ZKRegistrationManager implements
RegistrationManager {
@VisibleForTesting
static byte[] serializeBookieServiceInfo(BookieServiceInfo
bookieServiceInfo) {
log.debug().attr("bookieServiceInfo",
bookieServiceInfo).log("serialize BookieServiceInfo");
- try (ByteArrayOutputStream os = new ByteArrayOutputStream()) {
- BookieServiceInfoFormat.Builder builder =
BookieServiceInfoFormat.newBuilder();
- List<BookieServiceInfoFormat.Endpoint> bsiEndpoints =
bookieServiceInfo.getEndpoints().stream()
- .map(e -> {
- return BookieServiceInfoFormat.Endpoint.newBuilder()
- .setId(e.getId())
- .setPort(e.getPort())
- .setHost(e.getHost())
- .setProtocol(e.getProtocol())
- .addAllAuth(e.getAuth())
- .addAllExtensions(e.getExtensions())
- .build();
- })
- .collect(Collectors.toList());
-
- builder.addAllEndpoints(bsiEndpoints);
- builder.putAllProperties(bookieServiceInfo.getProperties());
-
- builder.build().writeTo(os);
- return os.toByteArray();
- } catch (IOException err) {
- log.error()
- .exception(err)
- .attr("bookieServiceInfo", bookieServiceInfo)
- .log("Cannot serialize bookieServiceInfo");
- throw new RuntimeException(err);
+ BookieServiceInfoFormat fmt = new BookieServiceInfoFormat();
+ for (BookieServiceInfo.Endpoint e : bookieServiceInfo.getEndpoints()) {
+ BookieServiceInfoFormat.Endpoint endpoint = fmt.addEndpoint()
+ .setId(e.getId())
+ .setPort(e.getPort())
+ .setHost(e.getHost())
+ .setProtocol(e.getProtocol());
+ endpoint.addAllAuths(e.getAuth());
+ endpoint.addAllExtensions(e.getExtensions());
}
+ bookieServiceInfo.getProperties().forEach(fmt::putProperties);
+ return fmt.toByteArray();
}
private void doRegisterBookie(String regPath, BookieServiceInfo
bookieServiceInfo) throws BookieException {
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LedgerMetadataSerDe.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LedgerMetadataSerDe.java
index bcbbf8473a..e8c24ba580 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LedgerMetadataSerDe.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/LedgerMetadataSerDe.java
@@ -21,11 +21,12 @@ import static
com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkState;
import static java.nio.charset.StandardCharsets.UTF_8;
-import com.google.protobuf.ByteString;
-import com.google.protobuf.TextFormat;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.Unpooled;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
+import java.io.EOFException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
@@ -35,10 +36,10 @@ import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Base64;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
-import java.util.stream.Collectors;
import lombok.CustomLog;
import org.apache.bookkeeper.client.LedgerMetadataBuilder;
import org.apache.bookkeeper.client.LedgerMetadataUtils;
@@ -46,7 +47,7 @@ import org.apache.bookkeeper.client.api.DigestType;
import org.apache.bookkeeper.client.api.LedgerMetadata;
import org.apache.bookkeeper.client.api.LedgerMetadata.State;
import org.apache.bookkeeper.net.BookieId;
-import org.apache.bookkeeper.proto.DataFormats.LedgerMetadataFormat;
+import org.apache.bookkeeper.proto.LedgerMetadataFormat;
/**
* Serialization and deserialization for LedgerMetadata.
@@ -152,61 +153,8 @@ public class LedgerMetadataSerDe {
private static byte[] serializeVersion3(LedgerMetadata metadata) throws
IOException {
try (ByteArrayOutputStream os = new ByteArrayOutputStream()) {
writeHeader(os, METADATA_FORMAT_VERSION_3);
- LedgerMetadataFormat.Builder builder =
LedgerMetadataFormat.newBuilder();
- builder.setQuorumSize(metadata.getWriteQuorumSize())
- .setAckQuorumSize(metadata.getAckQuorumSize())
- .setEnsembleSize(metadata.getEnsembleSize())
- .setLength(metadata.getLength())
- .setLastEntryId(metadata.getLastEntryId());
-
- switch (metadata.getState()) {
- case CLOSED:
- builder.setState(LedgerMetadataFormat.State.CLOSED);
- break;
- case IN_RECOVERY:
- builder.setState(LedgerMetadataFormat.State.IN_RECOVERY);
- break;
- case OPEN:
- builder.setState(LedgerMetadataFormat.State.OPEN);
- break;
- default:
- checkArgument(false,
- String.format("Unknown state %s for protobuf
serialization", metadata.getState()));
- break;
- }
-
- /** Hack to get around fact that ctime was never versioned
correctly */
- if (LedgerMetadataUtils.shouldStoreCtime(metadata)) {
- builder.setCtime(metadata.getCtime());
- }
-
-
-
builder.setDigestType(apiToProtoDigestType(metadata.getDigestType()));
-
- serializePassword(metadata.getPassword(), builder);
-
- Map<String, byte[]> customMetadata = metadata.getCustomMetadata();
- if (customMetadata.size() > 0) {
- LedgerMetadataFormat.cMetadataMapEntry.Builder
cMetadataBuilder =
- LedgerMetadataFormat.cMetadataMapEntry.newBuilder();
- for (Map.Entry<String, byte[]> entry :
customMetadata.entrySet()) {
-
cMetadataBuilder.setKey(entry.getKey()).setValue(ByteString.copyFrom(entry.getValue()));
- builder.addCustomMetadata(cMetadataBuilder.build());
- }
- }
-
- for (Map.Entry<Long, ? extends List<BookieId>> entry :
metadata.getAllEnsembles().entrySet()) {
- LedgerMetadataFormat.Segment.Builder segmentBuilder =
LedgerMetadataFormat.Segment.newBuilder();
- segmentBuilder.setFirstEntryId(entry.getKey());
- for (BookieId addr : entry.getValue()) {
- segmentBuilder.addEnsembleMember(addr.toString());
- }
- builder.addSegment(segmentBuilder.build());
- }
-
- builder.setCToken(metadata.getCToken());
-
- builder.build().writeDelimitedTo(os);
+ LedgerMetadataFormat fmt = buildLedgerMetadataFormat(metadata,
true);
+ writeDelimited(fmt, os);
return os.toByteArray();
}
}
@@ -221,62 +169,62 @@ public class LedgerMetadataSerDe {
* fields, and if this code was shared with version 3, it
would be easy to
* accidently add new fields and create BC issues.
**********************************************************************/
- LedgerMetadataFormat.Builder builder =
LedgerMetadataFormat.newBuilder();
- builder.setQuorumSize(metadata.getWriteQuorumSize())
- .setAckQuorumSize(metadata.getAckQuorumSize())
- .setEnsembleSize(metadata.getEnsembleSize())
- .setLength(metadata.getLength())
- .setLastEntryId(metadata.getLastEntryId());
-
- switch (metadata.getState()) {
- case CLOSED:
- builder.setState(LedgerMetadataFormat.State.CLOSED);
- break;
- case IN_RECOVERY:
- builder.setState(LedgerMetadataFormat.State.IN_RECOVERY);
- break;
- case OPEN:
- builder.setState(LedgerMetadataFormat.State.OPEN);
- break;
- default:
- checkArgument(false,
- String.format("Unknown state %s for protobuf
serialization", metadata.getState()));
- break;
- }
+ LedgerMetadataFormat fmt = buildLedgerMetadataFormat(metadata,
false);
+ writer.print(fmt.toTextFormat());
+ writer.flush();
+ }
+ return os.toByteArray();
+ }
+ }
- /** Hack to get around fact that ctime was never versioned
correctly */
- if (LedgerMetadataUtils.shouldStoreCtime(metadata)) {
- builder.setCtime(metadata.getCtime());
- }
+ private static LedgerMetadataFormat
buildLedgerMetadataFormat(LedgerMetadata metadata, boolean includeCToken) {
+ LedgerMetadataFormat fmt = new LedgerMetadataFormat()
+ .setQuorumSize(metadata.getWriteQuorumSize())
+ .setAckQuorumSize(metadata.getAckQuorumSize())
+ .setEnsembleSize(metadata.getEnsembleSize())
+ .setLength(metadata.getLength())
+ .setLastEntryId(metadata.getLastEntryId());
-
builder.setDigestType(apiToProtoDigestType(metadata.getDigestType()));
- serializePassword(metadata.getPassword(), builder);
+ switch (metadata.getState()) {
+ case CLOSED:
+ fmt.setState(LedgerMetadataFormat.State.CLOSED);
+ break;
+ case IN_RECOVERY:
+ fmt.setState(LedgerMetadataFormat.State.IN_RECOVERY);
+ break;
+ case OPEN:
+ fmt.setState(LedgerMetadataFormat.State.OPEN);
+ break;
+ default:
+ checkArgument(false,
+ String.format("Unknown state %s for protobuf
serialization", metadata.getState()));
+ break;
+ }
- Map<String, byte[]> customMetadata =
metadata.getCustomMetadata();
- if (customMetadata.size() > 0) {
- LedgerMetadataFormat.cMetadataMapEntry.Builder
cMetadataBuilder =
- LedgerMetadataFormat.cMetadataMapEntry.newBuilder();
- for (Map.Entry<String, byte[]> entry :
customMetadata.entrySet()) {
-
cMetadataBuilder.setKey(entry.getKey()).setValue(ByteString.copyFrom(entry.getValue()));
- builder.addCustomMetadata(cMetadataBuilder.build());
- }
- }
+ /** Hack to get around fact that ctime was never versioned correctly */
+ if (LedgerMetadataUtils.shouldStoreCtime(metadata)) {
+ fmt.setCtime(metadata.getCtime());
+ }
- for (Map.Entry<Long, ? extends List<BookieId>> entry :
- metadata.getAllEnsembles().entrySet()) {
- LedgerMetadataFormat.Segment.Builder segmentBuilder =
LedgerMetadataFormat.Segment.newBuilder();
- segmentBuilder.setFirstEntryId(entry.getKey());
- for (BookieId addr : entry.getValue()) {
- segmentBuilder.addEnsembleMember(addr.toString());
- }
- builder.addSegment(segmentBuilder.build());
- }
+ fmt.setDigestType(apiToProtoDigestType(metadata.getDigestType()));
+ serializePassword(metadata.getPassword(), fmt);
- TextFormat.printer().print(builder.build(), writer);
- writer.flush();
+ for (Map.Entry<String, byte[]> entry :
metadata.getCustomMetadata().entrySet()) {
+
fmt.addCustomMetadata().setKey(entry.getKey()).setValue(entry.getValue());
+ }
+
+ for (Map.Entry<Long, ? extends List<BookieId>> entry :
metadata.getAllEnsembles().entrySet()) {
+ LedgerMetadataFormat.Segment seg = fmt.addSegment();
+ seg.setFirstEntryId(entry.getKey());
+ for (BookieId addr : entry.getValue()) {
+ seg.addEnsembleMember(addr.toString());
}
- return os.toByteArray();
}
+
+ if (includeCToken) {
+ fmt.setCToken(metadata.getCToken());
+ }
+ return fmt;
}
private static byte[] serializeVersion1(LedgerMetadata metadata) throws
IOException {
@@ -314,11 +262,11 @@ public class LedgerMetadataSerDe {
}
}
- private static void serializePassword(byte[] password,
LedgerMetadataFormat.Builder builder) {
+ private static void serializePassword(byte[] password,
LedgerMetadataFormat fmt) {
if (password == null || password.length == 0) {
- builder.setPassword(ByteString.EMPTY);
+ fmt.setPassword(new byte[0]);
} else {
- builder.setPassword(ByteString.copyFrom(password));
+ fmt.setPassword(password);
}
}
@@ -368,9 +316,8 @@ public class LedgerMetadataSerDe {
LedgerMetadataBuilder builder = LedgerMetadataBuilder.create()
.withId(ledgerId)
.withMetadataFormatVersion(METADATA_FORMAT_VERSION_3);
- LedgerMetadataFormat.Builder formatBuilder =
LedgerMetadataFormat.newBuilder();
- formatBuilder.mergeDelimitedFrom(is);
- LedgerMetadataFormat data = formatBuilder.build();
+ LedgerMetadataFormat data = new LedgerMetadataFormat();
+ readDelimited(is, data);
decodeFormat(data, builder);
if (data.hasCtime()) {
builder.storingCreationTime(true);
@@ -386,11 +333,8 @@ public class LedgerMetadataSerDe {
.withId(ledgerId)
.withMetadataFormatVersion(METADATA_FORMAT_VERSION_2);
- LedgerMetadataFormat.Builder formatBuilder =
LedgerMetadataFormat.newBuilder();
- try (InputStreamReader reader = new InputStreamReader(is,
UTF_8.name())) {
- TextFormat.merge(reader, formatBuilder);
- }
- LedgerMetadataFormat data = formatBuilder.build();
+ LedgerMetadataFormat data = new LedgerMetadataFormat();
+ data.parseFromTextFormat(is.readAllBytes());
decodeFormat(data, builder);
if (data.hasCtime()) {
// 'storingCreationTime' is only ever taken into account for
serializing version 2
@@ -421,22 +365,26 @@ public class LedgerMetadataSerDe {
}
if (data.hasPassword()) {
- builder.withPassword(data.getPassword().toByteArray())
+ builder.withPassword(data.getPassword())
.withDigestType(protoToApiDigestType(data.getDigestType()));
}
- for (LedgerMetadataFormat.Segment s : data.getSegmentList()) {
- List<BookieId> addrs = new ArrayList<>();
- for (String addr : s.getEnsembleMemberList()) {
- addrs.add(BookieId.parse(addr));
+ for (int i = 0; i < data.getSegmentsCount(); i++) {
+ LedgerMetadataFormat.Segment s = data.getSegmentAt(i);
+ List<BookieId> addrs = new
ArrayList<>(s.getEnsembleMembersCount());
+ for (int j = 0; j < s.getEnsembleMembersCount(); j++) {
+ addrs.add(BookieId.parse(s.getEnsembleMemberAt(j)));
}
builder.newEnsembleEntry(s.getFirstEntryId(), addrs);
}
- if (data.getCustomMetadataCount() > 0) {
-
builder.withCustomMetadata(data.getCustomMetadataList().stream().collect(
- Collectors.toMap(e ->
e.getKey(),
- e ->
e.getValue().toByteArray())));
+ if (data.getCustomMetadatasCount() > 0) {
+ Map<String, byte[]> customMetadata = new HashMap<>();
+ for (int i = 0; i < data.getCustomMetadatasCount(); i++) {
+ LedgerMetadataFormat.cMetadataMapEntry e =
data.getCustomMetadataAt(i);
+ customMetadata.put(e.getKey(), e.getValue());
+ }
+ builder.withCustomMetadata(customMetadata);
}
if (data.hasCToken()) {
@@ -512,4 +460,60 @@ public class LedgerMetadataSerDe {
throw new IllegalArgumentException("Unable to convert digest type
" + digestType);
}
}
+
+ /** Write a length-prefixed message in protobuf-compatible delimited
format. */
+ private static void writeDelimited(LedgerMetadataFormat msg, OutputStream
os) throws IOException {
+ int size = msg.getSerializedSize();
+ writeRawVarint32(size, os);
+ ByteBuf buf = Unpooled.buffer(size);
+ try {
+ msg.writeTo(buf);
+ os.write(buf.array(), buf.arrayOffset() + buf.readerIndex(),
buf.readableBytes());
+ } finally {
+ buf.release();
+ }
+ }
+
+ /** Read a length-prefixed message in protobuf-compatible delimited
format. */
+ private static void readDelimited(InputStream is, LedgerMetadataFormat
msg) throws IOException {
+ int size = readRawVarint32(is);
+ byte[] data = new byte[size];
+ int read = 0;
+ while (read < size) {
+ int n = is.read(data, read, size - read);
+ if (n < 0) {
+ throw new EOFException("Unexpected EOF reading delimited
message");
+ }
+ read += n;
+ }
+ msg.parseFrom(data);
+ }
+
+ private static void writeRawVarint32(int value, OutputStream os) throws
IOException {
+ while (true) {
+ if ((value & ~0x7F) == 0) {
+ os.write(value);
+ return;
+ }
+ os.write((value & 0x7F) | 0x80);
+ value >>>= 7;
+ }
+ }
+
+ private static int readRawVarint32(InputStream is) throws IOException {
+ int result = 0;
+ int shift = 0;
+ while (shift < 32) {
+ int b = is.read();
+ if (b == -1) {
+ throw new EOFException("Unexpected EOF reading varint");
+ }
+ result |= (b & 0x7F) << shift;
+ if ((b & 0x80) == 0) {
+ return result;
+ }
+ shift += 7;
+ }
+ throw new IOException("Malformed varint32");
+ }
}
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/ZkLedgerAuditorManager.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/ZkLedgerAuditorManager.java
index 768b2663cb..e174cc7b4f 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/ZkLedgerAuditorManager.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/ZkLedgerAuditorManager.java
@@ -18,10 +18,8 @@
package org.apache.bookkeeper.meta;
import static java.nio.charset.StandardCharsets.UTF_8;
-import static org.apache.bookkeeper.proto.DataFormats.AuditorVoteFormat;
import static
org.apache.bookkeeper.replication.ReplicationStats.ELECTION_ATTEMPTS;
-import com.google.protobuf.TextFormat;
import java.io.IOException;
import java.io.Serializable;
import java.util.Collections;
@@ -33,6 +31,7 @@ import lombok.CustomLog;
import org.apache.bookkeeper.conf.ServerConfiguration;
import org.apache.bookkeeper.meta.zk.ZKMetadataDriverBase;
import org.apache.bookkeeper.net.BookieId;
+import org.apache.bookkeeper.proto.AuditorVoteFormat;
import org.apache.bookkeeper.stats.Counter;
import org.apache.bookkeeper.stats.StatsLogger;
import org.apache.bookkeeper.stats.annotations.StatsDoc;
@@ -112,11 +111,11 @@ public class ZkLedgerAuditorManager implements
LedgerAuditorManager {
// We have been elected as the auditor
// update the auditor bookie id in the election path. This
is
// done for debugging purpose
- AuditorVoteFormat.Builder builder =
AuditorVoteFormat.newBuilder()
+ AuditorVoteFormat fmt = new AuditorVoteFormat()
.setBookieId(bookieId);
zkc.setData(getVotePath(""),
- builder.build().toString().getBytes(UTF_8), -1);
+ fmt.toTextFormat().getBytes(UTF_8), -1);
return;
} else {
// If not an auditor, will be watching to my predecessor
and
@@ -162,9 +161,8 @@ public class ZkLedgerAuditorManager implements
LedgerAuditorManager {
String ledger = electionRoot + "/" + children.get(AUDITOR_INDEX);
byte[] data = zkc.getData(ledger, false, null);
- AuditorVoteFormat.Builder builder = AuditorVoteFormat.newBuilder();
- TextFormat.merge(new String(data, UTF_8), builder);
- AuditorVoteFormat v = builder.build();
+ AuditorVoteFormat v = new AuditorVoteFormat();
+ v.parseFromTextFormat(data);
return BookieId.parse(v.getBookieId());
} catch (KeeperException e) {
throw new IOException(e);
@@ -191,13 +189,13 @@ public class ZkLedgerAuditorManager implements
LedgerAuditorManager {
private void createMyVote(String bookieId) throws IOException,
InterruptedException {
List<ACL> zkAcls = ZkUtils.getACLs(conf);
- AuditorVoteFormat.Builder builder = AuditorVoteFormat.newBuilder()
+ AuditorVoteFormat fmt = new AuditorVoteFormat()
.setBookieId(bookieId);
try {
if (null == myVote || null == zkc.exists(myVote, false)) {
myVote = zkc.create(getVotePath(PATH_SEPARATOR + VOTE_PREFIX),
- builder.build().toString().getBytes(UTF_8), zkAcls,
+ fmt.toTextFormat().getBytes(UTF_8), zkAcls,
CreateMode.EPHEMERAL_SEQUENTIAL);
}
} catch (KeeperException e) {
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/ZkLedgerUnderreplicationManager.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/ZkLedgerUnderreplicationManager.java
index 7bc6ccf9b8..00e0d77d43 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/ZkLedgerUnderreplicationManager.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/ZkLedgerUnderreplicationManager.java
@@ -22,9 +22,6 @@ import static java.nio.charset.StandardCharsets.UTF_8;
import com.google.common.base.Joiner;
import com.google.common.util.concurrent.RateLimiter;
-import com.google.protobuf.InvalidProtocolBufferException;
-import com.google.protobuf.TextFormat;
-import com.google.protobuf.TextFormat.ParseException;
import java.net.UnknownHostException;
import java.util.Arrays;
import java.util.Collection;
@@ -47,12 +44,12 @@ import org.apache.bookkeeper.conf.AbstractConfiguration;
import org.apache.bookkeeper.meta.zk.ZKMetadataDriverBase;
import org.apache.bookkeeper.net.DNS;
import org.apache.bookkeeper.proto.BookkeeperInternalCallbacks.GenericCallback;
-import org.apache.bookkeeper.proto.DataFormats.CheckAllLedgersFormat;
-import org.apache.bookkeeper.proto.DataFormats.LedgerRereplicationLayoutFormat;
-import org.apache.bookkeeper.proto.DataFormats.LockDataFormat;
-import org.apache.bookkeeper.proto.DataFormats.PlacementPolicyCheckFormat;
-import org.apache.bookkeeper.proto.DataFormats.ReplicasCheckFormat;
-import org.apache.bookkeeper.proto.DataFormats.UnderreplicatedLedgerFormat;
+import org.apache.bookkeeper.proto.CheckAllLedgersFormat;
+import org.apache.bookkeeper.proto.LedgerRereplicationLayoutFormat;
+import org.apache.bookkeeper.proto.LockDataFormat;
+import org.apache.bookkeeper.proto.PlacementPolicyCheckFormat;
+import org.apache.bookkeeper.proto.ReplicasCheckFormat;
+import org.apache.bookkeeper.proto.UnderreplicatedLedgerFormat;
import org.apache.bookkeeper.replication.ReplicationEnableCb;
import org.apache.bookkeeper.replication.ReplicationException;
import
org.apache.bookkeeper.replication.ReplicationException.UnavailableException;
@@ -173,14 +170,14 @@ public class ZkLedgerUnderreplicationManager implements
LedgerUnderreplicationMa
}
public static byte[] getLockData() {
- LockDataFormat.Builder lockDataBuilder = LockDataFormat.newBuilder();
+ LockDataFormat lockData = new LockDataFormat();
try {
- lockDataBuilder.setBookieId(DNS.getDefaultHost("default"));
+ lockData.setBookieId(DNS.getDefaultHost("default"));
} catch (UnknownHostException uhe) {
// if we cant get the address, ignore. it's optional
// in the data structure in any case
}
- return lockDataBuilder.build().toString().getBytes(UTF_8);
+ return lockData.toTextFormat().getBytes(UTF_8);
}
private void checkLayout()
@@ -195,10 +192,10 @@ public class ZkLedgerUnderreplicationManager implements
LedgerUnderreplicationMa
}
while (true) {
if (zkc.exists(layoutZNode, false) == null) {
- LedgerRereplicationLayoutFormat.Builder builder =
LedgerRereplicationLayoutFormat.newBuilder();
- builder.setType(LAYOUT).setVersion(LAYOUT_VERSION);
+ LedgerRereplicationLayoutFormat layout = new
LedgerRereplicationLayoutFormat();
+ layout.setType(LAYOUT).setVersion(LAYOUT_VERSION);
try {
- zkc.create(layoutZNode,
builder.build().toString().getBytes(UTF_8),
+ zkc.create(layoutZNode,
layout.toTextFormat().getBytes(UTF_8),
zkAcls, CreateMode.PERSISTENT);
break;
} catch (KeeperException.NodeExistsException nne) {
@@ -207,17 +204,16 @@ public class ZkLedgerUnderreplicationManager implements
LedgerUnderreplicationMa
} else {
byte[] layoutData = zkc.getData(layoutZNode, false, null);
- LedgerRereplicationLayoutFormat.Builder builder =
LedgerRereplicationLayoutFormat.newBuilder();
+ LedgerRereplicationLayoutFormat layout = new
LedgerRereplicationLayoutFormat();
try {
- TextFormat.merge(new String(layoutData, UTF_8), builder);
- LedgerRereplicationLayoutFormat layout = builder.build();
+ layout.parseFromTextFormat(layoutData);
if (!layout.getType().equals(LAYOUT)
|| layout.getVersion() != LAYOUT_VERSION) {
throw new ReplicationException.CompatibilityException(
"Incompatible layout found (" + LAYOUT + ":" +
LAYOUT_VERSION + ")");
}
- } catch (TextFormat.ParseException pe) {
+ } catch (RuntimeException pe) {
throw new ReplicationException.CompatibilityException(
"Invalid data found", pe);
}
@@ -276,7 +272,7 @@ public class ZkLedgerUnderreplicationManager implements
LedgerUnderreplicationMa
throws ReplicationException.UnavailableException {
try {
String znode = getUrLedgerZnode(ledgerId);
- UnderreplicatedLedgerFormat.Builder builder =
UnderreplicatedLedgerFormat.newBuilder();
+ UnderreplicatedLedgerFormat fmt = new
UnderreplicatedLedgerFormat();
byte[] data = null;
try {
data = zkc.getData(znode, false, null);
@@ -284,11 +280,10 @@ public class ZkLedgerUnderreplicationManager implements
LedgerUnderreplicationMa
log.debug().attr("ledgerId", ledgerId).log("Ledger is not
marked underreplicated");
return null;
}
- TextFormat.merge(new String(data, UTF_8), builder);
- UnderreplicatedLedgerFormat underreplicatedLedgerFormat =
builder.build();
+ fmt.parseFromTextFormat(data);
UnderreplicatedLedger underreplicatedLedger = new
UnderreplicatedLedger(ledgerId);
- List<String> replicaList =
underreplicatedLedgerFormat.getReplicaList();
- long ctime = (underreplicatedLedgerFormat.hasCtime() ?
underreplicatedLedgerFormat.getCtime()
+ List<String> replicaList = fmt.getReplicasList();
+ long ctime = (fmt.hasCtime() ? fmt.getCtime()
: UnderreplicatedLedger.UNASSIGNED_CTIME);
underreplicatedLedger.setCtime(ctime);
underreplicatedLedger.setReplicaList(replicaList);
@@ -298,7 +293,7 @@ public class ZkLedgerUnderreplicationManager implements
LedgerUnderreplicationMa
} catch (InterruptedException ie) {
Thread.currentThread().interrupt();
throw new ReplicationException.UnavailableException("Interrupted
while connecting zookeeper", ie);
- } catch (TextFormat.ParseException pe) {
+ } catch (RuntimeException pe) {
throw new ReplicationException.UnavailableException("Error parsing
proto message", pe);
}
}
@@ -320,12 +315,12 @@ public class ZkLedgerUnderreplicationManager implements
LedgerUnderreplicationMa
final Collection<String>
missingReplicas,
final List<ACL> zkAcls,
final
CompletableFuture<Void> finalFuture) {
- final UnderreplicatedLedgerFormat.Builder builder =
UnderreplicatedLedgerFormat.newBuilder();
+ final UnderreplicatedLedgerFormat fmt = new
UnderreplicatedLedgerFormat();
if (conf.getStoreSystemTimeAsLedgerUnderreplicatedMarkTime()) {
- builder.setCtime(System.currentTimeMillis());
+ fmt.setCtime(System.currentTimeMillis());
}
- missingReplicas.forEach(builder::addReplica);
- final byte[] urLedgerData = builder.build().toString().getBytes(UTF_8);
+ missingReplicas.forEach(fmt::addReplica);
+ final byte[] urLedgerData = fmt.toTextFormat().getBytes(UTF_8);
ZkUtils.asyncCreateFullPathOptimistic(
zkc, znode, urLedgerData, zkAcls, CreateMode.PERSISTENT,
(rc, path, ctx, name) -> {
@@ -349,23 +344,22 @@ public class ZkLedgerUnderreplicationManager implements
LedgerUnderreplicationMa
zkc.getData(znode, false, (getRc, getPath, getCtx,
existingUrLedgerData, getStat) -> {
if (Code.OK.intValue() == getRc) {
// deserialize existing underreplicated ledger data
- final UnderreplicatedLedgerFormat.Builder builder =
UnderreplicatedLedgerFormat.newBuilder();
+ final UnderreplicatedLedgerFormat fmt = new
UnderreplicatedLedgerFormat();
try {
- TextFormat.merge(new String(existingUrLedgerData, UTF_8),
builder);
- } catch (ParseException e) {
+ fmt.parseFromTextFormat(existingUrLedgerData);
+ } catch (RuntimeException e) {
// corrupted metadata in zookeeper
FutureUtils.completeExceptionally(finalFuture,
new ReplicationException.UnavailableException(
"Invalid underreplicated ledger data for ledger "
+ znode, e));
return;
}
- UnderreplicatedLedgerFormat existingUrLedgerFormat =
builder.build();
boolean replicaAdded = false;
for (String missingReplica : missingReplicas) {
- if
(existingUrLedgerFormat.getReplicaList().contains(missingReplica)) {
+ if (fmt.getReplicasList().contains(missingReplica)) {
continue;
} else {
- builder.addReplica(missingReplica);
+ fmt.addReplica(missingReplica);
replicaAdded = true;
}
}
@@ -374,9 +368,9 @@ public class ZkLedgerUnderreplicationManager implements
LedgerUnderreplicationMa
return;
}
if (conf.getStoreSystemTimeAsLedgerUnderreplicatedMarkTime()) {
- builder.setCtime(System.currentTimeMillis());
+ fmt.setCtime(System.currentTimeMillis());
}
- final byte[] newUrLedgerData =
builder.build().toString().getBytes(UTF_8);
+ final byte[] newUrLedgerData =
fmt.toTextFormat().getBytes(UTF_8);
zkc.setData(znode, newUrLedgerData, getStat.getVersion(),
(setRc, setPath, setCtx, setStat) -> {
if (Code.OK.intValue() == setRc) {
FutureUtils.complete(finalFuture, null);
@@ -917,9 +911,8 @@ public class ZkLedgerUnderreplicationManager implements
LedgerUnderreplicationMa
String replicationWorkerId = null;
try {
byte[] lockData = zkc.getData(getUrLedgerLockZnode(urLockPath,
ledgerId), false, null);
- LockDataFormat.Builder lockDataBuilder =
LockDataFormat.newBuilder();
- TextFormat.merge(new String(lockData, UTF_8), lockDataBuilder);
- LockDataFormat lock = lockDataBuilder.build();
+ LockDataFormat lock = new LockDataFormat();
+ lock.parseFromTextFormat(lockData);
replicationWorkerId = lock.getBookieId();
} catch (KeeperException.NoNodeException e) {
// this is ok.
@@ -931,7 +924,7 @@ public class ZkLedgerUnderreplicationManager implements
LedgerUnderreplicationMa
log.error().exception(e).log("Got interrupted while getting
ReplicationWorkerId rereplicating Ledger");
Thread.currentThread().interrupt();
throw new ReplicationException.UnavailableException("Interrupted
while contacting zookeeper", e);
- } catch (ParseException e) {
+ } catch (RuntimeException e) {
log.error().exception(e).log("Error while parsing ZK data of
lock");
throw new ReplicationException.UnavailableException("Error while
parsing ZK data of lock", e);
}
@@ -943,9 +936,9 @@ public class ZkLedgerUnderreplicationManager implements
LedgerUnderreplicationMa
log.debug("setCheckAllLedgersCTime");
try {
List<ACL> zkAcls = ZkUtils.getACLs(conf);
- CheckAllLedgersFormat.Builder builder =
CheckAllLedgersFormat.newBuilder();
- builder.setCheckAllLedgersCTime(checkAllLedgersCTime);
- byte[] checkAllLedgersFormatByteArray =
builder.build().toByteArray();
+ CheckAllLedgersFormat fmt = new CheckAllLedgersFormat();
+ fmt.setCheckAllLedgersCTime(checkAllLedgersCTime);
+ byte[] checkAllLedgersFormatByteArray = fmt.toByteArray();
if (zkc.exists(checkAllLedgersCtimeZnode, false) != null) {
zkc.setData(checkAllLedgersCtimeZnode,
checkAllLedgersFormatByteArray, -1);
} else {
@@ -964,7 +957,8 @@ public class ZkLedgerUnderreplicationManager implements
LedgerUnderreplicationMa
log.debug("getCheckAllLedgersCTime");
try {
byte[] data = zkc.getData(checkAllLedgersCtimeZnode, false, null);
- CheckAllLedgersFormat checkAllLedgersFormat =
CheckAllLedgersFormat.parseFrom(data);
+ CheckAllLedgersFormat checkAllLedgersFormat = new
CheckAllLedgersFormat();
+ checkAllLedgersFormat.parseFrom(data);
return checkAllLedgersFormat.hasCheckAllLedgersCTime() ?
checkAllLedgersFormat.getCheckAllLedgersCTime()
: -1;
} catch (KeeperException.NoNodeException ne) {
@@ -975,7 +969,7 @@ public class ZkLedgerUnderreplicationManager implements
LedgerUnderreplicationMa
} catch (InterruptedException ie) {
Thread.currentThread().interrupt();
throw new ReplicationException.UnavailableException("Interrupted
while contacting zookeeper", ie);
- } catch (InvalidProtocolBufferException ipbe) {
+ } catch (RuntimeException ipbe) {
throw new ReplicationException.UnavailableException("Error while
parsing ZK protobuf binary data", ipbe);
}
}
@@ -985,9 +979,9 @@ public class ZkLedgerUnderreplicationManager implements
LedgerUnderreplicationMa
log.debug("setPlacementPolicyCheckCTime");
try {
List<ACL> zkAcls = ZkUtils.getACLs(conf);
- PlacementPolicyCheckFormat.Builder builder =
PlacementPolicyCheckFormat.newBuilder();
- builder.setPlacementPolicyCheckCTime(placementPolicyCheckCTime);
- byte[] placementPolicyCheckFormatByteArray =
builder.build().toByteArray();
+ PlacementPolicyCheckFormat fmt = new PlacementPolicyCheckFormat();
+ fmt.setPlacementPolicyCheckCTime(placementPolicyCheckCTime);
+ byte[] placementPolicyCheckFormatByteArray = fmt.toByteArray();
if (zkc.exists(placementPolicyCheckCtimeZnode, false) != null) {
zkc.setData(placementPolicyCheckCtimeZnode,
placementPolicyCheckFormatByteArray, -1);
} else {
@@ -1007,7 +1001,8 @@ public class ZkLedgerUnderreplicationManager implements
LedgerUnderreplicationMa
log.debug("getPlacementPolicyCheckCTime");
try {
byte[] data = zkc.getData(placementPolicyCheckCtimeZnode, false,
null);
- PlacementPolicyCheckFormat placementPolicyCheckFormat =
PlacementPolicyCheckFormat.parseFrom(data);
+ PlacementPolicyCheckFormat placementPolicyCheckFormat = new
PlacementPolicyCheckFormat();
+ placementPolicyCheckFormat.parseFrom(data);
return placementPolicyCheckFormat.hasPlacementPolicyCheckCTime()
?
placementPolicyCheckFormat.getPlacementPolicyCheckCTime() : -1;
} catch (KeeperException.NoNodeException ne) {
@@ -1018,7 +1013,7 @@ public class ZkLedgerUnderreplicationManager implements
LedgerUnderreplicationMa
} catch (InterruptedException ie) {
Thread.currentThread().interrupt();
throw new ReplicationException.UnavailableException("Interrupted
while contacting zookeeper", ie);
- } catch (InvalidProtocolBufferException ipbe) {
+ } catch (RuntimeException ipbe) {
throw new ReplicationException.UnavailableException("Error while
parsing ZK protobuf binary data", ipbe);
}
}
@@ -1027,9 +1022,9 @@ public class ZkLedgerUnderreplicationManager implements
LedgerUnderreplicationMa
public void setReplicasCheckCTime(long replicasCheckCTime) throws
UnavailableException {
try {
List<ACL> zkAcls = ZkUtils.getACLs(conf);
- ReplicasCheckFormat.Builder builder =
ReplicasCheckFormat.newBuilder();
- builder.setReplicasCheckCTime(replicasCheckCTime);
- byte[] replicasCheckFormatByteArray =
builder.build().toByteArray();
+ ReplicasCheckFormat fmt = new ReplicasCheckFormat();
+ fmt.setReplicasCheckCTime(replicasCheckCTime);
+ byte[] replicasCheckFormatByteArray = fmt.toByteArray();
if (zkc.exists(replicasCheckCtimeZnode, false) != null) {
zkc.setData(replicasCheckCtimeZnode,
replicasCheckFormatByteArray, -1);
} else {
@@ -1048,7 +1043,8 @@ public class ZkLedgerUnderreplicationManager implements
LedgerUnderreplicationMa
public long getReplicasCheckCTime() throws UnavailableException {
try {
byte[] data = zkc.getData(replicasCheckCtimeZnode, false, null);
- ReplicasCheckFormat replicasCheckFormat =
ReplicasCheckFormat.parseFrom(data);
+ ReplicasCheckFormat replicasCheckFormat = new
ReplicasCheckFormat();
+ replicasCheckFormat.parseFrom(data);
log.debug("getReplicasCheckCTime completed successfully");
return replicasCheckFormat.hasReplicasCheckCTime() ?
replicasCheckFormat.getReplicasCheckCTime() : -1;
} catch (KeeperException.NoNodeException ne) {
@@ -1059,7 +1055,7 @@ public class ZkLedgerUnderreplicationManager implements
LedgerUnderreplicationMa
} catch (InterruptedException ie) {
Thread.currentThread().interrupt();
throw new ReplicationException.UnavailableException("Interrupted
while contacting zookeeper", ie);
- } catch (InvalidProtocolBufferException ipbe) {
+ } catch (RuntimeException ipbe) {
throw new ReplicationException.UnavailableException("Error while
parsing ZK protobuf binary data", ipbe);
}
}
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/checksum/DigestManager.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/checksum/DigestManager.java
index 114df52de8..b84492514a 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/checksum/DigestManager.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/checksum/DigestManager.java
@@ -31,7 +31,7 @@ import
org.apache.bookkeeper.client.BKException.BKDigestMatchException;
import org.apache.bookkeeper.client.LedgerHandle;
import org.apache.bookkeeper.proto.BookieProtoEncoding;
import org.apache.bookkeeper.proto.BookieProtocol;
-import org.apache.bookkeeper.proto.DataFormats.LedgerMetadataFormat.DigestType;
+import org.apache.bookkeeper.proto.LedgerMetadataFormat.DigestType;
import org.apache.bookkeeper.util.ByteBufList;
import org.apache.bookkeeper.util.ByteBufVisitor;
diff --git
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/BookieInitializationTest.java
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/BookieInitializationTest.java
index 7269265d5a..49e9645a2f 100644
---
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/BookieInitializationTest.java
+++
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/BookieInitializationTest.java
@@ -95,7 +95,7 @@ import org.apache.bookkeeper.meta.zk.ZKMetadataBookieDriver;
import org.apache.bookkeeper.meta.zk.ZKMetadataDriverBase;
import org.apache.bookkeeper.net.BookieId;
import org.apache.bookkeeper.proto.BookieServer;
-import org.apache.bookkeeper.proto.DataFormats.BookieServiceInfoFormat;
+import org.apache.bookkeeper.proto.BookieServiceInfoFormat;
import org.apache.bookkeeper.replication.AutoRecoveryMain;
import org.apache.bookkeeper.replication.ReplicationStats;
import org.apache.bookkeeper.server.Main;
@@ -550,8 +550,9 @@ public class BookieInitializationTest extends
BookKeeperClusterTestCase {
byte[] bkRegNodeData = zkc.getData(bkRegPath, null, null);
assertFalse("Bookie service info not written", bkRegNodeData == null
|| bkRegNodeData.length == 0);
- BookieServiceInfoFormat serializedBookieServiceInfo =
BookieServiceInfoFormat.parseFrom(bkRegNodeData);
- BookieServiceInfoFormat.Endpoint serializedEndpoint =
serializedBookieServiceInfo.getEndpoints(0);
+ BookieServiceInfoFormat serializedBookieServiceInfo = new
BookieServiceInfoFormat();
+ serializedBookieServiceInfo.parseFrom(bkRegNodeData);
+ BookieServiceInfoFormat.Endpoint serializedEndpoint =
serializedBookieServiceInfo.getEndpointAt(0);
assertNotNull("Serialized Bookie endpoint not found",
serializedEndpoint);
assertEquals(endpoint.getId(), serializedEndpoint.getId());
diff --git
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/ClientUtil.java
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/ClientUtil.java
index 3f8af53c13..8c66401158 100644
---
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/ClientUtil.java
+++
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/ClientUtil.java
@@ -26,7 +26,7 @@ import java.security.GeneralSecurityException;
import java.util.function.Function;
import org.apache.bookkeeper.client.api.LedgerMetadata;
import org.apache.bookkeeper.meta.LedgerManager;
-import org.apache.bookkeeper.proto.DataFormats.LedgerMetadataFormat.DigestType;
+import org.apache.bookkeeper.proto.LedgerMetadataFormat.DigestType;
import org.apache.bookkeeper.proto.MockBookieClient;
import org.apache.bookkeeper.proto.checksum.DigestManager;
import org.apache.bookkeeper.versioning.Versioned;
diff --git
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/ReadLastConfirmedOpTest.java
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/ReadLastConfirmedOpTest.java
index 954bdccca8..e51ffd3ff7 100644
---
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/ReadLastConfirmedOpTest.java
+++
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/ReadLastConfirmedOpTest.java
@@ -27,7 +27,7 @@ import java.util.concurrent.CompletableFuture;
import org.apache.bookkeeper.common.util.OrderedExecutor;
import org.apache.bookkeeper.net.BookieId;
import org.apache.bookkeeper.net.BookieSocketAddress;
-import org.apache.bookkeeper.proto.DataFormats.LedgerMetadataFormat.DigestType;
+import org.apache.bookkeeper.proto.LedgerMetadataFormat.DigestType;
import org.apache.bookkeeper.proto.MockBookieClient;
import org.apache.bookkeeper.proto.checksum.DigestManager;
import org.junit.After;
diff --git
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/proto/MockBookies.java
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/proto/MockBookies.java
index ac338b9757..0cb3ad954f 100644
---
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/proto/MockBookies.java
+++
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/proto/MockBookies.java
@@ -82,7 +82,7 @@ public class MockBookies {
public ByteBuf generateEntry(long ledgerId, long entryId, long lac) throws
Exception {
DigestManager digestManager = DigestManager.instantiate(ledgerId, new
byte[0],
- DataFormats.LedgerMetadataFormat.DigestType.CRC32C,
+ LedgerMetadataFormat.DigestType.CRC32C,
UnpooledByteBufAllocator.DEFAULT, false);
return ByteBufList.coalesce((ByteBufList)
digestManager.computeDigestAndPackageForSending(
entryId, lac, 0, Unpooled.buffer(10), new byte[20], 0));
diff --git
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/replication/TestLedgerUnderreplicationManager.java
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/replication/TestLedgerUnderreplicationManager.java
index 3e418226e6..67d68b3353 100644
---
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/replication/TestLedgerUnderreplicationManager.java
+++
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/replication/TestLedgerUnderreplicationManager.java
@@ -26,7 +26,6 @@ import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
-import com.google.protobuf.TextFormat;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Collection;
@@ -53,7 +52,7 @@ import org.apache.bookkeeper.meta.ZkLayoutManager;
import org.apache.bookkeeper.meta.ZkLedgerUnderreplicationManager;
import org.apache.bookkeeper.meta.zk.ZKMetadataDriverBase;
import org.apache.bookkeeper.net.DNS;
-import org.apache.bookkeeper.proto.DataFormats.UnderreplicatedLedgerFormat;
+import org.apache.bookkeeper.proto.UnderreplicatedLedgerFormat;
import
org.apache.bookkeeper.replication.ReplicationException.UnavailableException;
import org.apache.bookkeeper.test.ZooKeeperUtil;
import org.apache.bookkeeper.util.BookKeeperConstants;
@@ -430,12 +429,11 @@ public class TestLedgerUnderreplicationManager {
m2.markLedgerUnderreplicated(ledgerA, missingReplica1);
// verify duplicate missing replica
- UnderreplicatedLedgerFormat.Builder builderA =
UnderreplicatedLedgerFormat
- .newBuilder();
+ UnderreplicatedLedgerFormat fmtA = new UnderreplicatedLedgerFormat();
String znode = getUrLedgerZnode(ledgerA);
byte[] data = zkc1.getData(znode, false, null);
- TextFormat.merge(new String(data, Charset.forName("UTF-8")), builderA);
- List<String> replicaList = builderA.getReplicaList();
+ fmtA.parseFromTextFormat(new String(data, Charset.forName("UTF-8")));
+ List<String> replicaList = fmtA.getReplicasList();
assertEquals("Published duplicate missing replica : " + replicaList, 1,
replicaList.size());
assertTrue("Published duplicate missing replica : " + replicaList,
@@ -833,12 +831,11 @@ public class TestLedgerUnderreplicationManager {
}
String urLedgerA = getData(znodeA);
- UnderreplicatedLedgerFormat.Builder builderA =
UnderreplicatedLedgerFormat
- .newBuilder();
+ UnderreplicatedLedgerFormat fmtA = new UnderreplicatedLedgerFormat();
for (String replica : missingReplica) {
- builderA.addReplica(replica);
+ fmtA.addReplica(replica);
}
- List<String> replicaList = builderA.getReplicaList();
+ List<String> replicaList = fmtA.getReplicasList();
for (String replica : missingReplica) {
assertTrue("UrLedger:" + urLedgerA
diff --git
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/BookieClientTest.java
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/BookieClientTest.java
index d8ab2f5989..e9928a01c8 100644
---
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/BookieClientTest.java
+++
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/BookieClientTest.java
@@ -70,7 +70,7 @@ import
org.apache.bookkeeper.proto.BookkeeperInternalCallbacks.GetBookieInfoCall
import
org.apache.bookkeeper.proto.BookkeeperInternalCallbacks.ReadEntryCallback;
import org.apache.bookkeeper.proto.BookkeeperInternalCallbacks.WriteCallback;
import org.apache.bookkeeper.proto.BookkeeperProtocol;
-import org.apache.bookkeeper.proto.DataFormats;
+import org.apache.bookkeeper.proto.LedgerMetadataFormat;
import org.apache.bookkeeper.proto.PerChannelBookieClient;
import org.apache.bookkeeper.proto.PerChannelBookieClientPool;
import org.apache.bookkeeper.proto.checksum.DigestManager;
@@ -381,7 +381,7 @@ public class BookieClientTest {
byte[] passwd = new byte[20];
Arrays.fill(passwd, (byte) 'a');
DigestManager digestManager = DigestManager.instantiate(1, passwd,
- DataFormats.LedgerMetadataFormat.DigestType.CRC32C,
ByteBufAllocator.DEFAULT, true);
+ LedgerMetadataFormat.DigestType.CRC32C,
ByteBufAllocator.DEFAULT, true);
byte[] masterKey = DigestManager.generateMasterKey(passwd);
final int entries = 10;
@@ -443,7 +443,7 @@ public class BookieClientTest {
byte[] passwd = new byte[20];
Arrays.fill(passwd, (byte) 'a');
DigestManager digestManager = DigestManager.instantiate(1, passwd,
- DataFormats.LedgerMetadataFormat.DigestType.CRC32C,
ByteBufAllocator.DEFAULT, true);
+ LedgerMetadataFormat.DigestType.CRC32C,
ByteBufAllocator.DEFAULT, true);
byte[] masterKey = DigestManager.generateMasterKey(passwd);
final int entries = 10;
@@ -509,7 +509,7 @@ public class BookieClientTest {
byte[] passwd = new byte[20];
Arrays.fill(passwd, (byte) 'a');
DigestManager digestManager = DigestManager.instantiate(1, passwd,
- DataFormats.LedgerMetadataFormat.DigestType.CRC32C,
ByteBufAllocator.DEFAULT, true);
+ LedgerMetadataFormat.DigestType.CRC32C,
ByteBufAllocator.DEFAULT, true);
byte[] masterKey = DigestManager.generateMasterKey(passwd);
final int entries = 10;
@@ -560,7 +560,7 @@ public class BookieClientTest {
byte[] passwd = new byte[20];
Arrays.fill(passwd, (byte) 'a');
DigestManager digestManager = DigestManager.instantiate(1, passwd,
- DataFormats.LedgerMetadataFormat.DigestType.CRC32C,
ByteBufAllocator.DEFAULT, true);
+ LedgerMetadataFormat.DigestType.CRC32C,
ByteBufAllocator.DEFAULT, true);
byte[] masterKey = DigestManager.generateMasterKey(passwd);
byte[] kbData = new byte[1024];
for (int i = 0; i < 1024; i++) {
@@ -627,7 +627,7 @@ public class BookieClientTest {
byte[] passwd = new byte[20];
Arrays.fill(passwd, (byte) 'a');
DigestManager digestManager = DigestManager.instantiate(1, passwd,
- DataFormats.LedgerMetadataFormat.DigestType.CRC32C,
ByteBufAllocator.DEFAULT, true);
+ LedgerMetadataFormat.DigestType.CRC32C,
ByteBufAllocator.DEFAULT, true);
byte[] masterKey = DigestManager.generateMasterKey(passwd);
byte[] kbData = new byte[1024];
for (int i = 0; i < 1024; i++) {
@@ -697,7 +697,7 @@ public class BookieClientTest {
byte[] passwd = new byte[20];
Arrays.fill(passwd, (byte) 'a');
DigestManager digestManager = DigestManager.instantiate(1, passwd,
- DataFormats.LedgerMetadataFormat.DigestType.CRC32C,
ByteBufAllocator.DEFAULT, true);
+ LedgerMetadataFormat.DigestType.CRC32C,
ByteBufAllocator.DEFAULT, true);
byte[] masterKey = DigestManager.generateMasterKey(passwd);
byte[] kbData = new byte[1024];
for (int i = 0; i < 1024; i++) {
diff --git a/buildtools/src/main/resources/bookkeeper/findbugsExclude.xml
b/buildtools/src/main/resources/bookkeeper/findbugsExclude.xml
index ea2b65e447..326cfb36ee 100644
--- a/buildtools/src/main/resources/bookkeeper/findbugsExclude.xml
+++ b/buildtools/src/main/resources/bookkeeper/findbugsExclude.xml
@@ -40,15 +40,15 @@
<!-- bookkeeper-proto -->
<Match>
<!-- generated code, we can't be held responsible for findbugs in it //-->
- <Class name="~org\.apache\.bookkeeper\.proto\.DataFormats.*" />
+ <Class name="~org\.apache\.bookkeeper\.proto\.BookkeeperProtocol.*" />
</Match>
+ <!-- lightproto-generated classes from DataFormats.proto -->
<Match>
- <!-- generated code, we can't be held responsible for findbugs in it //-->
- <Class name="~org\.apache\.bookkeeper\.proto\.BookkeeperProtocol.*" />
+ <Class
name="~org\.apache\.bookkeeper\.proto\.(LedgerMetadataFormat|LedgerRereplicationLayoutFormat|UnderreplicatedLedgerFormat|CookieFormat|LockDataFormat|AuditorVoteFormat|CheckAllLedgersFormat|PlacementPolicyCheckFormat|ReplicasCheckFormat|BookieServiceInfoFormat|LightProtoCodec)(\$.*)?"
/>
</Match>
+ <!-- lightproto-generated classes from DbLedgerStorageDataFormats.proto -->
<Match>
- <!-- generated code, we can't be held responsible for findbugs in it //-->
- <Class
name="~org\.apache\.bookkeeper\.bookie\.storage\.ldb\.DbLedgerStorageDataFormats.*"
/>
+ <Class
name="~org\.apache\.bookkeeper\.bookie\.storage\.ldb\.(LedgerData|LightProtoCodec)(\$.*)?"
/>
</Match>
<Match>
<!-- generated code, we can't be held responsible for findbugs in it //-->
diff --git
a/microbenchmarks/src/main/java/org/apache/bookkeeper/proto/checksum/DigestManagerBenchmark.java
b/microbenchmarks/src/main/java/org/apache/bookkeeper/proto/checksum/DigestManagerBenchmark.java
index cdf8f5a1ed..5a7fede926 100644
---
a/microbenchmarks/src/main/java/org/apache/bookkeeper/proto/checksum/DigestManagerBenchmark.java
+++
b/microbenchmarks/src/main/java/org/apache/bookkeeper/proto/checksum/DigestManagerBenchmark.java
@@ -25,7 +25,7 @@ import io.netty.buffer.PooledByteBufAllocator;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.ThreadLocalRandom;
import java.util.concurrent.TimeUnit;
-import org.apache.bookkeeper.proto.DataFormats.LedgerMetadataFormat.DigestType;
+import org.apache.bookkeeper.proto.LedgerMetadataFormat.DigestType;
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.BenchmarkMode;
import org.openjdk.jmh.annotations.Fork;
diff --git
a/microbenchmarks/src/main/java/org/apache/bookkeeper/proto/checksum/DigestTypeBenchmark.java
b/microbenchmarks/src/main/java/org/apache/bookkeeper/proto/checksum/DigestTypeBenchmark.java
index 7201aba8cf..39cb2b6069 100644
---
a/microbenchmarks/src/main/java/org/apache/bookkeeper/proto/checksum/DigestTypeBenchmark.java
+++
b/microbenchmarks/src/main/java/org/apache/bookkeeper/proto/checksum/DigestTypeBenchmark.java
@@ -27,7 +27,7 @@ import io.netty.buffer.Unpooled;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.ThreadLocalRandom;
import java.util.concurrent.TimeUnit;
-import org.apache.bookkeeper.proto.DataFormats.LedgerMetadataFormat.DigestType;
+import org.apache.bookkeeper.proto.LedgerMetadataFormat.DigestType;
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.BenchmarkMode;
import org.openjdk.jmh.annotations.Fork;
diff --git a/pom.xml b/pom.xml
index c7ae8ee878..3a9f2a9af1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -220,6 +220,7 @@
<nar-maven-plugin.version>3.10.1</nar-maven-plugin.version>
<os-maven-plugin.version>1.7.1</os-maven-plugin.version>
<protobuf-maven-plugin.version>0.6.1</protobuf-maven-plugin.version>
+ <lightproto-maven-plugin.version>0.7.0</lightproto-maven-plugin.version>
<puppycrawl.checkstyle.version>9.3</puppycrawl.checkstyle.version>
<spotbugs-maven-plugin.version>4.7.3.2</spotbugs-maven-plugin.version>
<build-helper-maven-plugin.version>3.6.0</build-helper-maven-plugin.version>