public byte[] serialize(LedgerMetadata metadata) throws IOException { int formatVersion = metadata.getMetadataFormatVersion(); final byte[] serialized; switch (formatVersion) { case METADATA_FORMAT_VERSION_3: serialized = serializeVersion3(metadata); break; case METADATA_FORMAT_VERSION_2: serialized = serializeVersion2(metadata); break; case METADATA_FORMAT_VERSION_1: serialized = serializeVersion1(metadata); break; default: throw new IllegalArgumentException("Invalid format version " + formatVersion); } if (log.isDebugEnabled()) { String serializedStr; if (formatVersion > METADATA_FORMAT_VERSION_2) { serializedStr = Base64.getEncoder().encodeToString(serialized); } else { serializedStr = new String(serialized, UTF_8); } log.debug("Serialized with format {}: {}", formatVersion, serializedStr); } return serialized; }
public static LedgerMetadataBuilder from(LedgerMetadata other) { LedgerMetadataBuilder builder = new LedgerMetadataBuilder(); builder.metadataFormatVersion = other.getMetadataFormatVersion(); builder.ensembleSize = other.getEnsembleSize(); builder.writeQuorumSize = other.getWriteQuorumSize(); builder.ackQuorumSize = other.getAckQuorumSize(); builder.state = other.getState(); if (builder.state == State.CLOSED) { builder.lastEntryId = Optional.of(other.getLastEntryId()); builder.length = Optional.of(other.getLength()); } builder.ensembles.putAll(other.getAllEnsembles()); if (other.hasPassword()) { builder.password = Optional.of(other.getPassword()); builder.digestType = Optional.of(other.getDigestType()); } builder.ctime = other.getCtime(); /** Hack to get around fact that ctime was never versioned correctly */ builder.storeCtime = LedgerMetadataUtils.shouldStoreCtime(other); builder.customMetadata = ImmutableMap.copyOf(other.getCustomMetadata()); return builder; }