Hacktoberfest 2026: die Issues, die Maintainer für den Oktober markiert haben – offen und einsteigerfreundlich. Hacktoberfest-Issues durchsuchen

Initial UnknownHostException is Unrecoverable

Offen
#62 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Anfängerfreundlichkeit
45/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Veraltet
Tech-Stack
java
Bereich
networking

Rechercherichtung

Beginne mit dem Konstruktor von RawSocketSender und seiner Methode connect(), insbesondere damit, wie die Serveradresse gespeichert und wiederverwendet wird. Überprüfe das Verhalten, wenn die anfängliche Hostnamenauflösung fehlschlägt und wenn sich DNS während des Failovers ändert; abgeschlossen ist die Aufgabe, wenn die Wiederverbindung die aktuelle Hostnamenauflösung statt einer alten aufgelösten Adresse verwendet.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

The RawSocketSender takes a host and port in its constructor and coverts these into an InetSocketAddress, which tries to resolve the hostname. On RawSocketSender connect this InetSocketAddress is used to reconnect, but if it wasn't resolved during fluent-logger init then it will fail over and over. The code snipped from RawSocketSender is below:

public RawSocketSender(String host, int port, int timeout, int bufferCapacity, Reconnector reconnector) {
    msgpack = new MessagePack();
    msgpack.register(Event.class, Event.EventTemplate.INSTANCE);
    pendings = ByteBuffer.allocate(bufferCapacity);
    server = new InetSocketAddress(host, port); // Create InetSocketAddress on init
    this.reconnector = reconnector;
    name = String.format("%s_%d_%d_%d", host, port, timeout, bufferCapacity);
    this.timeout = timeout;
}

private void connect() throws IOException {
    try {
        socket = new Socket();
        socket.connect(server, timeout); // Reconnection uses pre-resolved server field
        out = new BufferedOutputStream(socket.getOutputStream());
    } catch (IOException e) {
        throw e;
    }
}

This issue comes up when using the fluent-logger in a highly dynamic environment (like on Docker Swarm) where apps may come up before a DNS entry in Consul is even resolvable. It also means that during failover of a Fluent host (triggering a DNS change) the then failing socket connection will always try the old Fluent host IP and never re-resolve the DNS entry.

My recommendation is to store the Fluent host and port as private fields within the RawSocketSender, not a resolved InetSocketAddress (now stored as this.server) and create a new InetSocketAddress on every socket connection.

I understand there will be performance implications of this and am happy to submit a PR, but wanted to bring it up in an issue in case there were reasons for implementing the RawSocketSender the current way.

Vorherrschende Sprache
Java
Sterne
210
Forks
86
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Entwicklungsumgebung

Dieses Projekt bietet weder Dev-Container noch Dockerfile noch Beitragsleitfaden – die Einrichtung liegt bei Ihnen. Beginnen Sie mit der README; die allgemeinen Schritte stehen in unserem Leitfaden für den ersten Beitrag.

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus fluent/fluent-logger-java

Alle Issues in fluent/fluent-logger-java

Ähnliche Issues

Weitere Issues zu Java

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.