forked from apache/cassandra-gocql-driver
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
43 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
package gocql | ||
|
||
// HostFilter interface is used when a host is discovered via server sent events. | ||
type HostFilter interface { | ||
// Called when a new host is discovered, returning true will cause the host | ||
// to be added to the pools. | ||
Accept(host *HostInfo) bool | ||
} | ||
|
||
// HostFilterFunc converts a func(host HostInfo) bool into a HostFilter | ||
type HostFilterFunc func(host *HostInfo) bool | ||
|
||
func (fn HostFilterFunc) Accept(host *HostInfo) bool { | ||
return fn(host) | ||
} | ||
|
||
// AcceptAllFilter will accept all hosts | ||
func AcceptAllFilterfunc() HostFilter { | ||
return HostFilterFunc(func(host *HostInfo) bool { | ||
return true | ||
}) | ||
} | ||
|
||
// DataCentreHostFilter filters all hosts such that they are in the same data centre | ||
// as the supplied data centre. | ||
func DataCentreHostFilter(dataCentre string) HostFilter { | ||
return HostFilterFunc(func(host *HostInfo) bool { | ||
return host.DataCenter() == dataCentre | ||
}) | ||
} | ||
|
||
// WhiteListHostFilter filters incoming hosts by checking that their address is | ||
// in the initial hosts whitelist. | ||
func WhiteListHostFilter(hosts ...string) HostFilter { | ||
m := make(map[string]bool, len(hosts)) | ||
for _, host := range hosts { | ||
m[host] = true | ||
} | ||
|
||
return HostFilterFunc(func(host *HostInfo) bool { | ||
return m[host.Peer()] | ||
}) | ||
} |