Get desktop application:
View/edit binary Protocol Buffers messages
This message is used to store overall state about the CoordinatorClusterClock class in external storage.
/ The Cluster Time that is guaranteed to be greater than or equal to any / value the CoordinatorClusterClock will externalize to anyone, so that in / the event of a coordinator crash, the new coordinator can ensure the / monotonic property of Cluster Time. This time is periodically moved / forward so so that the CoordinatorClusterClock can continue to progress.
This protocol buffer message is used to store persistent data needed by CoordinatorUpdateManager. These protocol buffers are used for storing and retrieving data from ExternalStorage.
All operations with sequence numbers less than or equal to this value are known to have completed. After a coordinator crash, this tells the new coordinator which operations it must check to ensure that they have completed successfully.
Sequence numbers less than this value may have been assigned already, so a new coordinator should not use values smaller than this. Used to ensure that sequence numbers don't get reused after a coordinator crash.
/ The network format for RAMCloud::EnumerationIterator. Any changes / made here must also be made there as well.
/ See RAMCloud::EnumerationIterator::frames.
/ See RAMCloud::EnumerationIterator::Frame.
Used in:
/ See RAMCloud::EnumerationIterator::Frame::tabletStartHash.
/ See RAMCloud::EnumerationIterator::Frame::tabletEndHash.
/ See RAMCloud::EnumerationIterator::Frame::numBuckets.
/ See RAMCloud::EnumerationIterator::Frame::bucketIndex.
/ See RAMCloud::EnumerationIterator::Frame::bucketNextHash.
/ Serialization of a Histogram object. Please see Histogram.h's member / variable documentation for details on the fields below.
Used in:
,Each pair stores a unique bucket index and the count. Unclear if doing this an omitting empty buckets will be a net win over also including the index value.
Used in:
Used in:
/The id of the containing table
/The id of the index
/The id of the table that will hold objects for this indexlet.
/The first (smallest) key that is part of this indexlet.
/The smallest key greater than all the keys managed by this indexlet.
/ The id of the master owning this indexlet.
/ The service locator for the master owning this indexlet.
/ User data
/ Various metrics regarding log space usage and cleaner performance. These / fields are accumulated from a number of classes, including Log, LogCleaner, / LogSegment, SegletAllocator, and SegmentManager. / / Clients can query a server's log for these metrics in order to observe what / sort of load it's under and how it's performing.
/ Frequency of the server's timestamp counter. Needed to properly convert / the advertised ticks into seconds across machines of different speed. / The machines should probably just return nanosecond values instead, but / we can fix that another time.
/ The following fields are metrics maintained by the (Abstract)Log / classes. They're documented in Log::Metrics and AbstractLog::Metrics.
/ Log metrics related to cleaning. Filled in by the LogCleaner class.
Used in:
/ The following are compile-time constants. See LogCleaner.h for / details on their meaning.
/ Serialized form of LogCleanerMetrics::InMemory. See the C++ class / documentation for details.
Used in:
/ The index of each count corresponds to the LogEntryType enum.
/ Serialized form of LogCleanerMetrics::OnDisk. See the C++ class / documentation for details.
Used in:
/ The index of each count corresponds to the LogEntryType enum.
/ Serialized form of LogCleanerMetrics::Threads. See the C++ class / documentation for details.
Used in:
/ Log metrics related to allocation of seglets to in-memory segments. / Filled in by the SegletAllocator class.
Used in:
/ Total number of seglets in the system, including reserves.
/ Total number of seglets usable for storing data via log appends.
/ Number of seglets reserved for emergency head segments. These allow / the cleaner to issue a new digest and free space even when under / heavy memory pressure.
/ Number of seglets left in the emergency head reserve. If less than / the reserve amount, one or more emergency heads must currently be / allocated.
/ Number of seglets reserved for the log cleaner.
/ Number of seglets left in the cleaner reserve. If less than the / reserve amount, some are currently allocated for cleaning.
/ Number of seglets available for storing data in new head segments.
/ Log metrics related to allocated segments, both in memory and on disk. / Filled in by the SegmentManager class.
Used in:
/ Histogram tracking the number of segments replicated on backups. / Note that this value does not take R into account, so it is not / the number of total replicas.
/ Current count of the number of segments allocated on backups.
/ The index of each count corresponds to the LogEntryType enum.
* Log metadata for a master which is stored on the coordinator for use during its recovery. This is expected to be small and updated extremely rarely. Currently, masters use this to invalidate replicas which may have become inconsistent due to backup crashes. Even in an extremely large cluster this is expected to happen a few times per hour. When a backup crashes that a master was replicating an open segment to the ReplicaManager increments an "epoch" number for that segment. Replicas for that segment are tagged with the new epoch number (until enough of them are created to meet the replication factor). To prevent old replicas that were created with the old epoch number from being used it stores that epoch number here. Only the epoch for the most recent segment to experience a failure while open is stored. That is because, by construction, no earlier segment should be considered open/the head anyway during recovery (they must be closed). Therefore, any replica found on backups with a segment id less than what is included in this struct is invalid. Likewise, any replica found with a matching segment id but a lesser epoch is also invalid. Invalid replicas must not be used by recovery in any way: that includes for replay AND log digest.
Used in:
* Minimum segment id which a replica must have to be a valid replica of the log *IF* the replica is open (subject to the constraint of the #min_open_segment_epoch below). Closed replicas are always valid. Note: making this optional with a default value avoids the need to explicitly initialize in CoordinatorServerList.cc, so it doesn't have to understand what's in these protobufs.
* Minimum epoch a replica must have *IF* the replica is open *AND* the segment id is exactly the same as above. See note above about optional/default.
/ A list containing one or more performance counters from a RAMCloud / server.
/ The full list of metrics.
/ An individual metric.
Used in:
/ The name for this metric, such as "master.replicas".
/ Current value for the metric.
Message used by coordinator and recoveryMaster during recovery. At the beginning of a recovery, coordinator send a recoveryPartition to each recoveryMaster. When recoveryMaster finishes its job, it fills in some fields of recoveryPartition, and sends it back to coordinator. Same message goes both directions during a recovery.
/ The tablets.
/ The indexlets.
/ Configuration details for a server. This is a serialized form of all fields / in the ServerConfig class.
/ A locator the server can use to contact the cluster coordinator.
/ The locator the server should listen for incoming messages on.
/ Tag given to replicas stored on this backup. See the ServerConfig class / documentation for more details.
/ Which services this server is running.
/ Whether the failure detection thread should be started.
/ All memory in the process is pinned.
/ Size of each segment in bytes.
/ Size of each seglet in bytes.
/ Largest allowable RAMCloud object, in bytes.
/ Largest allowable key for a RAMCloud object, in bytes.
/ Max number of cores to use at once for dispatch and worker threads.
/ The server's MasterService configuration, if it is running one.
/ The server's BackupService configuration, if it is running one.
Used in:
/ Whether the backup garbage collector is enabled or not.
/ Whether the BackupService should store replicas in RAM or on disk.
/ Number of replica-sized storage chunks to allocate on the backup's / backing store.
/ Maximum number of segments that the backup will buffer in memory / before rejecting new segments until the disk catches up.
/ Maximum number of replicas that any given master recovery will / keep in memory at any given time.
/ Path to a file to use for the backing store if inMemory is false.
/ BackupStrategy to use for balancing replicas across backups.
/ If non-0, the fake backup disk speed this server is advertising.
/ If non-0, limit writes to backup to this many megabytes per second.
/ Configuration details specific to the MasterService on a server.
Used in:
/ Total number bytes to use for the in-memory Log.
/ Total number of bytes to use for the HashTable.
/ If true, disable the log cleaner entirely.
/ If true, disable in-memory cleaning and always do disk cleaning.
/ Determines how much space may be used on backup disks, as a multiple / of the in-memory log size.
/ If in-memory cleaning is enabled, this specifies the balance between / in-memory and disk cleaning.
/ LogCleaner::Balancer type used to schedule cleaning and compaction.
/ Maximum number of threads the cleaner will use.
/ Number of replicas to keep per segment stored on backups.
/ Specifies whether to use hugepage memory to allocate / LargeBlockOfMemory.
/ Specifies whether to use MinCopysets or random replication.
/ If true, allow replication to local backup.
/ Specifies whether to use masterServerId plus one with wraparound / or random replication for backupServerId.
/ A list of servers, which describes the services they provide and a / means of contacting them using RAMCloud transports. / / This message is used both when pulling complete lists from the / coordinator (GetServerListRpc) and when pushing delta updates / to other servers by the coordinator (UpdateServerListRpc).
/ List of servers. If type is UPDATE then this list should only have / a single entry.
/ Generation number of the Coordinator's list that corresponds to / the information in this message. Used to ignore duplicate or / oout-of-order information. See CoordinatorServerList::version and / ServerList::version for more details.
Used in:
/ Which services this server is running.
/ A unique id for the service.
/ A locator for the service.
/ Disk bandwidth of the backup server in MB/s, if this entry represents / a server which is running a backup service.
/ The current status of this server in terms of cluster membership. / See above for ServerStatus in ServerList.h for legal enum values.
/ The replicationId of the server.
Used in:
/ Specifies that this is a full server list
/ Specifies that this is a delta update
/ Describes the contents of a single entry in a CoordinatorServerList. / Used to save information on external storage in order to recover / the CoordinatorServerList after a coordinator crash.
/ Which services this server is running.
/ Unique identifier for the service (contents of a ServerId object).
/ Locator for the service.
/ Disk bandwidth of the backup server in MB/s, if this entry represents / a server which is running a backup service.
/ The current status of this server in terms of cluster membership. / See ServerStatus enum in AbstractServerList.h for legal values.
/ Identifies the replication group containing this server.
/ Information needed for master recovery, which is managed outside / CoordinatorServerList; we store it and recover it without knowing / what it is or exactly how it's used.
/ Updates that may not have been received by all of the servers / in the cluster yet. There will always be at least one element / in this list (the most recent update).
/ Describes one update to this entry
Used in:
/ New status of the server, as of this update. See ServerStatus enum / for legal values.
/ Server list version corresponding to this update.
/ CoordinatorUpdateManager's sequence number for this update.
/ A list of statistical information about a single master server. / / This message is used when a master server is asked for its statistical / information via GetServerStatisticsRpc.
/ List of TabletEntries.
/ Stats on all SpinLock instances, to monitor contention.
Each tablet on the master has a correspsonding TabletEntry in the ServerStatistics where its access statistics are being stored.
Used in:
/ The id of the containing table.
/ The smallest hash value for a key that is in this tablet.
/ The largest hash value for a key that is in this tablet.
/ Read and write access statistics for a single tablet.
/ A list of SpinLocks instantiated in a server, including the lock's / name (if one was given), and statistics used to monitor contention / for each lock.
Used in:
/ See SpinLock.h.
Used in:
/ String name of the SpinLock.
/ Number of times the lock has been acquired.
/ Number of times the lock has been acquired, but only after having / to spin wait first.
/ Total number of nanoseconds spent waiting to acquire the lock when / it was already held.
For each table, the coordinator stores one of these messages in external storage. The message contains two things: (a) the current state of the table, and (b) information about operations in progress, which will used to complete those operations if the current coordinator crashes.
/ The table's name, as specified in the createTable RPC that / created the table.
/ Identifier for the table (used in RPCs such as read and write).
/ The tablets.
/ Sequence number for the most recent update. 0 means the most / recent update does not have any recovery-related issues.
/ If this value is present, it is true, indicating that the most / recent update was to create the table.
/ If this value is present, it is true, indicating that the most / recent update was to delete the table.
/ Each message of this type holds information about an index corresponding / to this table.
Used in:
/ ID for the particular secondary index.
/ Each message of this types holds information about an indexlet / that is part of this index.
Used in:
/ Key blob marking the start of the indexed key range for this indexlet.
/ Blob of the smallest key in the given index that is after firstKey / in the index order but not part of this indexlet.
/ ID of the backing table that will hold objects for this indexlet. / This table will have only one tablet that is entirely owned by one / server. It will never be partitioned into tablets across different / servers.
/ ID of the master owning the table with ID backing_table_id.
/ A message of this type is present if the most recent update was / to reassign a tablet.
Used in:
/ ID of the server to which the tablet was reassigned.
/ Key hash range for the reassigned tablet.
/ A message of this type is present if the most recent update was / to reassign an indexlet.
Used in:
/ ID of the server to which the indexlet was reassigned.
/ ID of the secondary index to which this indexlet belongs.
/ Key range for this indexlet.
/ ID of the backing table that will hold objects for this indexlet. / This table will have only one tablet that is entirely owned by one / server. It will never be partitioned into tablets across different / servers.
/ A message of this type is present if the most recent update was / to split a tablet in the table.
Used in:
/ The ID of the master owning the tablet that was split.
/ Key hash value of the split point.
/ Each message of this type holds information about one tablet in the / table.
Used in:
/ The smallest hash value for a key that is in this tablet.
/ The largest hash value for a key that is in this tablet.
/ The state of the tablet, see above.
/ The ID of the master owning this tablet.
/ Id of the head segment in the log of server_id at the time the / tablet was assigned to the server. Any earlier segments in the / master's log cannot contain data belonging to this tablet.
/ Offset in the head segment of server_id's log at the time it was / assigned this tablet. Any objects appearing earlier in that segment / cannot contain data belonging to this tablet.
Used in:
/ The tablet is available.
/ The tablet is being recovered, so it's not available.
/ Used only for testing.
Message used for encoding tablet and index information for a particular table id. Used by the object finder to fetch information from coordinator.
/ The tablets.
/ The indexes.
Used in:
/ The id of the index.
/ The type of the index.
/ The indexlets for each index.
Used in:
/The first (smallest) key that is part of this indexlet.
/The smallest key greater than all the keys managed by this indexlet.
/ The ID of the master owning this indexlet.
/ The service locator for the master owning this indexlet.
Used in:
/ The id of the containing table.
/ The smallest hash value for a key that is in this tablet.
/ The largest hash value for a key that is in this tablet.
/ The state of the tablet, see above.
/ The ID of the master owning this tablet.
/ The service locator for the master owning this tablet.
/ An opaque field which happens to be large enough for a pointer.
/ Id of the the log head belonging to the master that owns this / tablet when it was assigned to the server. Any earlier segments / cannot contain data belonging to this tablet.
/ Offset in the log head segment belonging to the master that owns this / tablet when it was assigned to the server. Any objects appearing / earlier in that segment cannot contain data belonging to this tablet.
Used in:
/ The tablet is available.
/ The tablet is being recovered, so it's not available.
This message is used to store overall state about the TableManager class on external storage.
/ The smallest table id that is guaranteed never to have been used.
A set of tablets (contiguous ranges of tables).
/ The tablets.
Used in:
,/ The id of the containing table.
/ The smallest hash value for a key that is in this tablet.
/ The largest hash value for a key that is in this tablet.
/ The state of the tablet, see above.
/ The ID of the master owning this tablet.
/ The service locator for the master owning this tablet.
/ An opaque field which happens to be large enough for a pointer.
/ Id of the the log head belonging to the master that owns this / tablet when it was assigned to the server. Any earlier segments / cannot contain data belonging to this tablet.
/ Offset in the log head segment belonging to the master that owns this / tablet when it was assigned to the server. Any objects appearing / earlier in that segment cannot contain data belonging to this tablet.
Used in:
/ The tablet is available.
/ The tablet is being recovered, so it's not available.