package loadcontroller import ( "context" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container" ) // UsedSpaceHandler describes the signature of the container.SizeEstimation // value handling function. // // Termination of processing without failures is usually signaled // with a zero error, while a specific value may describe the reason // for failure. type UsedSpaceHandler func(container.SizeEstimation) error // UsedSpaceFilter describes the signature of the function for // checking whether a value meets a certain criterion. // // Return of true means conformity, false - vice versa. type UsedSpaceFilter func(container.SizeEstimation) bool // Iterator is a group of methods provided by entity // which can iterate over a group of container.SizeEstimation values. type Iterator interface { // Iterate must start an iterator over values that // meet the filter criterion (returns true). // For each such value should call a handler, the error // of which should be directly returned from the method. // // Internal failures of the iterator are also signaled via // an error. After a successful call to the last value // handler, nil should be returned. Iterate(UsedSpaceFilter, UsedSpaceHandler) error } // IteratorProvider is a group of methods provided // by entity which generates iterators over // container.SizeEstimation values. type IteratorProvider interface { // InitIterator should return an initialized Iterator. // // Initialization problems are reported via error. // If no error was returned, then the Iterator must not be nil. // // Implementations can have different logic for different // contexts, so specific ones may document their own behavior. InitIterator() (Iterator, error) } // Writer describes the interface for storing container.SizeEstimation values. // // This interface is provided by both local storage // of values and remote (wrappers over the RPC). type Writer interface { // Put performs a write operation of container.SizeEstimation value // and returns any error encountered. // // All values after the Close call must be flushed to the // physical target. Implementations can cache values before // Close operation. // // Put must not be called after Close. Put(container.SizeEstimation) error // Close exits with method-providing Writer. // // All cached values must be flushed before // the Close's return. // // Methods must not be called after Close. Close(ctx context.Context) error } // WriterProvider is a group of methods provided // by entity which generates keepers of // container.SizeEstimation values. type WriterProvider interface { // InitWriter should return an initialized Writer. // // Initialization problems are reported via error. // If no error was returned, then the Writer must not be nil. InitWriter(route []ServerInfo) (Writer, error) } // ServerInfo describes a set of // characteristics of a point in a route. type ServerInfo interface { // PublicKey returns public key of the node // from the route in a binary representation. PublicKey() []byte // Iterates over network addresses of the node // in the route. Breaks iterating on true return // of the handler. IterateAddresses(func(string) bool) // Returns number of server's network addresses. NumberOfAddresses() int // ExternalAddresses returns external node's addresses. ExternalAddresses() []string }