From 26a2f1a332281d8d0240344fb667386509ebebca Mon Sep 17 00:00:00 2001 From: SisMaker <1713699517@qq.com> Date: Thu, 2 Sep 2021 18:31:14 +0800 Subject: [PATCH] =?UTF-8?q?ft:=20=E4=BB=A3=E7=A0=81=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/agApi/agAdminMonitor.erl | 232 ++++++++------------------- src/agApi/agAnalyzers.erl | 3 +- src/agApi/agReplication.erl | 302 +++++++++++++++++------------------ src/agApi/agTransactions.erl | 6 +- 4 files changed, 225 insertions(+), 318 deletions(-) diff --git a/src/agApi/agAdminMonitor.erl b/src/agApi/agAdminMonitor.erl index 93f0c94..65059b2 100644 --- a/src/agApi/agAdminMonitor.erl +++ b/src/agApi/agAdminMonitor.erl @@ -7,37 +7,36 @@ % doc_address:https://www.arangodb.com/docs/stable/http/administration-and-monitoring.html -% 从服务器Permalink读取全局日志 -% 返回服务器日志 -% GET /_admin/log +% 从服务器读取全局日志 +% +% GET /_admin/log/entries % 查询参数 -% upto (可选):返回所有日志条目多达日志级别高达。请注意,upto必须为: -% fatal 或0 -% error或1 -% warning或2 -% info或3 -% debug 或4 默认值为info。 -% level (可选):返回日志级别的所有日志条目级别。请注意,查询参数 upto和level是互斥的。 -% start(可选):返回所有日志条目,以使其日志条目标识符(lid值)大于或等于start。 -% size(可选):将结果限制为最大大小的日志条目。 -% offset(可选):开始返回日志条目,跳过第一个偏移日志条目。偏移量 和大小可用于分页。 -% search (可选):仅返回包含search中指定的文本的日志条目。 -% sort(可选):根据日志条目的盖值对日志条目进行升序(如果sort为asc)或降序(如果sort为desc)。请注意,盖子会 按时间顺序排列。默认值为asc。 -% 从服务器的全局日志中返回致命,错误,警告或信息日志消息。结果是具有以下属性的JSON对象: -% HTTP 200 -% lid:日志条目标识符的列表。每个日志消息都由其@LIT {lid}唯一标识,并且标识符按升序排列。 -% level:所有日志条目的日志级别列表。 -% timestamp:所有日志条目的时间戳列表,自1970-01-01开始以秒为单位。 -% text:所有日志条目的文本列表 -% topic:所有日志条目的主题列表 -% totalAmount:分页前的日志条目总数。 -% 400:如果为up或level指定了无效值,则返回。 -% 500:如果服务器由于内存不足错误而无法生成结果,则返回。 +% upto(可选):返回所有日志条目直到日志级别upto。请注意,最多必须是: +% 致命或0 +% 错误或1 +% 警告或2 +% 信息或3 +% debug 或4 默认值为info。 +% level(可选):返回日志级别level 的所有日志条目。注意查询参数 upto和level是互斥的。 +% start(可选):返回所有日志条目,使其日志条目标识符(lid值)大于或等于start。 +% size(可选):将结果限制为最多大小日志条目。 +% offset(可选):开始返回跳过第一个偏移日志条目的日志条目。偏移量 和大小可用于分页。 +% search(可选):仅返回包含search 中指定文本的日志条目。 +% sort(可选):根据日志条目的id值对日志条目进行升序(如果sort是asc)或降序(如果sort是desc)排序。请注意,id 强加了时间顺序。默认值为asc。 +% serverId(可选):返回指定服务器的所有日志条目。所有其他查询参数保持有效。如果没有给出 serverId,被询问的服务器将回复。这个参数只对 Coordinator 有意义。 +% 从服务器的全局日志返回致命、错误、警告或信息日志消息。结果是具有以下属性的 JSON 对象: +% total : 分页前的日志条目总数 +% messages : 一个包含符合条件的日志消息的数组 +% 这个 API 可以通过启动选项关闭--log.api-enabled。如果 API 被禁用,所有请求都将使用 HTTP 403 响应。如果 API 被启用,访问它需要管理员权限,甚至超级用户权限,具体取决于--log.api-enabled启动选项的值。 +% 返回代码 +% 200:如果请求有效则返回。 +% 400:如果为upto或level指定了无效值,则返回。 +% 403:访问日志权限不足返回。 getAdminLog(PoolNameOrSocket) -> - agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_admin/log">>). + agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_admin/log/entries">>). getAdminLog(PoolNameOrSocket, QueryPars) -> - agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_admin/log">>, QueryPars). + agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_admin/log/entries">>, QueryPars). % 返回当前的日志级别设置 % GET /_admin/log/level @@ -107,114 +106,9 @@ getAdminLogLevel(PoolNameOrSocket) -> % 405:使用无效的HTTP方法时返回。 % 500:如果服务器由于内存不足错误而无法生成结果,则返回。 modifyAdminLogLevel(PoolNameOrSocket, MapData) -> - BodyStr = eVPack:encodeBin(MapData), - agVstCli:callAgency(PoolNameOrSocket, ?AgPut, <<"/_admin/log/level">>, ?AgDefQuery, ?AgDefHeader, BodyStr). - -% 返回统计信息 -% GET /_admin/statistics -% 返回统计信息。返回的对象包含根据_admin / statistics-description返回的描述分组在一起的 统计数字。例如, 要从组系统访问图userTime,您首先选择描述存储在系统中的组的子对象,然后在该子对象中,userTime的值存储在同名属性中。 -% 如果是分发,则返回的对象包含以count为单位的总计 数和以counts为单位的分发列表。各个值的总和(或全部)中被返回总和。 -% 事务统计信息显示本地已启动,已提交和已中止的事务,以及为查询的服务器完成的中间提交。对于RocksDB存储引擎,中间提交计数将仅采用非零值。协调器几乎不会在其本地数据库中进行任何本地事务,因此,群集事务(在协调器上启动的事务需要DBServer在事务提交到群集范围之前完成)才被添加到其本地统计信息中。这意味着您将在单个服务器上看到的统计信息大致是在使用单个协调器查询该协调器的群集设置中所期望的统计信息。区别在于群集事务没有中间提交的概念,也不会增加价值。 -% HTTP 200统计信息已成功返回。 -% error:布尔值标志,指示是否发生错误(在这种情况下为false) -% code:HTTP状态码-在这种情况下为200 -% time:当前服务器时间戳 -% errorMessage:描述性错误消息 -% enabled:如果服务器启用了统计模块,则为true。如果没有,不要期望任何值。 -% 系统:从系统收集的有关此过程的指标;可能取决于主机操作系统 -% minorPageFaults:pagefaults -% majorPageFaults:pagefaults -% userTime:服务器进程使用的用户CPU时间 -% systemTime:服务器进程使用的系统CPU时间 -% numberOfThreads:服务器中的线程数 -% residentSize:流程的RSS -% residentSizePercent:进程的RSS,以%为单位 -% virtualSize:进程的VSS -% client:有关连接的客户端及其资源使用情况的信息 -% sum:所有计数的汇总值 -% count:汇总的值数 -% counts:包含值的数组 -% connectionTime:总连接时间 -% totalTime:系统时间 -% requestTime:请求时间 -% queueTime:请求排队等待处理的时间 -% ioTime:IO时间 -% bytesSent:发送给客户端的字节数 -% bytesReceived:从客户端收到的字节数 -% httpConnections:打开的http连接数 -% http:动词的请求数 -% requestsTotal:http请求总数 -% requestsAsync:异步http请求的总数 -% RequestsGet:使用GET动词的请求数 -% requestHead:使用HEAD动词的请求数 -% requestPost:使用POST动词的请求数 -% requestsPut:使用PUT动词的请求数 -% requestsPatch:使用PATCH动词的请求数 -% requestsDelete:使用DELETE动词的请求数 -% requestsOptions:使用OPTIONS动词的请求数 -% requestOther:没有使用以上识别的动词的任何请求 -% 服务器:服务器的统计信息 -% 正常运行时间:服务器启动和运行的时间 -% physicalMemory:服务器上的可用物理内存 -% Transactions:交易统计 -% 已开始:已开始交易的数量 -% 已提交:已提交交易的数量 -% 已中止:已中止交易的数量 -% middleCommits:完成的中间提交数 -% v8Context:有关V8 JavaScript上下文的统计信息 -% 可用:当前生成的V8上下文的数量 -% busy:当前活动的V8上下文的数量 -% dirty:先前使用的上下文数量,现在应该在重新使用之前对其进行垃圾回收 -% free:可以免费使用的V8上下文的数量 -% max:我们可以通过--javascript.v8-contexts配置生成的V8上下文总数 -% 内存:V8内存/垃圾回收水印列表;每次运行垃圾回收时都要刷新;将当时使用的最小/最大内存保留10秒钟 -% contextId:这组内存统计信息来自的上下文的ID -% tMax:10秒间隔开始的时间戳 -% countOfTimes:这10秒内垃圾回收运行了多少次 -% heapMax:所有垃圾收集的高水位标记在10秒内运行 -% heapMin:这10秒内运行的所有垃圾回收的低水印 -% 线程:有关服务器工作线程的统计信息(不包括特定于V8或jemalloc的线程和系统线程) -% scheduler-threads:产生的工作线程数 -% 进行中:当前繁忙的工作线程数 -% 排队:排队等待工作线程可用的作业数 -getAdminProps(PoolNameOrSocket) -> - agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_admin/statistics">>). - -% 统计数据说明 -% 获取统计信息的描述性信息 -% GET /_admin/statistics-description -% 返回/ _admin / statistics返回的统计信息的描述。返回的对象在属性组中包含一组统计信息组,在属性图中包含一组统计信息 图。 -% 统计组由 -% group:组的标识符。 -% name:组的名称。 -% description:组的描述。 -% 统计数字由 -% group:此图所属的组的标识符。 -% 标识符:图形的标识符。它在组中是唯一的。 -% name:图形名称。 -% description:对图形的描述。 -% 类型:当前,累计或分配。 -% cuts:分布向量。 -% 单位:测量数字的单位。 -% HTTP 200描述已成功返回。 -% 组:统计组 -% group:组的标识符。 -% name:组的名称。 -% description:组的描述。 -% 数字:统计数字 -% group:此图所属的组的标识符。 -% 标识符:图形的标识符。它在组中是唯一的。 -% name:图形名称。 -% description:对图形的描述。 -% 类型:当前,累计或分配。 -% cuts:分布向量。 -% 单位:测量数字的单位。 -% code:HTTP状态码 -% 错误:错误,在这种情况下为false -getAdminStatisticsDesc(PoolNameOrSocket) -> - agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_admin/statistics-description">>). + agVstCli:callAgency(PoolNameOrSocket, ?AgPut, <<"/_admin/log/level">>, ?AgDefQuery, ?AgDefHeader, eVPack:encodeBin(MapData)). -% TLS 永久链接 +% TLS % 返回TLS数据的摘要 % 返回此服务器的TLS数据(服务器密钥,客户端身份验证CA) % GET /_admin/server/tls @@ -233,7 +127,7 @@ getAdminStatisticsDesc(PoolNameOrSocket) -> getAdminTLS(PoolNameOrSocket) -> agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_admin/server/tls">>). -% 触发TLS数据的重新加载并返回摘要永久链接 +% 触发TLS数据的重新加载并返回摘要 % 触发此服务器的TLS数据(服务器密钥,客户端身份验证CA)的重新加载,并以摘要形式返回新数据。 % POST /_admin/server/tls % 此API调用触发所有TLS数据的重新加载,然后返回摘要。JSON响应与相应的GET请求完全相同(请参见此处)。 @@ -244,17 +138,22 @@ getAdminTLS(PoolNameOrSocket) -> triggerAdminTLS(PoolNameOrSocket) -> agVstCli:callAgency(PoolNameOrSocket, ?AgPost, <<"/_admin/server/tls">>). -% 返回当前实例指标 IMY-todo 这个接口返回的数据不是json也不是vpack -% GET /_admin/metrics -% 以Prometheus格式返回实例的当前指标。返回的文档收集所有实例指标,这些指标在任何给定时间进行测量,并将其公开以供Prometheus收集。 -% 该文档包含不同的度量标准和度量标准组,具体取决于查询实例的角色。所有导出的指标都使用arangodb_或rocksdb_字符串发布,以将其与其他收集的数据区分开。 -% 然后需要将API添加到Prometheus配置文件中进行收集。 -% 返回码 -% 200:指标已成功返回。 -% 404:可以使用--server.export-metrics-api false 服务器中的设置禁用指标API 。在这种情况下,调用结果表明找不到该API。 -getAdminMetrics(PoolNameOrSocket) -> - agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_admin/metrics">>). - +% 静态加密 +% 旋转静态密钥库的加密 +% 静态密钥轮换加密 +% POST /_admin/server/encryption +% 通过向此端点发送不带负载的请求来更改用户提供的静态加密。通过提供的文件--rocksdb.encryption-keyfolder 将被重新加载,内部加密密钥将使用新的用户密钥重新加密。 +% 这是一个受保护的 API,只能以超级用户权限执行。此 API 在协调器节点上不可用。 +% 如果禁用加密密钥轮换,API 将返回 HTTP 404。 +% HTTP 200如果一切正常,此 API 将返回 HTTP 200 +% error : 指示是否发生错误的布尔标志(在这种情况下为false) +% 代码:HTTP 状态代码 - 在这种情况下为 200 +% 结果:结果对象。 +% 加密密钥:具有密钥秘密的 SHA-256 哈希值的对象数组。可以为空。 +% 403:如果不是以超级用户权限调用,此 API 将返回 HTTP 403 FORBIDDEN。 +% 404:如果禁用了加密密钥轮换,此 API 将返回 HTTP 404。 +encryption(PoolNameOrSocket) -> + agVstCli:callAgency(PoolNameOrSocket, ?AgPost, <<"/_admin/server/encryption">>). % 集群 % 服务器返回是否是在只读模式 @@ -267,6 +166,19 @@ getAdminMetrics(PoolNameOrSocket) -> getAdminServerMode(PoolNameOrSocket) -> agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_admin/server/mode">>). +% 更新服务器是否处于只读模式 +% 更新此服务器的模式(只读或默认) +% PUT /_admin/server/mode +% 需要具有这些属性的 JSON 对象: +% 模式:服务器的模式readonly或default。 +% 更新有关服务器的模式信息。json 响应将包含一个mode值为readonlyor的字段default。在只读服务器中,所有写入操作都将失败,错误代码为1004( ERROR_READ_ONLY )。创建或删除数据库和集合也将失败并显示错误代码11( ERROR_FORBIDDEN )。 +% 这是一个受保护的 API。它需要身份验证和管理服务器权限。 +% 返回代码 +% 200:如果一切正常,此 API 将返回 HTTP 200 +% 401:如果请求没有被认证为具有足够权限的用户 +setAdminServerMode(PoolNameOrSocket) -> + agVstCli:callAgency(PoolNameOrSocket, ?AgPut, <<"/_admin/server/mode">>). + % 返回集群永久链接中服务器的ID % 了解服务器的内部ID % GET /_admin/server/id @@ -279,22 +191,21 @@ getAdminServerId(PoolNameOrSocket) -> % 返回集群中服务器的角色 % GET /_admin/server/role -% 返回集群中服务器的角色。该角色在结果的role属性中返回。角色的可能返回值是: -% SINGLE:服务器是没有集群的独立服务器 -% 协调器:服务器是集群中的协调器 -% PRIMARY:服务器是集群中的DBServer -% 次要的:不再使用此角色 -% 代理:服务器是集群中的代理节点 -% UNDEFINED:在集群中,如果无法确定服务器角色,则返回UNDEFINED。 -% 在所有情况下均返回HTTP 200。 -% 错误:始终为假 -% code:HTTP状态码,始终为200 -% errorNum:服务器错误号 +% 返回服务器在集群中的角色。在结果的角色属性中返回角色。角色可能的返回值是: +% SINGLE:服务器是一个没有集群的独立服务器 +% COORDINATOR:服务器是集群中的协调器 +% PRIMARY:服务器是集群中的数据库服务器 +% SECONDARY:不再使用此角色 +% AGENT:服务器是集群中的代理节点 +% UNDEFINED:在集群中,如果无法确定服务器角色,则返回UNDEFINED。 +% 在所有情况下都返回HTTP 200。 +% 错误:总是错误 +% code : HTTP 状态码,总是 200 +% errorNum : 服务器错误号 % 作用:之一[ SINGLE,协调员,PRIMARY,SECONDARY,AGENT,UNDEFINED ] getAdminServerRole(PoolNameOrSocket) -> agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_admin/server/role">>). - % 返回服务器是否可用 % GET /_admin/server/availability % 返回有关服务器的可用性信息。 @@ -314,9 +225,8 @@ getAdminServerAvailability(PoolNameOrSocket) -> % 200: % 400:数据库服务器的ID % 403: -getAdminClusterProps(PoolNameOrSocket, DBserver) -> - Path = <<"/_admin/clusterStatistics?DBserver=", (agMiscUtils:toBinary(DBserver))/binary>>, - agVstCli:callAgency(PoolNameOrSocket, ?AgGet, Path). +getAdminClusterProps(PoolNameOrSocket, QueryPars) -> + agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_admin/clusterStatistics">>, QueryPars). XXXXXX % 查询集群的运行状况以监视Permalink % 返回由监督(机构)评估的集群的运行状况 diff --git a/src/agApi/agAnalyzers.erl b/src/agApi/agAnalyzers.erl index 9f1407b..1c3c5db 100644 --- a/src/agApi/agAnalyzers.erl +++ b/src/agApi/agAnalyzers.erl @@ -25,8 +25,7 @@ % 400:缺少一个或多个必需参数,或者一个或多个参数无效。 % 403:用户无权使用此配置创建和分析器。 newAnalyzer(PoolNameOrSocket, MapData) -> - BodyStr = eVPack:encodeBin(MapData), - agVstCli:callAgency(PoolNameOrSocket, ?AgPost, <<"/_api/analyzer">>, ?AgDefQuery, ?AgDefHeader, BodyStr). + agVstCli:callAgency(PoolNameOrSocket, ?AgPost, <<"/_api/analyzer">>, ?AgDefQuery, ?AgDefHeader, eVPack:encodeBin(MapData)). % 返回分析器定义 % GET /_api/analyzer/{analyzer-name} diff --git a/src/agApi/agReplication.erl b/src/agApi/agReplication.erl index 6c93765..49ad2a4 100644 --- a/src/agApi/agReplication.erl +++ b/src/agApi/agReplication.erl @@ -24,56 +24,62 @@ % 返回集合及其索引的概述 % GET /_api/replication/inventory % 查询参数 -% includeSystem(可选):在结果中包括系统集合。默认值为true。 -% global (可选):在响应中包括所有数据库。仅适用于_system默认值为false。 -% batchId(必填):此API调用的RocksDB引擎需要有效的batchId -% 返回服务器上可用的集合和索引的数组。复制客户端可以使用此阵列来启动与服务器的初始同步。 -% 响应将包含具有collection和state和 tick属性的JSON对象。 -% 集合是具有以下子属性的集合数组: -% parameters:集合属性 -% indexes:集合索引的数组。主索引和边缘索引不包含在此数组中。 +% includeSystem(可选):在结果中包含系统集合。默认值为true。 +% global(可选):在响应中包括所有数据库。仅适用于_system默认值为false。 +% batchId(必需):此 API 调用需要有效的 batchId +% collection (可选):如果设置了此参数,则响应将限制为单个集合(指定的集合),并且不会返回任何视图。这可以用作优化以减小响应的大小。 +% +% 返回集合数组及其索引,以及可用的视图数组。复制客户端可以使用这些阵列来启动与服务器的初始同步。响应将包含所有的集合,它们的索引和观点所请求的数据库,如果全球没有设置,并在所有数据库中的所有藏品,索引和视图,如果全局 设置。如果global未设置,则可以通过设置collection参数将响应限制为单个集合。在这种情况下,响应将只包含关于集合数组中请求的集合的信息,而不包含关于视图的信息(即视图 响应属性将是一个空数组)。 +% 响应将包含一个带有collections、views、state和 tick属性的 JSON 对象。 +% collections是具有以下子属性的集合数组: +% parameters:集合属性 +% indexes:集合索引的数组。此数组中不包含主索引和边缘索引。 % 该状态属性包含复制记录器的当前状态。它包含以下子属性: -% running:复制记录器当前是否处于活动状态。注意:从ArangoDB 2.2开始,该值将始终为true -% lastLogTick:复制记录器已写入的最后一个滴答的值 -% time:服务器上的当前时间 -% 复制客户端应注意返回的lastLogTick值。然后,他们可以使用转储方法获取集合的数据直到lastLogTick的值,并在此滴答值之后查询连续复制日志中的日志事件。 +% running:复制记录器当前是否处于活动状态。注意:从 ArangoDB 2.2 开始,该值将始终为true +% lastLogTick:复制记录器写入的最后一个刻度的值 +% time : 服务器上的当前时间 +% views是一组可用的视图。 +% 复制客户端应注意返回的lastLogTick值。然后,他们可以使用 dump 方法获取集合的数据,直到 lastLogTick 的值,并在此滴答值之后查询连续复制日志以获取日志事件。 % 要在服务器上创建集合的完整副本,复制客户端可以执行以下步骤: -% 调用/ inventory API方法。这将从服务器返回lastLogTick值以及集合和索引的数组。 -% 对于/ inventory返回的每个集合,请在本地创建集合,然后调用/ dump将集合数据流式传输到客户端,直到lastLogTick的值 为止。之后,客户端可以在/ inventory报告的集合上创建索引。 -% 如果客户端要从记录器服务器连续流式传输复制日志事件,则需要执行以下附加步骤: -% 客户端应首先调用/ logger-follow来获取在客户端调用/ inventory之后记录的第一批复制事件。 -% 对/ logger-follow的调用应使用from参数,其值应为/ inventory报告的lastLogTick的值 。调用/ logger-follow将返回 x-arango-replication-lastincluded,其中将包含响应中包含的最后一个滴答值。 -% 然后,客户端可以连续调用/ logger-follow以递增地获取上次传输后发生的新复制事件。 -% 调用应使用from参数,并带有 上一个响应的x-arango-replication-lastincluded头的值。如果没有更多的复制事件,则响应将为空,客户端可以休眠一会儿,然后再试一次。 -% 注意:在协调器上,此请求必须具有查询参数DBserver,该参数 必须是DBserver的ID。相同的请求被同步转发到该DBserver。如果此属性未在协调程序情况下绑定,则是错误的。 -% 注意::global顶层对象使用参数包含一个键databases ,每个键下的一个键代表一个datbase名称,并且值符合上述说明。 -% 返回码 -% 200:如果请求成功执行,则返回。 -% 405:使用无效的HTTP方法时返回。 -% 500:如果组装响应时发生错误,则返回500。 +% 调用/inventory API 方法。这将返回lastLogTick值以及来自服务器的集合和索引数组。 +% 对于/inventory返回的每个集合,在本地创建集合并调用/dump将集合数据流式传输到客户端,直到lastLogTick的值 。之后,客户端可以在/inventory报告的集合上创建索引。 +% 如果客户端想要从记录器服务器连续流式传输复制日志事件,则需要执行以下附加步骤: +% 客户端最初应调用/logger-follow以获取在客户端调用/inventory后记录的第一批复制事件。 +% 对/logger-follow的调用应该使用from参数和/inventory报告的lastLogTick的值 。对/logger-follow的调用将返回 x-arango-replication-lastincluded,它将包含响应中包含的最后一个刻度值。 +% 然后客户端可以连续调用/logger-follow以增量获取上次传输后发生的新复制事件。 +% 调用应使用带有 前一个响应的x-arango-replication-lastincluded标头值的from参数。如果没有更多的复制事件,响应将为空,客户端可以进入休眠状态,稍后再试。 +% 注意:在 Coordinator 上,此请求必须具有查询参数DBserver,该参数 必须是 DB-Server 的 ID。相同的请求会同步转发到该 DB-Server。如果此属性在 Coordinator 情况下未绑定,则会出错。 +% 注意:使用该global参数,顶层对象包含一个key databases ,每个key下代表一个数据库名,值符合上面的描述。 +% 返回代码 +% 200:请求执行成功返回。 +% 405:使用无效的HTTP方法时返回。 +% 500:如果组装响应时发生错误,则返回。 +% 该批次方法将创建然后可转储的当前状态的快照。将转储 API 与 RocksDB 一起使用时需要一个 batchId。 getRepInventory(PoolNameOrSocket, QueryPars) -> - agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_api/replication/inventory">>, QueryPars). + agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_api/replication/inventory">>, QueryPars). -% 创建新的转储批次 -% 处理转储批处理命令 +% 创建新的转储批处理 % POST /_api/replication/batch -% 注意:这些调用对用户而言并不有趣。 -% 具有以下属性的JSON对象是必需的: -% ttl:新批处理的生存时间(以秒为单位) -% 具有批处理配置的JSON对象。 -% 创建一个新的转储批次并返回批次的ID。 -% 响应是具有以下属性的JSON对象: -% id:批次的ID -% 注意:在协调器上,此请求必须具有查询参数DBserver,该参数 必须是DB-Server的ID。相同的请求被同步转发到该DB服务器。如果在Coordinator情况下未绑定此属性,则会出错。 -% 返回码 -% 200:批量创建成功,返回 -% 400:如果ttl值无效,或者在Coordinator上未指定DBserver属性或该属性非法,则返回400 。 -% 405:使用无效的HTTP方法时返回。 +% 注意:这些调用对用户来说是无趣的。 +% 查询参数 +% state(可选):设置state为 true 将使响应还包含一个包含state有关领导者状态信息的属性。这仅在复制过程中在内部使用,不应由客户端应用程序使用。 +% 需要具有这些属性的 JSON 对象: +% ttl:新批次的生存时间(以秒为单位) +% 具有批次配置的 JSON 对象。 +% 创建一个新的转储批次并返回该批次的 ID。 +% 响应是具有以下属性的 JSON 对象: +% id : 批次的 id +% lastTick : 创建批处理时使用的快照刻度值 +% state : 额外的领导者状态信息(仅当请求中的stateURL 参数设置为时才存在 true) +% 注意:在 Coordinator 上,此请求必须具有查询参数DBserver,该参数 必须是 DB-Server 的 ID。相同的请求会同步转发到该 DB-Server。如果此属性在 Coordinator 情况下未绑定,则会出错。 +% 返回代码 +% 200:如果批次创建成功则返回。 +% 400:如果 ttl 值无效或未指定DBserver属性或协调器上的DBserver属性不合法,则返回。 +% 405:使用无效的HTTP方法时返回。 newRepBatch(PoolNameOrSocket, MapData) -> - BodyStr = eVPack:encodeBin(MapData), - agVstCli:callAgency(PoolNameOrSocket, ?AgPost, <<"/_api/replication/batch">>, ?AgDefQuery, ?AgDefHeader, BodyStr). + agVstCli:callAgency(PoolNameOrSocket, ?AgPost, <<"/_api/replication/batch">>, ?AgDefQuery, ?AgDefHeader, eVPack:encodeBin(MapData)). -% 删除现有的转储批次固定链接 +% 删除现有的转储批次 % 处理转储批处理命令 % DELETE /_api/replication/batch/{id} % 注意:这些调用对用户而言并不有趣。 @@ -86,11 +92,10 @@ newRepBatch(PoolNameOrSocket, MapData) -> % 400:如果找不到批次,则返回。 % 405:使用无效的HTTP方法时返回。 delRepBatch(PoolNameOrSocket, BatchId) -> - Path = <<"/_api/replication/batch/", (agMiscUtils:toBinary(BatchId))/binary>>, - agVstCli:callAgency(PoolNameOrSocket, ?AgDelete, Path). + Path = <<"/_api/replication/batch/", (agMiscUtils:toBinary(BatchId))/binary>>, + agVstCli:callAgency(PoolNameOrSocket, ?AgDelete, Path). -% 延长现有的转储批次固定链接 -% 处理转储批处理命令 +% 延长现有的转储批次 % PUT /_api/replication/batch/{id} % 注意:这些调用对用户而言并不有趣。 % 路径参数 @@ -108,9 +113,8 @@ delRepBatch(PoolNameOrSocket, BatchId) -> % 请注意,dump方法将仅返回文档,日记帐和数据文件中的更新,删除。仅存储在预写日志中的操作将不会返回。为了确保这些操作包含在转储中,必须先清除预写日志。 % 为了获得相同的数据状态,复制客户端应按照提供的顺序使用转储结果的各个部分。 prolongRepBatch(PoolNameOrSocket, BatchId, MapData) -> - Path = <<"/_api/replication/batch/", (agMiscUtils:toBinary(BatchId))/binary>>, - BodyStr = eVPack:encodeBin(MapData), - agVstCli:callAgency(PoolNameOrSocket, ?AgPut, Path, ?AgDefQuery, ?AgDefHeader, BodyStr). + Path = <<"/_api/replication/batch/", (agMiscUtils:toBinary(BatchId))/binary>>, + agVstCli:callAgency(PoolNameOrSocket, ?AgPut, Path, ?AgDefQuery, ?AgDefHeader, eVPack:encodeBin(MapData)). % 返回集合的数据 % 返回一个集合的全部内容 @@ -140,7 +144,7 @@ prolongRepBatch(PoolNameOrSocket, BatchId, MapData) -> % 405:使用无效的HTTP方法时返回。 % 500:如果组装响应时发生错误,则返回500。 getRepDump(PoolNameOrSocket, QueryPars) -> - agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_api/replication/dump">>, QueryPars). + agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_api/replication/dump">>, QueryPars). % 返回Merkle树以进行收集 % 检索与集合关联的Merkle树 @@ -176,7 +180,7 @@ getRepDump(PoolNameOrSocket, QueryPars) -> % 500:如果组装响应时发生错误,则返回500。 % 501:如果使用mmfiles调用或在不支持按版本同步的集合上返回,则返回 getRepTree(PoolNameOrSocket, QueryPars) -> - agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_api/replication/revisions/tree">>, QueryPars). + agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_api/replication/revisions/tree">>, QueryPars). % 为集合永久链接重建Merkle树 % 重建与集合关联的Merkle树 @@ -194,7 +198,7 @@ getRepTree(PoolNameOrSocket, QueryPars) -> % 500:如果组装响应时发生错误,则返回500。 % 501:如果使用mmfiles调用或在不支持按版本同步的集合上返回,则返回 resetRepTree(PoolNameOrSocket, QueryPars) -> - agVstCli:callAgency(PoolNameOrSocket, ?AgPost, <<"/_api/replication/revisions/tree">>, QueryPars). + agVstCli:callAgency(PoolNameOrSocket, ?AgPost, <<"/_api/replication/revisions/tree">>, QueryPars). % 返回要求范围内的修订版ID 永久链接 % 检索请求范围内的文档的修订ID @@ -205,7 +209,7 @@ resetRepTree(PoolNameOrSocket, QueryPars) -> % batchId(必填):要使用的快照的ID % resume(可选):如果先前的请求被截断,则恢复的修订版本 getRepRanges(PoolNameOrSocket, QueryPars) -> - agVstCli:callAgency(PoolNameOrSocket, ?AgPut, <<"/_api/replication/revisions/ranges">>, QueryPars). + agVstCli:callAgency(PoolNameOrSocket, ?AgPut, <<"/_api/replication/revisions/ranges">>, QueryPars). % 通过修订返回文档 % 通过修订检索文档 @@ -234,7 +238,7 @@ getRepRanges(PoolNameOrSocket, QueryPars) -> % 500:如果组装响应时发生错误,则返回500。 % 501:如果使用mmfiles调用或在不支持按版本同步的集合上返回,则返回 getRepDoc(PoolNameOrSocket, QueryPars) -> - agVstCli:callAgency(PoolNameOrSocket, ?AgPut, <<"/_api/replication/revisions/documents">>, QueryPars). + agVstCli:callAgency(PoolNameOrSocket, ?AgPut, <<"/_api/replication/revisions/documents">>, QueryPars). % 从远程端点同步数据永久 % 开始复制 @@ -265,8 +269,7 @@ getRepDoc(PoolNameOrSocket, QueryPars) -> % 500:如果同步期间发生错误,则返回。 % 501:在集群中的协调器上调用此操作时返回。 startRepSync(PoolNameOrSocket, MapData) -> - BodyStr = eVPack:encodeBin(MapData), - agVstCli:callAgency(PoolNameOrSocket, ?AgPut, <<"/_api/replication/sync">>, ?AgDefQuery, ?AgDefHeader, BodyStr). + agVstCli:callAgency(PoolNameOrSocket, ?AgPut, <<"/_api/replication/sync">>, ?AgDefQuery, ?AgDefHeader, eVPack:encodeBin(MapData)). % 返回集合和索引的集群清单 % 重建集群中的集合和索引的概述 @@ -280,7 +283,7 @@ startRepSync(PoolNameOrSocket, MapData) -> % 405:使用无效的HTTP方法时返回。 % 500:如果组装响应时发生错误,则返回500。 getRepClusterInv(PoolNameOrSocket, QueryPars) -> - agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_api/replication/clusterInventory">>, QueryPars). + agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_api/replication/clusterInventory">>, QueryPars). % 复制记录器命令 % 早期版本的ArangoDB允许启动,停止和配置复制记录器。这些命令在ArangoDB 2.2中是多余的,因为所有数据修改操作均写入服务器的预写日志,并且不再由单独的记录器处理。 @@ -309,16 +312,16 @@ getRepClusterInv(PoolNameOrSocket, QueryPars) -> % 405:使用无效的HTTP方法时返回。 % 500:如果无法确定记录器状态,则返回。 getRepLoggerState(PoolNameOrSocket) -> - agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_api/replication/logger-state">>). + agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_api/replication/logger-state">>). -% 返回日志条目永久链接固定链接 +% 返回日志条目 % 从服务器获取日志行 % GET /_api/replication/logger-follow % 此路由不应再使用。从3.4.0版开始,它被视为已弃用。 % 查询参数 % from(可选):结果的排他性下界刻度值。 -% 到(可选):结果的包含上限刻度值。 +% to(可选):结果的包含上限刻度值。 % chunkSize(可选):返回结果的大约最大大小。 % includeSystem(可选):在结果中包括系统集合。默认值为true。 % 从服务器的复制日志中返回数据。初始同步数据后,复制客户端可以调用此方法。该方法将从记录器服务器返回所有“最近”的日志条目,并且客户端可以在本地重播和应用这些条目,以使它们进入与记录器服务器相同的数据状态。 @@ -364,9 +367,9 @@ getRepLoggerState(PoolNameOrSocket) -> % 500:如果组装响应时发生错误,则返回500。 % 501:在集群中的协调器上调用此操作时返回。 getRepLoggerFirstTick(PoolNameOrSocket) -> - agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_api/replication/logger-first-tick">>). + agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_api/replication/logger-first-tick">>). -% 返回日志文件中可用的刻度值范围 +% 返回 WAL日志文件中可用的刻度值范围 % GET /_api/replication/logger-tick-ranges % 返回所有当前可用的WAL日志文件的刻度值的当前可用范围。刻度值可用于确定某些数据(由刻度值标识)是否仍可用于复制。 % 响应的主体包含一个JSON数组。每个数组成员都是一个描述单个日志文件的对象。每个对象都具有以下属性: @@ -380,7 +383,7 @@ getRepLoggerFirstTick(PoolNameOrSocket) -> % 500:如果无法确定记录器状态,则返回。 % 501:在集群中的协调器上调用此操作时返回。 getRepLoggerTickRanges(PoolNameOrSocket) -> - agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_api/replication/logger-tick-ranges">>). + agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_api/replication/logger-tick-ranges">>). % 复制应用程序命令 % applier命令允许远程启动,停止和查询ArangoDB数据库复制应用程序的状态和配置。 @@ -419,10 +422,10 @@ getRepLoggerTickRanges(PoolNameOrSocket) -> % 405:使用无效的HTTP方法时返回。 % 500:如果组装响应时发生错误,则返回500。 getRepApplierConfig(PoolNameOrSocket) -> - agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_api/replication/applier-config">>). + agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_api/replication/applier-config">>). getRepApplierConfig(PoolNameOrSocket, QueryPars) -> - agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_api/replication/applier-config">>, QueryPars). + agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_api/replication/applier-config">>, QueryPars). % 设置申请者的配置值 % PUT /_api/replication/applier-config @@ -459,51 +462,49 @@ getRepApplierConfig(PoolNameOrSocket, QueryPars) -> % 405:使用无效的HTTP方法时返回。 % 500:如果组装响应时发生错误,则返回500。 setRepApplierConfig(PoolNameOrSocket, MapData) -> - BodyStr = eVPack:encodeBin(MapData), - agVstCli:callAgency(PoolNameOrSocket, ?AgPut, <<"/_api/replication/applier-config">>, ?AgDefQuery, ?AgDefHeader, BodyStr). + agVstCli:callAgency(PoolNameOrSocket, ?AgPut, <<"/_api/replication/applier-config">>, ?AgDefQuery, ?AgDefHeader, eVPack:encodeBin(MapData)). setRepApplierConfig(PoolNameOrSocket, MapData, QueryPars) -> - BodyStr = eVPack:encodeBin(MapData), - agVstCli:callAgency(PoolNameOrSocket, ?AgPut, <<"/_api/replication/applier-config">>, QueryPars, ?AgDefHeader, BodyStr). + agVstCli:callAgency(PoolNameOrSocket, ?AgPut, <<"/_api/replication/applier-config">>, QueryPars, ?AgDefHeader, eVPack:encodeBin(MapData)). % 启动复制应用程序 % PUT /_api/replication/applier-start % 查询参数 -% 全局(可选):如果设置为true,则为所有数据库启动全局复制应用程序。如果设置为false,则在所选数据库中启动复制应用程序(默认)。 +% global(可选):如果设置为true,则为所有数据库启动全局复制应用程序。如果设置为false,则在所选数据库中启动复制应用程序(默认)。 % from(可选):从其开始应用的远程lastLogTick值。如果未指定,则使用上一次申请者运行中最后保存的刻度。如果没有保存以前的申请者状态,则申请者将从记录器服务器日志的开头开始。 % 启动复制程序。如果复制应用程序已经在运行,它将立即返回。 % 如果复制应用程序尚未运行,则将检查该应用程序配置,如果复制程序已完成,则将在后台线程中启动该应用程序。这意味着即使应用程序在运行时遇到任何错误,也不会在对此方法的响应中报告这些错误。 % 要在启动应用程序后检测复制应用程序错误,请改用 / _api / replication / applier-state API。 % 返回码 -% 200:如果请求成功执行,则返回。 -% 400:如果复制申请人未完全配置或配置无效,则返回。 -% 405:使用无效的HTTP方法时返回。 -% 500:如果组装响应时发生错误,则返回500。 +% 200:如果请求成功执行,则返回。 +% 400:如果复制申请人未完全配置或配置无效,则返回。 +% 405:使用无效的HTTP方法时返回。 +% 500:如果组装响应时发生错误,则返回500。 startRepApplier(PoolNameOrSocket) -> - agVstCli:callAgency(PoolNameOrSocket, ?AgPut, <<"/_api/replication/applier-start">>). + agVstCli:callAgency(PoolNameOrSocket, ?AgPut, <<"/_api/replication/applier-start">>). startRepApplier(PoolNameOrSocket, QueryPars) -> - agVstCli:callAgency(PoolNameOrSocket, ?AgPut, <<"/_api/replication/applier-start">>, QueryPars). + agVstCli:callAgency(PoolNameOrSocket, ?AgPut, <<"/_api/replication/applier-start">>, QueryPars). % 停止复制 % PUT /_api/replication/applier-stop % 查询参数 -% 全局(可选):如果设置为true,则停止所有数据库的全局复制应用程序。如果设置为false,则在所选数据库中停止复制应用程序(默认)。 +% global(可选):如果设置为true,则停止所有数据库的全局复制应用程序。如果设置为false,则在所选数据库中停止复制应用程序(默认)。 % 停止复制程序。如果复制应用程序未运行,它将立即返回。 % 返回码 % 200:如果请求成功执行,则返回。 % 405:使用无效的HTTP方法时返回。 % 500:如果组装响应时发生错误,则返回500。 stopRepApplier(PoolNameOrSocket) -> - agVstCli:callAgency(PoolNameOrSocket, ?AgPut, <<"/_api/replication/applier-stop">>). + agVstCli:callAgency(PoolNameOrSocket, ?AgPut, <<"/_api/replication/applier-stop">>). stopRepApplier(PoolNameOrSocket, QueryPars) -> - agVstCli:callAgency(PoolNameOrSocket, ?AgPut, <<"/_api/replication/applier-stop">>, QueryPars). + agVstCli:callAgency(PoolNameOrSocket, ?AgPut, <<"/_api/replication/applier-stop">>, QueryPars). % 输出复制的当前状态 % GET /_api/replication/applier-state % 查询参数 -% 全局(可选):如果设置为true,则返回所有数据库的全局复制应用程序的状态。如果设置为false,则返回所选数据库中复制应用程序的状态(默认)。 +% global(可选):如果设置为true,则返回所有数据库的全局复制应用程序的状态。如果设置为false,则返回所选数据库中复制应用程序的状态(默认)。 % 返回复制应用程序的状态,无论该应用程序当前是否正在运行。 % 响应是具有以下属性的JSON对象: % state:具有以下子属性的JSON对象: @@ -540,79 +541,79 @@ stopRepApplier(PoolNameOrSocket, QueryPars) -> % 405:使用无效的HTTP方法时返回。 % 500:如果组装响应时发生错误,则返回500。 getRepApplierState(PoolNameOrSocket) -> - agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_api/replication/applier-state">>). + agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_api/replication/applier-state">>). getRepApplierState(PoolNameOrSocket, QueryPars) -> - agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_api/replication/applier-state">>, QueryPars). - -% 将角色更改为奴隶 -% PUT /_api/replication/make-slave -% 具有以下属性的JSON对象是必需的: -% 端点:要连接的主端点(例如“ tcp://192.168.173.13:8529”)。 -% database:主数据库上的数据库名称(如果未指定,则默认为本地当前数据库的名称)。 -% username:连接到主服务器时使用的可选ArangoDB用户名。 -% password:连接到主服务器时使用的密码。 -% includeSystem:是否将应用系统收集操作 -% strictType:用于集合过滤的可选字符串值。指定时,允许的值包括include或exclude。 -% restrictCollections:集合用于在使用的可选阵列restrictType。如果limitType为include,则仅指定的集合将被同步。如果limitType为exclude,则将同步除指定集合以外的所有集合。 -% maxConnectRetries:应用程序连续进行的最大连接尝试次数。如果应用程序无法通过此尝试次数建立与端点的连接,它将停止运行。 -% connectTimeout:尝试连接到端点时的超时(以秒为单位)。该值用于每次连接尝试。 + agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_api/replication/applier-state">>, QueryPars). + +% 将服务器变成另一个的追随者 +% 将角色更改为关注者 +% PUT /_api/replication/make-follower +% 需要具有这些属性的 JSON 对象: +% 端点:要连接的领导端点(例如“tcp://192.168.173.13:8529”)。 +% database:leader 上的数据库名称(如果不指定,默认为本地当前数据库的名称)。 +% username:连接到领导者时使用的可选 ArangoDB 用户名。 +% password : 连接领导者时使用的密码。 +% includeSystem : 是否应用系统收集操作 +% 限制类型:用于集合过滤的可选字符串值。指定时,允许的值为include或exclude。 +% 限制集合:一个可选的集合数组,用于限制类型。如果restrictType为include,则只会同步指定的集合。如果restrictType为exclude,则将同步除指定集合之外的所有集合。 +% maxConnectRetries:应用程序将连续进行的最大连接尝试次数。如果应用程序在此尝试次数中无法与端点建立连接,它将自行停止。 +% connectTimeout:尝试连接到端点时的超时(以秒为单位)。此值用于每次连接尝试。 % requestTimeout:对端点的单个请求的超时(以秒为单位)。 -% chunkSize:请求的日志传输包的最大大小,该大小在联系端点时使用。 -% adaptivePolling:复制应用程序是否将使用自适应轮询。 -% autoResync:如果主服务器无法提供从属服务器请求的日志数据,或者在复制开始且找不到刻度值时,从属服务器是否应与主服务器执行自动重新同步。 -% autoResyncRetries:启用和启用自动重新同步后,将连续执行的重新同步重试次数。将其设置为0将有效地禁用autoResync。将其设置为其他值将限制重试的次数。如果重新同步总是失败,这有助于防止无休止的重试。 -% initialSyncMaxWaitTime:在获取初始收集数据时,初始同步将等待主服务器响应的最长时间(以秒为单位)。此等待时间可用于控制初始同步将在多长时间后放弃等待响应并失败。即使将autoResync设置为true时,该值也适用于连续复制,因为当主服务器无法提供从属服务器所需的日志数据时,此值可能会重新启动初始同步。如果设置为0,则将忽略此值。 -% connectionRetryWaitTime:如果出现连接问题,应用程序在重试连接到主服务器之前将有意空闲的时间(以秒为单位)。如果设置为0,则将忽略此值。 -% idleMinWaitTime:如果主服务器已经发送了所有日志数据,那么在从主服务器获取更多日志数据之前,应用程序将有意空闲的最短等待时间(以秒为单位)。该等待时间可用于控制复制应用程序向主服务器发送HTTP日志获取请求的频率,以防主服务器上没有写入活动。如果设置为0,则将忽略此值。 -% idleMaxWaitTime:如果主服务器已经发送了所有日志数据并且之前进行了日志获取尝试而没有更多日志数据,那么在从主服务器获取更多日志数据之前,应用程序将有意空闲的最大等待时间(以秒为单位) 。该等待时间可用于控制复制应用程序向主服务器发送HTTP日志获取请求的最大频率,以防主服务器上长时间没有写入活动。仅当选项adaptivePolling设置为true时,才使用此配置值 。如果设置为0,则将忽略此值。 -% requireFromPresent:如果设置为true,则复制应用程序将在其连续复制开始时检查转储阶段的开始时间是否仍存在于主服务器上。否则,将丢失数据。如果 requireFromPresent为true,则复制应用程序将中止并显示相应的错误消息。如果设置为false,那么复制应用程序仍将启动,并忽略数据丢失。 -% verbose:如果设置为true,那么将为复制应用程序执行的所有操作发出一条日志行。这仅应用于调试复制问题。 -% 启动从远程端点到本地ArangoDB数据库的完整数据同步,然后启动连续复制。该操作在每个数据库级别上进行。 -% 同步之前,将删除所有本地数据库数据。 -% 如果成功,响应的主体是具有以下属性的JSON对象: -% state:具有以下子属性的JSON对象: -% running:申请者是否处于活动状态并正在运行 -% lastAppliedContinuousTick:应用者已应用的连续复制日志中的最后一个滴答值。 -% lastProcessedContinuousTick:申请人已处理的连续复制日志中的最后一个滴答值。 -% 通常,最后应用和最后处理的滴答值应相同。对于事务操作,复制应用程序将首先处理传入的日志事件,然后再应用它们,因此处理的滴答值可能会高于所应用的滴答值。在申请人遇到事务的事务提交日志事件之前,情况将一直如此。 -% lastAvailableContinuousTick:远程服务器可以提供的最后一个滴答值。 -% ticksBehind:仅当应用程序当前正在运行时,此属性才存在。它将提供申请者已应用/看到的内容与远程服务器提供的最后一个日志滴答值之间的日志滴答数。如果该值为零,则两个服务器都处于同步状态。如果该值不为零,则远程服务器具有尚未提取和处理应用程序的其他数据,或者远程服务器可能具有其他不适用于该应用程序的数据。 -% 客户端应用程序可以使用它来确定大致距离远程服务器后面的应用程序,并且可以定期检查该值是增加(应用程序落后)还是减小(应用程序赶上)。 -% 请注意,由于远程服务器将仅为其所有数据库保留最后一个日志滴答值,但是复制可能只限于应用程序中的某些数据库,因此使用全局应用程序时,此值更有意义。此外,由于对由于复制配置而无法复制的系统集合的写入,远程服务器提供的最后一个日志滴答可能会增加。因此,在某些情况下,报告的值可能会夸大现实。 -% time:应用服务器上的时间。 +% chunkSize:请求的日志传输数据包的最大大小,在联系端点时使用。 +% 自适应轮询:复制应用程序是否将使用自适应轮询。 +% autoResync:如果领导者无法提供追随者请求的日志数据,或者当复制开始并且找不到刻度值时,追随者是否应该与领导者执行自动重新同步。 +% autoResyncRetries:将在一排时自动重新同步在启用和踢腿来进行重新同步重试次数此值设置为0将有效地禁用autoResync。将其设置为其他值将限制执行的重试次数。这有助于防止在重新同步总是失败的情况下无休止的重试。 +% initialSyncMaxWaitTime:初始同步在获取初始集合数据时将等待领导者响应的最大等待时间(以秒为单位)。此等待时间可用于控制初始同步在什么时间后放弃等待响应并失败。当autoResync设置为true时,即使对于连续复制,此值也是相关的,因为当领导者无法提供追随者所需的日志数据时,这可能会重新启动初始同步。如果设置为0 ,则该值将被忽略。 +% connectionRetryWaitTime:在连接问题的情况下,应用程序在重试连接到领导者之前有意空闲的时间(以秒为单位)。如果设置为0 ,则该值将被忽略。 +% idleMinWaitTime:应用程序在从领导者获取更多日志数据之前有意空闲的最小等待时间(以秒为单位),以防领导者已经发送其所有日志数据。此等待时间可用于控制复制应用程序向领导者发送 HTTP 日志获取请求的频率,以防领导者上没有写入活动。如果设置为0 ,则该值将被忽略。 +% idleMaxWaitTime : 应用程序在从领导者获取更多日志数据之前有意空闲的最大等待时间(以秒为单位),以防领导者已经发送其所有日志数据并且之前的日志获取尝试导致没有更多日志数据. 此等待时间可用于控制复制应用程序向领导者发送 HTTP 日志获取请求的最大频率,以防领导者长时间没有写入活动。只有在选项AdaptivePolling设置为True时,才会使用此配置值 。如果设置为0 ,则该值将被忽略。 +% requireFromPresent:如果设置为true,那么复制应用程序将在其连续复制开始时检查转储阶段的开始刻度是否仍然存在于领导者上。如果没有,那么就会有数据丢失。如果 requireFromPresent为true,则复制应用程序将中止并显示适当的错误消息。如果设置为false,则复制应用程序仍将启动,并忽略数据丢失。 +% verbose:如果设置为true,则将为复制应用程序执行的所有操作发出日志行。这应该仅用于调试复制问题。 +% 开始从远程端点到本地 ArangoDB 数据库的完整数据同步,然后开始连续复制。该操作适用于每个数据库级别。 +% 所有本地数据库数据将在同步之前被删除。 +% 如果成功,响应的主体是具有以下属性的 JSON 对象: +% state:具有以下子属性的 JSON 对象: +% running:应用程序是否处于活动状态并正在运行 +% lastAppliedContinuousTick:应用程序应用的连续复制日志中的最后一个刻度值。 +% lastProcessedContinuousTick:应用程序处理的连续复制日志中的最后一个刻度值。 +% 通常,最后应用和最后处理的刻度值应该相同。对于事务性操作,复制应用程序将在应用它们之前首先处理传入的日志事件,因此处理的刻度值可能高于应用的刻度值。直到应用程序遇到事务的事务提交日志事件,情况才会如此。 +% lastAvailableContinuousTick:远程服务器可以提供的最后一个刻度值。 +% ticksBehind:仅当应用程序当前正在运行时才会出现此属性。它将提供应用程序已应用/看到的日志刻度数与远程服务器提供的最后一个日志刻度值之间的日志刻度数。如果此值为零,则两个服务器同步。如果这是非零值,则远程服务器具有应用程序尚未获取和处理的其他数据,或者远程服务器可能具有更多不适用于应用程序的数据。 +% 客户端应用程序可以使用它来确定应用程序落后于远程服务器的大约多远,并且可以定期检查该值是增加(应用程序落后)还是减少(应用程序正在追赶)。 +% 请注意,由于远程服务器将只保留其所有数据库的最后一个日志刻度值,但复制可能仅限于应用程序上的某些数据库,当使用全局应用程序时,此值更有意义。此外,远程服务器提供的最后一个日志滴答可能会增加,因为写入到由于复制配置而未复制的系统集合中。因此,在某些情况下,报告的值可能会夸大现实。 +% time:应用程序服务器上的时间。 % totalRequests:应用程序向端点发出的请求总数。 % totalFailedConnects:应用程序进行的失败连接尝试总数。 % totalEvents:应用程序已处理的日志事件总数。 -% totalOperationsExcluded:由于restrictCollections而被排除的日志事件总数。 -% progress:一个JSON对象,其中包含有关复制应用程序进度的详细信息。如果有报告进度,则它包含以下子属性: -% 消息:进度的文字描述 -% 时间:记录进度的日期和时间 -% failedConnects:当前失败的连接尝试次数 -% lastError:一个JSON对象,其中包含有关应用程序上发生的最后一个错误的详细信息。如果发生错误,它包含以下子属性: -% errorNum:数字错误代码 -% errorMessage:文本错误描述 -% 时间:发生错误的日​​期和时间 +% totalOperationsExcluded:由于restrictCollections排除的日志事件总数。 +% progress:一个 JSON 对象,其中包含有关复制应用程序进度的详细信息。如果有进度报告,它包含以下子属性: +% message : 进度的文本描述 +% time : 记录进度的日期和时间 +% failedConnects : 当前连接尝试失败的次数 +% lastError:一个 JSON 对象,其中包含有关应用程序上发生的最后一个错误的详细信息。如果出现错误,它包含以下子属性: +% errorNum : 数字错误代码 +% errorMessage : 文本错误描述 +% time : 发生错误的日​​期和时间 % 如果没有发生错误,lastError将为空。 -% server:具有以下子属性的JSON对象: -% version:应用服务器的版本 -% serverId:应用服务器的ID -% 端点:应用程序连接到的端点(如果应用程序处于活动状态)或将连接到端点(如果应用程序当前处于非活动状态) -% database:应用程序连接到的数据库的名称(如果应用程序处于活动状态)或将连接(如果应用程序当前处于非活动状态) -% 请注意,所有返回的“刻度”值都没有特定的单位。刻度值仅在相互比较时才有意义。较高的报价值表示比较低的报价值“时间更晚”。 -% 警告:调用此方法会将来自远程主服务器上的集合中的数据同步到本地ArangoDB数据库。本地集合中的所有数据将被清除,并替换为主数据库中的数据。 -% 请谨慎使用! -% 还请记住,此命令可能需要很长时间才能完成并返回。这是因为它将首先与主机进行完全的数据同步,这将花费与数据量大致成比例的时间。 +% server:具有以下子属性的 JSON 对象: +% version : 应用程序服务器的版本 +% serverId:应用程序服务器的 id +% 端点:应用程序连接到的端点(如果应用程序处于活动状态)或将连接到(如果应用程序当前处于非活动状态) +% database:应用程序连接到的数据库的名称(如果应用程序处于活动状态)或将连接到(如果应用程序当前处于非活动状态) +% 请注意,返回的所有“刻度”值都没有特定单位。刻度值仅在相互比较时才有意义。较高的刻度值比较低的刻度值意味着“时间较晚”。 +% 警告:调用此方法会将远程领导者上找到的集合中的数据同步到本地 ArangoDB 数据库。本地集合中的所有数据都将被清除并替换为来自领导者的数据。 +% 谨慎使用! +% 另请记住,此命令可能需要很长时间才能完成并返回。这是因为它将首先与领导者进行完整的数据同步,这将花费与数据量大致成正比的时间。 % 注意:集群中的协调器不支持此方法。 -% 返回码 -% 200:如果请求成功执行,则返回。 -% 400:配置不完整或格式错误,返回。 -% 405:使用无效的HTTP方法时返回。 -% 500:如果在同步过程中或开始连续复制时发生错误,则返回。 -% 501:在集群中的协调器上调用此操作时返回。 +% 返回代码 +% 200:请求执行成功返回。 +% 400:配置不完整或格式错误返回。 +% 405:使用无效的HTTP方法时返回。 +% 500:同步或启动连续复制时出错返回。 +% 501:在集群中的Coordinator上调用该操作时返回。 changeRepMakeSlave(PoolNameOrSocket, MapData) -> - BodyStr = eVPack:encodeBin(MapData), - agVstCli:callAgency(PoolNameOrSocket, ?AgPut, <<"/_api/replication/make-slave">>, ?AgDefQuery, ?AgDefHeader, BodyStr). + agVstCli:callAgency(PoolNameOrSocket, ?AgPut, <<"/_api/replication/make-follower">>, ?AgDefQuery, ?AgDefHeader, eVPack:encodeBin(MapData)). %其他复制命令 %返回服务器ID @@ -625,7 +626,7 @@ changeRepMakeSlave(PoolNameOrSocket, MapData) -> %405:使用无效的HTTP方法时返回。 %500:如果组装响应时发生错误,则返回500。 getRepServerId(PoolNameOrSocket) -> - agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_api/replication/server-id">>). + agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_api/replication/server-id">>). % WAL 固定链接操作中可用的返回刻度范围 % 返回预写日志中可用的刻度线范围 @@ -642,7 +643,7 @@ getRepServerId(PoolNameOrSocket) -> % 500:如果无法确定服务器操作状态,则返回。 % 501:在集群中的协调器上调用此操作时返回。 getWalRange(PoolNameOrSocket) -> - agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_api/wal/range">>). + agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_api/wal/range">>). % 返回最后一个可用的刻度值固定链接 % 返回最后一个可用的刻度值 @@ -659,7 +660,7 @@ getWalRange(PoolNameOrSocket) -> % 500:如果组装响应时发生错误,则返回500。 % 501:在集群中的协调器上调用此操作时返回。 getWalLastTick(PoolNameOrSocket) -> - agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_api/wal/lastTick">>). + agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_api/wal/lastTick">>). % 获取最近的操作 % GET /_api/wal/tail @@ -705,8 +706,7 @@ getWalLastTick(PoolNameOrSocket) -> % 500:如果组装响应时发生错误,则返回500。 % 501:在集群中的协调器上调用此操作时返回。 getWalTail(PoolNameOrSocket) -> - agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_api/wal/tail">>). + agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_api/wal/tail">>). getWalTail(PoolNameOrSocket, QueryPars) -> - agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_api/wal/tail">>, QueryPars). - + agVstCli:callAgency(PoolNameOrSocket, ?AgGet, <<"/_api/wal/tail">>, QueryPars). \ No newline at end of file diff --git a/src/agApi/agTransactions.erl b/src/agApi/agTransactions.erl index 1ac1978..9681399 100644 --- a/src/agApi/agTransactions.erl +++ b/src/agApi/agTransactions.erl @@ -79,8 +79,7 @@ % 400:如果事务规范丢失或格式不正确,则服务器将使用HTTP 400进行响应。 % 404:如果事务规范包含未知集合,则服务器将使用HTTP 404进行响应。 beginTransaction(PoolNameOrSocket, MapData) -> - BodyStr = eVPack:encodeBin(MapData), - agVstCli:callAgency(PoolNameOrSocket, ?AgPost, <<"/_api/transaction/begin">>, ?AgDefQuery, ?AgDefHeader, BodyStr). + agVstCli:callAgency(PoolNameOrSocket, ?AgPost, <<"/_api/transaction/begin">>, ?AgDefQuery, ?AgDefHeader, eVPack:encodeBin(MapData)). % 提取服务器端事务的状态 % GET /_api/transaction/{transaction-id} @@ -197,8 +196,7 @@ getTransactionList(PoolNameOrSocket) -> % 404:如果事务规范包含未知集合,则服务器将使用HTTP 404进行响应。 % 500:用户抛出的异常将使服务器以HTTP 500的返回码进行响应 executeTransaction(PoolNameOrSocket, MapData) -> - BodyStr = eVPack:encodeBin(MapData), - agVstCli:callAgency(PoolNameOrSocket, ?AgPost, <<"/_api/transaction">>, ?AgDefQuery, ?AgDefHeader, BodyStr). + agVstCli:callAgency(PoolNameOrSocket, ?AgPost, <<"/_api/transaction">>, ?AgDefQuery, ?AgDefHeader, eVPack:encodeBin(MapData)).