Skip to content

chore: minor changes in AddressBook to support planned move #18933

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Apr 23, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import static com.swirlds.logging.legacy.LogMarker.STARTUP;
import static com.swirlds.platform.roster.RosterRetriever.retrieveActiveOrGenesisRoster;
import static com.swirlds.platform.roster.RosterUtils.buildAddressBook;
import static com.swirlds.platform.system.address.AddressBookUtils.addressBookConfigText;

import com.swirlds.common.context.PlatformContext;
import com.swirlds.platform.config.AddressBookConfig;
Expand Down Expand Up @@ -298,25 +299,25 @@ private synchronized void recordAddressBooks(@NonNull final AddressBook usedAddr
.toFile();
try (final FileWriter out = new FileWriter(debugFile)) {
out.write(CONFIG_ADDRESS_BOOK_HEADER + "\n");
out.write(configAddressBook.toConfigText() + "\n\n");
out.write(addressBookConfigText(configAddressBook) + "\n\n");
out.write(STATE_ADDRESS_BOOK_HEADER + "\n");
final String text =
stateAddressBook == null ? STATE_ADDRESS_BOOK_NULL : stateAddressBook.toConfigText();
stateAddressBook == null ? STATE_ADDRESS_BOOK_NULL : addressBookConfigText(stateAddressBook);
out.write(text + "\n\n");
out.write(USED_ADDRESS_BOOK_HEADER + "\n");
if (usedAddressBook == configAddressBook) {
out.write(CONFIG_ADDRESS_BOOK_USED);
} else if (usedAddressBook == stateAddressBook) {
out.write(STATE_ADDRESS_BOOK_USED);
} else {
out.write(usedAddressBook.toConfigText());
out.write(addressBookConfigText(usedAddressBook));
}
out.write("\n\n");
}
final File usedFile = Path.of(this.pathToAddressBookDirectory.toString(), addressBookFileName)
.toFile();
try (final FileWriter out = new FileWriter(usedFile)) {
out.write(usedAddressBook.toConfigText());
out.write(addressBookConfigText(usedAddressBook));
}
} catch (final IOException e) {
logger.error(EXCEPTION.getMarker(), "Not able to write address book to file. ", e);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
package com.swirlds.platform.system.address;

import com.swirlds.base.state.MutabilityException;
import com.swirlds.platform.system.address.internal.AddressBookIterator;
import edu.umd.cs.findbugs.annotations.NonNull;
import edu.umd.cs.findbugs.annotations.Nullable;
import java.io.IOException;
Expand Down Expand Up @@ -582,16 +581,6 @@ public Set<NodeId> getNodeIdSet() {
return new HashSet<>(addresses.keySet());
}

/**
* The text form of an address book that appears in config.txt
*
* @return the string form of the AddressBook that would appear in config.txt
*/
@NonNull
public String toConfigText() {
return AddressBookUtils.addressBookConfigText(this);
}

/**
* {@inheritDoc}
*/
Expand Down Expand Up @@ -649,4 +638,35 @@ public String toString() {

return sb.toString();
}

/**
* An iterator that walks over entries in an address book.
*/
public static class AddressBookIterator implements Iterator<Address> {

private final Iterator<NodeId> orderedNodeIds;
private final Map<NodeId, Address> addresses;

public AddressBookIterator(
@NonNull final Iterator<NodeId> orderedNodeIds, @NonNull final Map<NodeId, Address> addresses) {
this.orderedNodeIds = Objects.requireNonNull(orderedNodeIds, "the orderedNodeIds cannot be null");
this.addresses = Objects.requireNonNull(addresses, "the addresses cannot be null");
}

/**
* {@inheritDoc}
*/
@Override
public boolean hasNext() {
return orderedNodeIds.hasNext();
}

/**
* {@inheritDoc}
*/
@Override
public Address next() {
return Objects.requireNonNull(addresses.get(orderedNodeIds.next()));
}
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import static com.swirlds.platform.state.address.AddressBookInitializer.STATE_ADDRESS_BOOK_NULL;
import static com.swirlds.platform.state.address.AddressBookInitializer.STATE_ADDRESS_BOOK_USED;
import static com.swirlds.platform.state.address.AddressBookInitializer.USED_ADDRESS_BOOK_HEADER;
import static com.swirlds.platform.system.address.AddressBookUtils.addressBookConfigText;
import static com.swirlds.platform.test.fixtures.state.TestPlatformStateFacade.TEST_PLATFORM_STATE_FACADE;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
Expand Down Expand Up @@ -533,21 +534,21 @@ private void assertAddressBookFileContent(
final String usedFileContent = Files.readString(usedFile.toPath());

// check used AddressBook content
final String usedAddressBookText = usedAddressBook.toConfigText();
final String usedAddressBookText = addressBookConfigText(usedAddressBook);
assertEquals(
usedAddressBookText,
usedFileContent,
"The used file content is not the same as the used address book.");

// check debug AddressBook content
final String configText = CONFIG_ADDRESS_BOOK_HEADER + "\n" + configAddressBook.toConfigText();
final String configText = CONFIG_ADDRESS_BOOK_HEADER + "\n" + addressBookConfigText(configAddressBook);
assertTrue(
debugFileContent.contains(configText),
"The configAddressBook content is not:\n" + configText + "\n\n debugFileContent:\n" + debugFileContent);

// check stateAddressBook content
final String stateAddressBookText =
(stateAddressBook == null ? STATE_ADDRESS_BOOK_NULL : stateAddressBook.toConfigText());
(stateAddressBook == null ? STATE_ADDRESS_BOOK_NULL : addressBookConfigText(stateAddressBook));
final String stateText = STATE_ADDRESS_BOOK_HEADER + "\n" + stateAddressBookText;

assertTrue(
Expand All @@ -561,7 +562,7 @@ private void assertAddressBookFileContent(
} else if (Objects.equals(usedAddressBook, stateAddressBook)) {
usedText += STATE_ADDRESS_BOOK_USED;
} else {
usedText += usedAddressBook.toConfigText();
usedText += addressBookConfigText(usedAddressBook);
}
assertTrue(
debugFileContent.contains(usedText),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// SPDX-License-Identifier: Apache-2.0
package com.swirlds.platform.system.address;

import static com.swirlds.platform.system.address.AddressBookUtils.addressBookConfigText;
import static com.swirlds.platform.system.address.AddressBookUtils.parseAddressBookText;
import static org.hiero.base.utility.test.fixtures.RandomUtils.getRandomPrintSeed;
import static org.junit.jupiter.api.Assertions.assertEquals;
Expand Down Expand Up @@ -396,10 +397,10 @@ void roundTripSerializeAndDeserializeCompatibleWithConfigTxt() throws ParseExcep
final NodeId secondNode = addressBook.getNodeId(1);
addressBook.add(addressBook.getAddress(secondNode).copySetMemo("has a memo"));

final String addressBookText = addressBook.toConfigText();
final String addressBookText = addressBookConfigText(addressBook);
final AddressBook parsedAddressBook = parseAddressBookText(addressBookText);
// Equality done on toConfigText() strings since the randomly generated address book has public key data.
assertEquals(addressBookText, parsedAddressBook.toConfigText(), "The AddressBooks are not equal.");
assertEquals(addressBookText, addressBookConfigText(parsedAddressBook), "The AddressBooks are not equal.");
assertTrue(parsedAddressBook.getAddress(firstNode).getMemo().isEmpty(), "memo is empty");
assertEquals(parsedAddressBook.getAddress(secondNode).getMemo(), "has a memo", "memo matches");

Expand Down