<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Developer guide on etcd</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-guide/</link><description>Recent content in Developer guide on etcd</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-guide/index.xml" rel="self" type="application/rss+xml"/><item><title>Discovery service protocol</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-guide/discovery_protocol/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-guide/discovery_protocol/</guid><description>&lt;p&gt;Discovery service protocol helps new etcd member to discover all other members in cluster bootstrap phase using a shared discovery URL.&lt;/p&gt;
&lt;p&gt;Discovery service protocol is &lt;em&gt;only&lt;/em&gt; used in cluster bootstrap phase, and cannot be used for runtime reconfiguration or cluster monitoring.&lt;/p&gt;
&lt;p&gt;The protocol uses a new discovery token to bootstrap one &lt;em&gt;unique&lt;/em&gt; etcd cluster. Remember that one discovery token can represent only one etcd cluster. As long as discovery protocol on this token starts, even if it fails halfway, it must not be used to bootstrap another etcd cluster.&lt;/p&gt;</description></item><item><title>etcd API Reference</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-guide/api_reference_v3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-guide/api_reference_v3/</guid><description>&lt;p&gt;This is a generated documentation. Please read the proto files for more.&lt;/p&gt;
&lt;h5 id="service-auth-etcdserveretcdserverpbrpcproto"&gt;service &lt;code&gt;Auth&lt;/code&gt; (etcdserver/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;AuthEnable&lt;/td&gt;
 &lt;td&gt;AuthEnableRequest&lt;/td&gt;
 &lt;td&gt;AuthEnableResponse&lt;/td&gt;
 &lt;td&gt;AuthEnable enables authentication.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;AuthDisable&lt;/td&gt;
 &lt;td&gt;AuthDisableRequest&lt;/td&gt;
 &lt;td&gt;AuthDisableResponse&lt;/td&gt;
 &lt;td&gt;AuthDisable disables authentication.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Authenticate&lt;/td&gt;
 &lt;td&gt;AuthenticateRequest&lt;/td&gt;
 &lt;td&gt;AuthenticateResponse&lt;/td&gt;
 &lt;td&gt;Authenticate processes an authenticate request.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserAdd&lt;/td&gt;
 &lt;td&gt;AuthUserAddRequest&lt;/td&gt;
 &lt;td&gt;AuthUserAddResponse&lt;/td&gt;
 &lt;td&gt;UserAdd adds a new user.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserGet&lt;/td&gt;
 &lt;td&gt;AuthUserGetRequest&lt;/td&gt;
 &lt;td&gt;AuthUserGetResponse&lt;/td&gt;
 &lt;td&gt;UserGet gets detailed user information.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserList&lt;/td&gt;
 &lt;td&gt;AuthUserListRequest&lt;/td&gt;
 &lt;td&gt;AuthUserListResponse&lt;/td&gt;
 &lt;td&gt;UserList gets a list of all users.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserDelete&lt;/td&gt;
 &lt;td&gt;AuthUserDeleteRequest&lt;/td&gt;
 &lt;td&gt;AuthUserDeleteResponse&lt;/td&gt;
 &lt;td&gt;UserDelete deletes a specified user.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserChangePassword&lt;/td&gt;
 &lt;td&gt;AuthUserChangePasswordRequest&lt;/td&gt;
 &lt;td&gt;AuthUserChangePasswordResponse&lt;/td&gt;
 &lt;td&gt;UserChangePassword changes the password of a specified user.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserGrantRole&lt;/td&gt;
 &lt;td&gt;AuthUserGrantRoleRequest&lt;/td&gt;
 &lt;td&gt;AuthUserGrantRoleResponse&lt;/td&gt;
 &lt;td&gt;UserGrant grants a role to a specified user.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;UserRevokeRole&lt;/td&gt;
 &lt;td&gt;AuthUserRevokeRoleRequest&lt;/td&gt;
 &lt;td&gt;AuthUserRevokeRoleResponse&lt;/td&gt;
 &lt;td&gt;UserRevokeRole revokes a role of specified user.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleAdd&lt;/td&gt;
 &lt;td&gt;AuthRoleAddRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleAddResponse&lt;/td&gt;
 &lt;td&gt;RoleAdd adds a new role.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleGet&lt;/td&gt;
 &lt;td&gt;AuthRoleGetRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleGetResponse&lt;/td&gt;
 &lt;td&gt;RoleGet gets detailed role information.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleList&lt;/td&gt;
 &lt;td&gt;AuthRoleListRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleListResponse&lt;/td&gt;
 &lt;td&gt;RoleList gets lists of all roles.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleDelete&lt;/td&gt;
 &lt;td&gt;AuthRoleDeleteRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleDeleteResponse&lt;/td&gt;
 &lt;td&gt;RoleDelete deletes a specified role.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleGrantPermission&lt;/td&gt;
 &lt;td&gt;AuthRoleGrantPermissionRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleGrantPermissionResponse&lt;/td&gt;
 &lt;td&gt;RoleGrantPermission grants a permission of a specified key or range to a specified role.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RoleRevokePermission&lt;/td&gt;
 &lt;td&gt;AuthRoleRevokePermissionRequest&lt;/td&gt;
 &lt;td&gt;AuthRoleRevokePermissionResponse&lt;/td&gt;
 &lt;td&gt;RoleRevokePermission revokes a key or range permission of a specified role.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="service-cluster-etcdserveretcdserverpbrpcproto"&gt;service &lt;code&gt;Cluster&lt;/code&gt; (etcdserver/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;MemberAdd&lt;/td&gt;
 &lt;td&gt;MemberAddRequest&lt;/td&gt;
 &lt;td&gt;MemberAddResponse&lt;/td&gt;
 &lt;td&gt;MemberAdd adds a member into the cluster.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;MemberRemove&lt;/td&gt;
 &lt;td&gt;MemberRemoveRequest&lt;/td&gt;
 &lt;td&gt;MemberRemoveResponse&lt;/td&gt;
 &lt;td&gt;MemberRemove removes an existing member from the cluster.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;MemberUpdate&lt;/td&gt;
 &lt;td&gt;MemberUpdateRequest&lt;/td&gt;
 &lt;td&gt;MemberUpdateResponse&lt;/td&gt;
 &lt;td&gt;MemberUpdate updates the member configuration.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;MemberList&lt;/td&gt;
 &lt;td&gt;MemberListRequest&lt;/td&gt;
 &lt;td&gt;MemberListResponse&lt;/td&gt;
 &lt;td&gt;MemberList lists all the members in the cluster.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="service-kv-etcdserveretcdserverpbrpcproto"&gt;service &lt;code&gt;KV&lt;/code&gt; (etcdserver/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Range&lt;/td&gt;
 &lt;td&gt;RangeRequest&lt;/td&gt;
 &lt;td&gt;RangeResponse&lt;/td&gt;
 &lt;td&gt;Range gets the keys in the range from the key-value store.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Put&lt;/td&gt;
 &lt;td&gt;PutRequest&lt;/td&gt;
 &lt;td&gt;PutResponse&lt;/td&gt;
 &lt;td&gt;Put puts the given key into the key-value store. A put request increments the revision of the key-value store and generates one event in the event history.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;DeleteRange&lt;/td&gt;
 &lt;td&gt;DeleteRangeRequest&lt;/td&gt;
 &lt;td&gt;DeleteRangeResponse&lt;/td&gt;
 &lt;td&gt;DeleteRange deletes the given range from the key-value store. A delete request increments the revision of the key-value store and generates a delete event in the event history for every deleted key.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Txn&lt;/td&gt;
 &lt;td&gt;TxnRequest&lt;/td&gt;
 &lt;td&gt;TxnResponse&lt;/td&gt;
 &lt;td&gt;Txn processes multiple requests in a single transaction. A txn request increments the revision of the key-value store and generates events with the same revision for every completed request. It is not allowed to modify the same key several times within one txn.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Compact&lt;/td&gt;
 &lt;td&gt;CompactionRequest&lt;/td&gt;
 &lt;td&gt;CompactionResponse&lt;/td&gt;
 &lt;td&gt;Compact compacts the event history in the etcd key-value store. The key-value store should be periodically compacted or the event history will continue to grow indefinitely.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="service-lease-etcdserveretcdserverpbrpcproto"&gt;service &lt;code&gt;Lease&lt;/code&gt; (etcdserver/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;LeaseGrant&lt;/td&gt;
 &lt;td&gt;LeaseGrantRequest&lt;/td&gt;
 &lt;td&gt;LeaseGrantResponse&lt;/td&gt;
 &lt;td&gt;LeaseGrant creates a lease which expires if the server does not receive a keepAlive within a given time to live period. All keys attached to the lease will be expired and deleted if the lease expires. Each expired key generates a delete event in the event history.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;LeaseRevoke&lt;/td&gt;
 &lt;td&gt;LeaseRevokeRequest&lt;/td&gt;
 &lt;td&gt;LeaseRevokeResponse&lt;/td&gt;
 &lt;td&gt;LeaseRevoke revokes a lease. All keys attached to the lease will expire and be deleted.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;LeaseKeepAlive&lt;/td&gt;
 &lt;td&gt;LeaseKeepAliveRequest&lt;/td&gt;
 &lt;td&gt;LeaseKeepAliveResponse&lt;/td&gt;
 &lt;td&gt;LeaseKeepAlive keeps the lease alive by streaming keep alive requests from the client to the server and streaming keep alive responses from the server to the client.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;LeaseTimeToLive&lt;/td&gt;
 &lt;td&gt;LeaseTimeToLiveRequest&lt;/td&gt;
 &lt;td&gt;LeaseTimeToLiveResponse&lt;/td&gt;
 &lt;td&gt;LeaseTimeToLive retrieves lease information.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;LeaseLeases&lt;/td&gt;
 &lt;td&gt;LeaseLeasesRequest&lt;/td&gt;
 &lt;td&gt;LeaseLeasesResponse&lt;/td&gt;
 &lt;td&gt;LeaseLeases lists all existing leases.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="service-maintenance-etcdserveretcdserverpbrpcproto"&gt;service &lt;code&gt;Maintenance&lt;/code&gt; (etcdserver/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Alarm&lt;/td&gt;
 &lt;td&gt;AlarmRequest&lt;/td&gt;
 &lt;td&gt;AlarmResponse&lt;/td&gt;
 &lt;td&gt;Alarm activates, deactivates, and queries alarms regarding cluster health.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Status&lt;/td&gt;
 &lt;td&gt;StatusRequest&lt;/td&gt;
 &lt;td&gt;StatusResponse&lt;/td&gt;
 &lt;td&gt;Status gets the status of the member.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Defragment&lt;/td&gt;
 &lt;td&gt;DefragmentRequest&lt;/td&gt;
 &lt;td&gt;DefragmentResponse&lt;/td&gt;
 &lt;td&gt;Defragment defragments a member&amp;rsquo;s backend database to recover storage space.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Hash&lt;/td&gt;
 &lt;td&gt;HashRequest&lt;/td&gt;
 &lt;td&gt;HashResponse&lt;/td&gt;
 &lt;td&gt;Hash computes the hash of whole backend keyspace, including key, lease, and other buckets in storage. This is designed for testing ONLY! Do not rely on this in production with ongoing transactions, since Hash operation does not hold MVCC locks. Use &amp;ldquo;HashKV&amp;rdquo; API instead for &amp;ldquo;key&amp;rdquo; bucket consistency checks.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;HashKV&lt;/td&gt;
 &lt;td&gt;HashKVRequest&lt;/td&gt;
 &lt;td&gt;HashKVResponse&lt;/td&gt;
 &lt;td&gt;HashKV computes the hash of all MVCC keys up to a given revision. It only iterates &amp;ldquo;key&amp;rdquo; bucket in backend storage.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Snapshot&lt;/td&gt;
 &lt;td&gt;SnapshotRequest&lt;/td&gt;
 &lt;td&gt;SnapshotResponse&lt;/td&gt;
 &lt;td&gt;Snapshot sends a snapshot of the entire backend from a member over a stream to a client.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;MoveLeader&lt;/td&gt;
 &lt;td&gt;MoveLeaderRequest&lt;/td&gt;
 &lt;td&gt;MoveLeaderResponse&lt;/td&gt;
 &lt;td&gt;MoveLeader requests current leader node to transfer its leadership to transferee.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="service-watch-etcdserveretcdserverpbrpcproto"&gt;service &lt;code&gt;Watch&lt;/code&gt; (etcdserver/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Watch&lt;/td&gt;
 &lt;td&gt;WatchRequest&lt;/td&gt;
 &lt;td&gt;WatchResponse&lt;/td&gt;
 &lt;td&gt;Watch watches for events happening or that have happened. Both input and output are streams; the input stream is for creating and canceling watchers and the output stream sends events. One watch RPC can watch on multiple key ranges, streaming events for several watches at once. The entire event history can be watched starting from the last compaction revision.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-alarmmember-etcdserveretcdserverpbrpcproto"&gt;message &lt;code&gt;AlarmMember&lt;/code&gt; (etcdserver/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;memberID&lt;/td&gt;
 &lt;td&gt;memberID is the ID of the member associated with the raised alarm.&lt;/td&gt;
 &lt;td&gt;uint64&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;alarm&lt;/td&gt;
 &lt;td&gt;alarm is the type of alarm which has been raised.&lt;/td&gt;
 &lt;td&gt;AlarmType&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-alarmrequest-etcdserveretcdserverpbrpcproto"&gt;message &lt;code&gt;AlarmRequest&lt;/code&gt; (etcdserver/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;action&lt;/td&gt;
 &lt;td&gt;action is the kind of alarm request to issue. The action may GET alarm statuses, ACTIVATE an alarm, or DEACTIVATE a raised alarm.&lt;/td&gt;
 &lt;td&gt;AlarmAction&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;memberID&lt;/td&gt;
 &lt;td&gt;memberID is the ID of the member associated with the alarm. If memberID is 0, the alarm request covers all members.&lt;/td&gt;
 &lt;td&gt;uint64&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;alarm&lt;/td&gt;
 &lt;td&gt;alarm is the type of alarm to consider for this request.&lt;/td&gt;
 &lt;td&gt;AlarmType&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-alarmresponse-etcdserveretcdserverpbrpcproto"&gt;message &lt;code&gt;AlarmResponse&lt;/code&gt; (etcdserver/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;alarms&lt;/td&gt;
 &lt;td&gt;alarms is a list of alarms associated with the alarm request.&lt;/td&gt;
 &lt;td&gt;(slice of) AlarmMember&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-authdisablerequest-etcdserveretcdserverpbrpcproto"&gt;message &lt;code&gt;AuthDisableRequest&lt;/code&gt; (etcdserver/etcdserverpb/rpc.proto)&lt;/h5&gt;
&lt;p&gt;Empty field.&lt;/p&gt;</description></item><item><title>etcd concurrency API Reference</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-guide/api_concurrency_reference_v3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-guide/api_concurrency_reference_v3/</guid><description>&lt;p&gt;This is a generated documentation. Please read the proto files for more.&lt;/p&gt;
&lt;h5 id="service-lock-etcdserverapiv3lockv3lockpbv3lockproto"&gt;service &lt;code&gt;Lock&lt;/code&gt; (etcdserver/api/v3lock/v3lockpb/v3lock.proto)&lt;/h5&gt;
&lt;p&gt;The lock service exposes client-side locking facilities as a gRPC interface.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Method&lt;/th&gt;
 &lt;th&gt;Request Type&lt;/th&gt;
 &lt;th&gt;Response Type&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Lock&lt;/td&gt;
 &lt;td&gt;LockRequest&lt;/td&gt;
 &lt;td&gt;LockResponse&lt;/td&gt;
 &lt;td&gt;Lock acquires a distributed shared lock on a given named lock. On success, it will return a unique key that exists so long as the lock is held by the caller. This key can be used in conjunction with transactions to safely ensure updates to etcd only occur while holding lock ownership. The lock is held until Unlock is called on the key or the lease associate with the owner expires.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Unlock&lt;/td&gt;
 &lt;td&gt;UnlockRequest&lt;/td&gt;
 &lt;td&gt;UnlockResponse&lt;/td&gt;
 &lt;td&gt;Unlock takes a key returned by Lock and releases the hold on lock. The next Lock caller waiting for the lock will then be woken up and given ownership of the lock.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-lockrequest-etcdserverapiv3lockv3lockpbv3lockproto"&gt;message &lt;code&gt;LockRequest&lt;/code&gt; (etcdserver/api/v3lock/v3lockpb/v3lock.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;name&lt;/td&gt;
 &lt;td&gt;name is the identifier for the distributed shared lock to be acquired.&lt;/td&gt;
 &lt;td&gt;bytes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;lease&lt;/td&gt;
 &lt;td&gt;lease is the ID of the lease that will be attached to ownership of the lock. If the lease expires or is revoked and currently holds the lock, the lock is automatically released. Calls to Lock with the same lease will be treated as a single acquisition; locking twice with the same lease is a no-op.&lt;/td&gt;
 &lt;td&gt;int64&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-lockresponse-etcdserverapiv3lockv3lockpbv3lockproto"&gt;message &lt;code&gt;LockResponse&lt;/code&gt; (etcdserver/api/v3lock/v3lockpb/v3lock.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;etcdserverpb.ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;key&lt;/td&gt;
 &lt;td&gt;key is a key that will exist on etcd for the duration that the Lock caller owns the lock. Users should not modify this key or the lock may exhibit undefined behavior.&lt;/td&gt;
 &lt;td&gt;bytes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-unlockrequest-etcdserverapiv3lockv3lockpbv3lockproto"&gt;message &lt;code&gt;UnlockRequest&lt;/code&gt; (etcdserver/api/v3lock/v3lockpb/v3lock.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;key&lt;/td&gt;
 &lt;td&gt;key is the lock ownership key granted by Lock.&lt;/td&gt;
 &lt;td&gt;bytes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="message-unlockresponse-etcdserverapiv3lockv3lockpbv3lockproto"&gt;message &lt;code&gt;UnlockResponse&lt;/code&gt; (etcdserver/api/v3lock/v3lockpb/v3lock.proto)&lt;/h5&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Field&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;header&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;etcdserverpb.ResponseHeader&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h5 id="service-election-etcdserverapiv3electionv3electionpbv3electionproto"&gt;service &lt;code&gt;Election&lt;/code&gt; (etcdserver/api/v3election/v3electionpb/v3election.proto)&lt;/h5&gt;
&lt;p&gt;The election service exposes client-side election facilities as a gRPC interface.&lt;/p&gt;</description></item><item><title>Experimental APIs and features</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-guide/experimental_apis/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-guide/experimental_apis/</guid><description>&lt;p&gt;For the most part, the etcd project is stable, but we are still moving fast! We believe in the release fast philosophy. We want to get early feedback on features still in development and stabilizing. Thus, there are, and will be more, experimental features and APIs. We plan to improve these features based on the early feedback from the community, or abandon them if there is little interest, in the next few releases. Please do not rely on any experimental features or APIs in production environment.&lt;/p&gt;</description></item><item><title>gRPC naming and discovery</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-guide/grpc_naming/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-guide/grpc_naming/</guid><description>&lt;p&gt;etcd provides a gRPC resolver to support an alternative name system that fetches endpoints from etcd for discovering gRPC services. The underlying mechanism is based on watching updates to keys prefixed with the service name.&lt;/p&gt;
&lt;h2 id="using-etcd-discovery-with-go-grpc"&gt;Using etcd discovery with go-grpc&lt;/h2&gt;
&lt;p&gt;The etcd client provides a gRPC resolver for resolving gRPC endpoints with an etcd backend. The resolver is initialized with an etcd client and given a target for resolution:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#204a87;font-weight:bold"&gt;import&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt;	&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;&amp;#34;go.etcd.io/etcd/clientv3&amp;#34;&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt;	&lt;/span&gt;&lt;span style="color:#000"&gt;etcdnaming&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#4e9a06"&gt;&amp;#34;go.etcd.io/etcd/clientv3/naming&amp;#34;&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt;	&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;&amp;#34;google.golang.org/grpc&amp;#34;&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000;font-weight:bold"&gt;)&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;...&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;cli&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;,&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;cerr&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;:=&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;clientv3&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;NewFromURL&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;&amp;#34;http://localhost:2379&amp;#34;&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;)&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;r&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;:=&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#000"&gt;etcdnaming&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;GRPCResolver&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;{&lt;/span&gt;&lt;span style="color:#000"&gt;Client&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;:&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;cli&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;}&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;b&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;:=&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;grpc&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;RoundRobin&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#000"&gt;r&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;)&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#000"&gt;conn&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;,&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;gerr&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;:=&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;grpc&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;Dial&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#4e9a06"&gt;&amp;#34;my-service&amp;#34;&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;,&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;grpc&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;WithBalancer&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;(&lt;/span&gt;&lt;span style="color:#000"&gt;b&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;),&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#000"&gt;grpc&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;.&lt;/span&gt;&lt;span style="color:#000"&gt;WithBlock&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;(),&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt; &lt;/span&gt;&lt;span style="color:#ce5c00;font-weight:bold"&gt;...&lt;/span&gt;&lt;span style="color:#000;font-weight:bold"&gt;)&lt;/span&gt;&lt;span style="color:#f8f8f8"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="managing-service-endpoints"&gt;Managing service endpoints&lt;/h2&gt;
&lt;p&gt;The etcd resolver treats all keys under the prefix of the resolution target following a &amp;ldquo;/&amp;rdquo; (e.g., &amp;ldquo;my-service/&amp;rdquo;) with JSON-encoded go-grpc &lt;code&gt;naming.Update&lt;/code&gt; values as potential service endpoints. Endpoints are added to the service by creating new keys and removed from the service by deleting keys.&lt;/p&gt;</description></item><item><title>Interacting with etcd</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-guide/interacting_v3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-guide/interacting_v3/</guid><description>&lt;p&gt;Users mostly interact with etcd by putting or getting the value of a key. This section describes how to do that by using etcdctl, a command line tool for interacting with etcd server. The concepts described here should apply to the gRPC APIs or client library APIs.&lt;/p&gt;
&lt;p&gt;The API version used by etcdctl to speak to etcd may be set to version &lt;code&gt;2&lt;/code&gt; or &lt;code&gt;3&lt;/code&gt; via the &lt;code&gt;ETCDCTL_API&lt;/code&gt; environment variable. By default, etcdctl on master (3.4) uses the v3 API and earlier versions (3.3 and earlier) default to the v2 API.&lt;/p&gt;</description></item><item><title>Set up a local cluster</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-guide/local_cluster/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-guide/local_cluster/</guid><description>&lt;p&gt;For testing and development deployments, the quickest and easiest way is to configure a local cluster. For a production deployment, refer to the &lt;a href="https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/op-guide/clustering"&gt;clustering&lt;/a&gt; section.&lt;/p&gt;
&lt;h2 id="local-standalone-cluster"&gt;Local standalone cluster&lt;/h2&gt;
&lt;h3 id="starting-a-cluster"&gt;Starting a cluster&lt;/h3&gt;
&lt;p&gt;Run the following to deploy an etcd cluster as a standalone cluster:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ ./etcd
...
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If the &lt;code&gt;etcd&lt;/code&gt; binary is not present in the current working directory, it might be located either at &lt;code&gt;$GOPATH/bin/etcd&lt;/code&gt; or at &lt;code&gt;/usr/local/bin/etcd&lt;/code&gt;. Run the command appropriately.&lt;/p&gt;</description></item><item><title>System limits</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-guide/limit/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-guide/limit/</guid><description>&lt;h2 id="request-size-limit"&gt;Request size limit&lt;/h2&gt;
&lt;p&gt;etcd is designed to handle small key value pairs typical for metadata. Larger requests will work, but may increase the latency of other requests. By default, the maximum size of any request is 1.5 MiB. This limit is configurable through &lt;code&gt;--max-request-bytes&lt;/code&gt; flag for etcd server.&lt;/p&gt;
&lt;h2 id="storage-size-limit"&gt;Storage size limit&lt;/h2&gt;
&lt;p&gt;The default storage size limit is 2GB, configurable with &lt;code&gt;--quota-backend-bytes&lt;/code&gt; flag. 8GB is a suggested maximum size for normal environments and etcd warns at startup if the configured value exceeds it.&lt;/p&gt;</description></item><item><title>Why gRPC gateway</title><link>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-guide/api_grpc_gateway/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-guide/api_grpc_gateway/</guid><description>&lt;p&gt;etcd v3 uses &lt;a href="https://www.grpc.io/" target="_blank" rel="noopener"&gt;gRPC&lt;/a&gt; for its messaging protocol. The etcd project includes a gRPC-based &lt;a href="https://github.com/etcd-io/etcd/tree/master/client/v3" target="_blank" rel="noopener"&gt;Go client&lt;/a&gt; and a command line utility, &lt;a href="https://github.com/etcd-io/etcd/tree/master/etcdctl" target="_blank" rel="noopener"&gt;etcdctl&lt;/a&gt;, for communicating with an etcd cluster through gRPC. For languages with no gRPC support, etcd provides a JSON &lt;a href="https://github.com/grpc-ecosystem/grpc-gateway" target="_blank" rel="noopener"&gt;gRPC gateway&lt;/a&gt;. This gateway serves a RESTful proxy that translates HTTP/JSON requests into gRPC messages.&lt;/p&gt;
&lt;h2 id="using-grpc-gateway"&gt;Using gRPC gateway&lt;/h2&gt;
&lt;p&gt;The gateway accepts a &lt;a href="https://developers.google.com/protocol-buffers/docs/proto3#json" target="_blank" rel="noopener"&gt;JSON mapping&lt;/a&gt; for etcd&amp;rsquo;s &lt;a href="https://deploy-preview-1113--etcd.netlify.app/docs/v3.3/dev-guide/api_reference_v3"&gt;protocol buffer&lt;/a&gt; message definitions. Note that &lt;code&gt;key&lt;/code&gt; and &lt;code&gt;value&lt;/code&gt; fields are defined as byte arrays and therefore must be base64 encoded in JSON. The following examples use &lt;code&gt;curl&lt;/code&gt;, but any HTTP/JSON client should work all the same.&lt;/p&gt;</description></item></channel></rss>