Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Initial UnknownHostException is Unrecoverable

Aperta
#62 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
3/5
Tempo stimato
1-2 giorni
Idoneità per principianti
45/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Ferma
Stack tecnologico
java
Ambito
networking

Direzione di ricerca

Inizia dal costruttore di RawSocketSender e dal suo metodo connect(), prestando particolare attenzione a come l'indirizzo del server viene memorizzato e riutilizzato. Verifica il comportamento quando la risoluzione iniziale del nome host fallisce e quando DNS cambia durante il failover; il lavoro è completo quando la riconnessione utilizza la risoluzione corrente del nome host invece di un vecchio indirizzo risolto.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

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.

Lingua principale
Java
Stelle
210
Fork
86
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di fluent/fluent-logger-java

Tutte le issue di fluent/fluent-logger-java

Issue simili

Altre issue su Java

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.