syntax = "proto3"; package neo.fs.v2.netmap; option go_package = "github.com/nspcc-dev/neofs-api-go/v2/netmap/grpc;netmap"; option csharp_namespace = "NeoFS.API.v2.Netmap"; // Operations on filters enum Operation { // No Operation defined OPERATION_UNSPECIFIED = 0; // Equal EQ = 1; // Not Equal NE = 2; // Greater then GT = 3; // Greater or equal GE = 4; // Less then LT = 5; // Less or equal LE = 6; // Logical OR OR = 7; // Logical AND AND = 8; } // Selector modifier showing how the node set will be formed // By default selector just groups by attribute into a bucket selecting nodes // only by their hash distance. enum Clause{ // No modifier defined. Will select nodes from bucket randomly. CLAUSE_UNSPECIFIED = 0; // SAME will select only nodes having the same value of bucket attribute SAME = 1; // DISTINCT will select nodes having different values of bucket attribute DISTINCT = 2; } // Filter message Filter { // Name of the filter or a reference to the named filter. // '*' means application to the whole unfiltered NetworkMap // At top level it's used as a filter name. At lower levels it's considered to // be a reference to another named filter string name = 1; // Key to filter string key = 2; // Filtering operation Operation op = 3; // Value to match string value = 4; // List of inner filters. Top level operation will be applied to the whole list. repeated Filter filters = 5; } // Selector message Selector { // Selector name to reference in object placement section string name = 1; // How many nodes to select from bucket uint32 count = 2; // Selector modifier showing how to form a bucket Clause clause = 3; // Attribute bucket to select from string attribute = 4; // Filter reference to select from string filter = 5; } // Exact bucket for each replica message Replica { // How many object replicas to put uint32 count = 1; // Named selector bucket to put in string selector = 2; } // Set of rules to select a subset of nodes able to store container's objects message PlacementPolicy { // Rules to set number of object replicas and place each one into a particular bucket repeated Replica replicas = 1; // Container backup factor controls how deep NeoFS will search for nodes // alternatives to include into container. uint32 container_backup_factor = 2; // Set of Selectors to form the container's nodes subset repeated Selector selectors = 3; // List of named filters to reference in selectors repeated Filter filters = 4; } // NeoFS node description message NodeInfo { // Public key of the NeoFS node in a binary format. bytes public_key = 1; // Ways to connect to a node string address = 2; // Administrator-defined Attributes of the NeoFS Storage Node. // // Node's attributes are mostly used during Storage Policy evaluation to // calculate object's placement and find a set of nodes satisfying policy // requirements. There are some "well-known" node attributes common to all the // Storage Nodes in the network and used implicitly with default values if not // explicitly set: // // * Capacity \ // Total available disk space in Gigabytes. // * Price \ // Price in GAS tokens for storing one GB of data during one Epoch. In node // attributes it's a string presenting floating point number with comma or // point delimiter for decimal part. In the Network Map it will be saved as // 64-bit unsigned integer representing number of minimal token fractions. // * Subnet \ // String ID of Node's storage subnet. There can be only one subnet served // by the Storage Node. // * Locode \ // Node's geographic location in // [UN/LOCODE](https://www.unece.org/cefact/codesfortrade/codes_index.html) // format approximated to the nearest point defined in standard. // * Country \ // Country code in // [ISO 3166-1_alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) // format. Calculated automatically from `Locode` attribute // * Region \ // Country's administative subdivision where node is located. Calculated // automatically from `Locode` attribute based on `SubDiv` field. Presented // in [ISO 3166-2](https://en.wikipedia.org/wiki/ISO_3166-2) format. // * City \ // City, town, village or rural area name where node is located written // without diacritics . Calculated automatically from `Locode` attribute. // // For detailed description of each well-known attribute please see the // corresponding section in NeoFS Technical specification. message Attribute { // Key of the node attribute. string key = 1; // Value of the node attribute. string value = 2; // Parent keys, if any. For example for `City` it could be `Region` and // `Country`. repeated string parents = 3; } // Carries list of the NeoFS node attributes in a string key-value format. repeated Attribute attributes = 3; // Represents the enumeration of various states of the NeoFS node. enum State { // Unknown state. UNSPECIFIED = 0; // Active state in the network. ONLINE = 1; // Network unavailable state. OFFLINE = 2; } // Carries state of the NeoFS node. State state = 4; }