---
name: "Search::Elasticsearch::Role::CxnPool::Sniff"
section: "3pm"
platform: "linux"
package: "libsearch-elasticsearch-perl"
version: "8.12-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Search::Elasticsearch::Role::CxnPool::Sniff"
---

# Search::Elasticsearch::Role::CxnPool::Sniff(3pm)

A CxnPool role for connecting to a local cluster with a dynamic node list

## NAME

Search::Elasticsearch::Role::CxnPool::Sniff - A CxnPool role for connecting to a local cluster with a dynamic node list

## VERSION

version 8.12

## CONFIGURATION

### "sniff\_interval"

How often should we perform a sniff in order to detect whether new nodes have been added to the cluster.  Defaults to \`300\` seconds.

### "sniff\_max\_content\_length"

Whether we should set the max\_content\_length dynamically while sniffing. Defaults to true unless a fixed `"max_content_length"` was specified.

## METHODS

### schedule\_check()

```
    $cxn_pool->schedule_check
```

Schedules a sniff before the next request is processed.

### parse\_sniff()

```
    $bool = $cxn_pool->parse_sniff(\%nodes);
```

Parses the response from a sniff request and extracts the hostname/ip of all listed nodes, filtered through "**should\_accept\_node()**". If any live nodes are found, they are passed to "**set\_cxns()**" in Search::Elasticsearch::Role::CxnPool. The max\_content\_length is also detected if "sniff\_max\_content\_length" is true.

### should\_accept\_node()

```
    $host = $cxn_pool->should_accept_node($host,$node_id,\%node_data)
```

This method serves as a hook which can be overridden by the user.  When a sniff is performed, this method is called with the `"host"` (eg `"192.168.5.100:9200"`), the `"node_id"` (the ID assigned to the node by Elasticsearch) and the `"node_data"` which contains the information about the node that Elasticsearch has returned, eg:

```
    {
        "transport_address" => "inet[192.168.5.100/192.168.5.100:9300]",
        "http" : {
           "publish_address"    => "inet[/192.168.5.100:9200]",
           "max_content_length" => "100mb",
           "bound_address"      => "inet[/0:0:0:0:0:0:0:0:9200]",
           "max_content_length_in_bytes" : 104857600
        },
        "version"       => "0.90.4",
        "name"          => "Silver Sable",
        "hostname"      => "search1.domain.com",
        "http_address"  => "inet[/192.168.5.100:9200]"
    }
```

If the node should be *accepted* (ie used to serve data), then it should return the `"host"` value to use.  By default, nodes are always accepted.

## AUTHOR

Enrico Zimuel \<enrico.zimuel@elastic.co\>

## COPYRIGHT AND LICENSE

This software is Copyright (c) 2024 by Elasticsearch BV.

This is free software, licensed under:

```
  The Apache License, Version 2.0, January 2004
```
