pgpool2.git / summary / log / commit / refs
commit c6e7b334c2957bce42b9799dee9a70679b2bf62c
Author: Tatsuo Ishii <ishii@postgresql.org>
Date: Tue Apr 11 08:01:17 2017 +0000
Add missing pgpool_adm manuals.
They were missing while migrating to SGML. Still Japanese docs need to
be updated.
doc/src/figures/pgpool_adm.gif | Bin 0 -> 8642 bytes
doc/src/figures/pgpool_adm.odp | Bin 0 -> 17456 bytes
doc/src/figures/pgpool_adm.png | Bin 0 -> 32437 bytes
doc/src/sgml/ref/allfiles.sgml | 5 +
doc/src/sgml/ref/pgpool_adm_pcp_attach_node.sgml | 103 ++++++++++++++++++++
doc/src/sgml/ref/pgpool_adm_pcp_detach_node.sgml | 115 +++++++++++++++++++++++
doc/src/sgml/ref/pgpool_adm_pcp_node_count.sgml | 89 ++++++++++++++++++
doc/src/sgml/ref/pgpool_adm_pcp_node_info.sgml | 106 +++++++++++++++++++++
doc/src/sgml/ref/pgpool_adm_pcp_pool_status.sgml | 101 ++++++++++++++++++++
doc/src/sgml/reference.sgml | 71 ++++++++++++++
10 files changed, 590 insertions(+)
diff --git a/doc/src/figures/pgpool_adm.gif b/doc/src/figures/pgpool_adm.gif
new file mode 100644
index 000000000..8ed660038
Binary files /dev/null and b/doc/src/figures/pgpool_adm.gif differ
diff --git a/doc/src/figures/pgpool_adm.odp b/doc/src/figures/pgpool_adm.odp
new file mode 100644
index 000000000..ef4877fd9
Binary files /dev/null and b/doc/src/figures/pgpool_adm.odp differ
diff --git a/doc/src/figures/pgpool_adm.png b/doc/src/figures/pgpool_adm.png
new file mode 100644
index 000000000..f9f265b3c
Binary files /dev/null and b/doc/src/figures/pgpool_adm.png differ
diff --git a/doc/src/sgml/ref/allfiles.sgml b/doc/src/sgml/ref/allfiles.sgml
index 8a2105c1f..d20fde677 100644
--- a/doc/src/sgml/ref/allfiles.sgml
+++ b/doc/src/sgml/ref/allfiles.sgml
@@ -29,3 +29,8 @@ Complete list of usable sgml source files in this directory.
<!ENTITY showPoolPools SYSTEM "show_pool_pools.sgml">
<!ENTITY showPoolVersion SYSTEM "show_pool_version.sgml">
<!ENTITY showPoolCache SYSTEM "show_pool_cache.sgml">
+<!ENTITY pgpoolAdmPcpNodeInfo SYSTEM "pgpool_adm_pcp_node_info.sgml">
+<!ENTITY pgpoolAdmPcpPoolStatus SYSTEM "pgpool_adm_pcp_pool_status.sgml">
+<!ENTITY pgpoolAdmPcpNodeCount SYSTEM "pgpool_adm_pcp_node_count.sgml">
+<!ENTITY pgpoolAdmPcpAttachNode SYSTEM "pgpool_adm_pcp_attach_node.sgml">
+<!ENTITY pgpoolAdmPcpDetachNode SYSTEM "pgpool_adm_pcp_detach_node.sgml">
diff --git a/doc/src/sgml/ref/pgpool_adm_pcp_attach_node.sgml b/doc/src/sgml/ref/pgpool_adm_pcp_attach_node.sgml
new file mode 100644
index 000000000..0cfa9b72c
--- /dev/null
+++ b/doc/src/sgml/ref/pgpool_adm_pcp_attach_node.sgml
@@ -0,0 +1,103 @@
+<!--
+doc/src/sgml/ref/pgpool_adm_pcp_attach_node.sgml
+Pgpool-II documentation
+-->
+
+<refentry id="PGPOOL-ADM-PCP-ATTACH-NODE">
+ <indexterm zone="pgpool-adm-pcp-attach-node">
+ <primary>pgpool_adm_pcp_attach_node</primary>
+ </indexterm>
+
+ <refmeta>
+ <refentrytitle>pgpool_adm_pcp_attach_node</refentrytitle>
+ <manvolnum>3</manvolnum>
+ <refmiscinfo>pgpool_adm extension</refmiscinfo>
+ </refmeta>
+
+ <refnamediv>
+ <refname>pgpool_adm_pcp_attach_node</refname>
+ <refpurpose>
+ a function to attach given node ID</refpurpose>
+ </refnamediv>
+
+ <refsynopsisdiv>
+ <funcsynopsis>
+ <funcprototype>
+ <funcdef><function>pcp_attach_node</function> returns record</funcdef>
+ <paramdef>integer <parameter>node_id</parameter></paramdef>
+ <paramdef>text <parameter>host</parameter></paramdef>
+ <paramdef>integer <parameter>port</parameter></paramdef>
+ <paramdef>text <parameter>username</parameter></paramdef>
+ <paramdef>text <parameter>password</parameter></paramdef>
+ <paramdef>out <parameter>node_attached boolean</parameter></paramdef>
+ </funcprototype>
+
+ <funcprototype>
+ <funcdef><function>pcp_attach_node</function> returns record</funcdef>
+ <paramdef>integer <parameter>node_id</parameter></paramdef>
+ <paramdef>text <parameter>pcp_server</parameter></paramdef>
+ <paramdef>out <parameter>node_attached boolean</parameter></paramdef>
+ </funcprototype>
+
+ </funcsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1 id="R3-PCP-ATTACH-NODE-3">
+ <title>Description</title>
+ <para>
+ <function>pcp_attach_node</function> attaches a node
+ to <productname>Pgpool-II</productname>.
+ </para>
+ </refsect1>
+
+ <refsect1>
+ <title>Arguments</title>
+ <para>
+ <variablelist>
+
+ <varlistentry>
+ <term><replaceable class="parameter">node_id</replaceable></term>
+ <listitem>
+ <para>
+ The index of backend node to attach.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><replaceable class="parameter">pcp_server</replaceable></term>
+ <listitem>
+ <para>
+ The foreign server name for pcp server.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>Other arguments </option></term>
+ <listitem>
+ <para>
+ See <xref linkend="pcp-common-options">.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </refsect1>
+
+ <refsect1>
+ <title>Example</title>
+ <para>
+ Here is an example output:
+ <programlisting>
+test=# SELECT * FROM pcp_attach_node(1,'localhost',11001,'t-ishii','t-ishii');
+ node_attached
+---------------
+ t
+(1 row)
+ </programlisting>
+ </para>
+
+ </refsect1>
+
+</refentry>
diff --git a/doc/src/sgml/ref/pgpool_adm_pcp_detach_node.sgml b/doc/src/sgml/ref/pgpool_adm_pcp_detach_node.sgml
new file mode 100644
index 000000000..8e4ed42e0
--- /dev/null
+++ b/doc/src/sgml/ref/pgpool_adm_pcp_detach_node.sgml
@@ -0,0 +1,115 @@
+<!--
+doc/src/sgml/ref/pgpool_adm_pcp_detach_node.sgml
+Pgpool-II documentation
+-->
+
+<refentry id="PGPOOL-ADM-PCP-DETACH-NODE">
+ <indexterm zone="pgpool-adm-pcp-detach-node">
+ <primary>pgpool_adm_pcp_detach_node</primary>
+ </indexterm>
+
+ <refmeta>
+ <refentrytitle>pgpool_adm_pcp_detach_node</refentrytitle>
+ <manvolnum>3</manvolnum>
+ <refmiscinfo>pgpool_adm extension</refmiscinfo>
+ </refmeta>
+
+ <refnamediv>
+ <refname>pgpool_adm_pcp_detach_node</refname>
+ <refpurpose>
+ a function to detach given node ID</refpurpose>
+ </refnamediv>
+
+ <refsynopsisdiv>
+ <funcsynopsis>
+ <funcprototype>
+ <funcdef><function>pcp_detach_node</function> returns record</funcdef>
+ <paramdef>integer <parameter>node_id</parameter></paramdef>
+ <paramdef>boolean <parameter>gracefully</parameter></paramdef>
+ <paramdef>text <parameter>host</parameter></paramdef>
+ <paramdef>integer <parameter>port</parameter></paramdef>
+ <paramdef>text <parameter>username</parameter></paramdef>
+ <paramdef>text <parameter>password</parameter></paramdef>
+ <paramdef>out <parameter>node_detached boolean</parameter></paramdef>
+ </funcprototype>
+
+ <funcprototype>
+ <funcdef><function>pcp_detach_node</function> returns record</funcdef>
+ <paramdef>integer <parameter>node_id</parameter></paramdef>
+ <paramdef>boolean <parameter>gracefully</parameter></paramdef>
+ <paramdef>text <parameter>pcp_server</parameter></paramdef>
+ <paramdef>out <parameter>node_detached boolean</parameter></paramdef>
+ </funcprototype>
+
+ </funcsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1 id="R3-PCP-DETACH-NODE-3">
+ <title>Description</title>
+ <para>
+ <function>pcp_detach_node</function> detaches a node
+ to <productname>Pgpool-II</productname>.
+ </para>
+ </refsect1>
+
+ <refsect1>
+ <title>Arguments</title>
+ <para>
+ <variablelist>
+
+ <varlistentry>
+ <term><replaceable class="parameter">node_id</replaceable></term>
+ <listitem>
+ <para>
+ The index of backend node to detach.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><replaceable class="parameter">gracefully</replaceable></term>
+ <listitem>
+ <para>
+ If true, wait for all session
+ of <productname>pgpool-II</productname> terminates.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><replaceable class="parameter">pcp_server</replaceable></term>
+ <listitem>
+ <para>
+ The foreign server name for pcp server.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>Other arguments </option></term>
+ <listitem>
+ <para>
+ See <xref linkend="pcp-common-options">.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </refsect1>
+
+ <refsect1>
+ <title>Example</title>
+ <para>
+ Here is an example output:
+ <programlisting>
+test=# SELECT * FROM pcp_detach_node(1, 'false', 'localhost',11001,'t-ishii','t-ishii');
+ node_detached
+---------------
+ t
+(1 row)
+ </programlisting>
+ </para>
+
+ </refsect1>
+
+</refentry>
diff --git a/doc/src/sgml/ref/pgpool_adm_pcp_node_count.sgml b/doc/src/sgml/ref/pgpool_adm_pcp_node_count.sgml
new file mode 100644
index 000000000..16bf7d1a7
--- /dev/null
+++ b/doc/src/sgml/ref/pgpool_adm_pcp_node_count.sgml
@@ -0,0 +1,89 @@
+<!--
+doc/src/sgml/ref/pgpool_adm_pcp_node_count.sgml
+Pgpool-II documentation
+-->
+
+<refentry id="PGPOOL-ADM-PCP-NODE-COUNT">
+ <indexterm zone="pgpool-adm-pcp-node-count">
+ <primary>pgpool_adm_pcp_node_count</primary>
+ </indexterm>
+
+ <refmeta>
+ <refentrytitle>pgpool_adm_pcp_node_count</refentrytitle>
+ <manvolnum>3</manvolnum>
+ <refmiscinfo>pgpool_adm extension</refmiscinfo>
+ </refmeta>
+
+ <refnamediv>
+ <refname>pgpool_adm_pcp_node_count</refname>
+ <refpurpose>
+ a function to retrieves parameters in pgpool.conf.</refpurpose>
+ </refnamediv>
+
+ <refsynopsisdiv>
+ <funcsynopsis>
+ <funcprototype>
+ <funcdef><function>pcp_node_count</function> returns integer</funcdef>
+ <paramdef>text <parameter>host</parameter></paramdef>
+ <paramdef>integer <parameter>port</parameter></paramdef>
+ <paramdef>text <parameter>username</parameter></paramdef>
+ <paramdef>text <parameter>password</parameter></paramdef>
+ </funcprototype>
+
+ <funcprototype>
+ <funcdef><function>pcp_node_count</function> returns integer</funcdef>
+ <paramdef>text <parameter>pcp_server</parameter></paramdef>
+ </funcprototype>
+
+ </funcsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1 id="R3-PCP-NODE-COUNT-3">
+ <title>Description</title>
+ <para>
+ <function>pcp_node_count</function> retrieves number of DB nodes.
+ </para>
+ </refsect1>
+
+ <refsect1>
+ <title>Arguments</title>
+ <para>
+ <variablelist>
+
+ <varlistentry>
+ <term><replaceable class="parameter">pcp_server</replaceable></term>
+ <listitem>
+ <para>
+ The foreign server name for pcp server.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>Other arguments </option></term>
+ <listitem>
+ <para>
+ See <xref linkend="pcp-common-options">.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </refsect1>
+
+ <refsect1>
+ <title>Example</title>
+ <para>
+ Here is an example output:
+ <programlisting>
+test=# SELECT * FROM pcp_node_count('localhost',11001,'t-ishii','t-ishii');
+ node_count
+------------
+ 2
+(1 row)
+ </programlisting>
+ </para>
+
+ </refsect1>
+
+</refentry>
diff --git a/doc/src/sgml/ref/pgpool_adm_pcp_node_info.sgml b/doc/src/sgml/ref/pgpool_adm_pcp_node_info.sgml
new file mode 100644
index 000000000..bcc52c866
--- /dev/null
+++ b/doc/src/sgml/ref/pgpool_adm_pcp_node_info.sgml
@@ -0,0 +1,106 @@
+<!--
+doc/src/sgml/ref/pgpool_adm_pcp_node_info.sgml
+Pgpool-II documentation
+-->
+
+<refentry id="PGPOOL-ADM-PCP-NODE-INFO">
+ <indexterm zone="pgpool-adm-pcp-node-info">
+ <primary>pgpool_adm_pcp_node_info</primary>
+ </indexterm>
+
+ <refmeta>
+ <refentrytitle>pgpool_adm_pcp_node_info</refentrytitle>
+ <manvolnum>3</manvolnum>
+ <refmiscinfo>pgpool_adm extension</refmiscinfo>
+ </refmeta>
+
+ <refnamediv>
+ <refname>pgpool_adm_pcp_node_info</refname>
+ <refpurpose>
+ a function to display the information on the given node
+ ID</refpurpose>
+ </refnamediv>
+
+ <refsynopsisdiv>
+ <funcsynopsis>
+ <funcprototype>
+ <funcdef><function>pcp_node_info</function> returns record</funcdef>
+ <paramdef>integer <parameter>node_id</parameter></paramdef>
+ <paramdef>text <parameter>host</parameter></paramdef>
+ <paramdef>integer <parameter>port</parameter></paramdef>
+ <paramdef>text <parameter>username</parameter></paramdef>
+ <paramdef>text <parameter>password</parameter></paramdef>
+ <paramdef>out <parameter>status text</parameter></paramdef>
+ <paramdef>out <parameter>weight float4</parameter></paramdef>
+ </funcprototype>
+
+ <funcprototype>
+ <funcdef><function>pcp_node_info</function> returns record</funcdef>
+ <paramdef>integer <parameter>node_id</parameter></paramdef>
+ <paramdef>text <parameter>pcp_server</parameter></paramdef>
+ <paramdef>out <parameter>status text</parameter></paramdef>
+ <paramdef>out <parameter>weight float4</parameter></paramdef>
+ </funcprototype>
+
+ </funcsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1 id="R3-PCP-NODE-INFO-3">
+ <title>Description</title>
+ <para>
+ <function>pcp_node_info</function>
+ displays the information on the given node ID.
+ </para>
+ </refsect1>
+
+ <refsect1>
+ <title>Arguments</title>
+ <para>
+ <variablelist>
+
+ <varlistentry>
+ <term><replaceable class="parameter">node_id</replaceable></term>
+ <listitem>
+ <para>
+ The index of backend node to get information of.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><replaceable class="parameter">pcp_server</replaceable></term>
+ <listitem>
+ <para>
+ The foreign server name for pcp server.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>Other arguments </option></term>
+ <listitem>
+ <para>
+ See <xref linkend="pcp-common-options">.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </refsect1>
+
+ <refsect1>
+ <title>Example</title>
+ <para>
+ Here is an example output:
+ <programlisting>
+test=# SELECT * FROM pcp_node_info(0,'',11001,'t-ishii','t-ishii');
+ host | port | status | weight
+------+-------+-------------------+--------
+ /tmp | 11002 | Connection in use | 0
+(1 row)
+ </programlisting>
+ </para>
+
+ </refsect1>
+
+</refentry>
diff --git a/doc/src/sgml/ref/pgpool_adm_pcp_pool_status.sgml b/doc/src/sgml/ref/pgpool_adm_pcp_pool_status.sgml
new file mode 100644
index 000000000..e2e320210
--- /dev/null
+++ b/doc/src/sgml/ref/pgpool_adm_pcp_pool_status.sgml
@@ -0,0 +1,101 @@
+<!--
+doc/src/sgml/ref/pgpool_adm_pcp_pool_status.sgml
+Pgpool-II documentation
+-->
+
+<refentry id="PGPOOL-ADM-PCP-POOL-STATUS">
+ <indexterm zone="pgpool-adm-pcp-pool-status">
+ <primary>pgpool_adm_pcp_pool_status</primary>
+ </indexterm>
+
+ <refmeta>
+ <refentrytitle>pgpool_adm_pcp_pool_status</refentrytitle>
+ <manvolnum>3</manvolnum>
+ <refmiscinfo>pgpool_adm extension</refmiscinfo>
+ </refmeta>
+
+ <refnamediv>
+ <refname>pgpool_adm_pcp_pool_status</refname>
+ <refpurpose>
+ a function to retrieves parameters in pgpool.conf.</refpurpose>
+ </refnamediv>
+
+ <refsynopsisdiv>
+ <funcsynopsis>
+ <funcprototype>
+ <funcdef><function>pcp_pool_status</function> returns record</funcdef>
+ <paramdef>text <parameter>host</parameter></paramdef>
+ <paramdef>integer <parameter>port</parameter></paramdef>
+ <paramdef>text <parameter>username</parameter></paramdef>
+ <paramdef>text <parameter>password</parameter></paramdef>
+ <paramdef>out <parameter>item text</parameter></paramdef>
+ <paramdef>out <parameter>value text</parameter></paramdef>
+ <paramdef>out <parameter>description text</parameter></paramdef>
+ </funcprototype>
+
+ <funcprototype>
+ <funcdef><function>pcp_pool_status</function> returns record</funcdef>
+ <paramdef>text <parameter>pcp_server</parameter></paramdef>
+ <paramdef>out <parameter>item text</parameter></paramdef>
+ <paramdef>out <parameter>value text</parameter></paramdef>
+ <paramdef>out <parameter>description text</parameter></paramdef>
+ </funcprototype>
+
+ </funcsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1 id="R3-PCP-POOL-STATUS-3">
+ <title>Description</title>
+ <para>
+ <function>pcp_pool_status</function> retrieves parameters in
+ pgpool.conf.
+ </para>
+ </refsect1>
+
+ <refsect1>
+ <title>Arguments</title>
+ <para>
+ <variablelist>
+
+ <varlistentry>
+ <term><replaceable class="parameter">pcp_server</replaceable></term>
+ <listitem>
+ <para>
+ The foreign server name for pcp server.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>Other arguments </option></term>
+ <listitem>
+ <para>
+ See <xref linkend="pcp-common-options">.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </refsect1>
+
+ <refsect1>
+ <title>Example</title>
+ <para>
+ Here is an example output:
+ <programlisting>
+ test=# SELECT * FROM pcp_pool_status('localhost',11001,'t-ishii','t-ishii') WHERE item ~ 'backend.*0';
+ item | value | description
+-------------------------+------------------------------------------------+-------------------------------
+ backend_hostname0 | /tmp | backend #0 hostname
+ backend_port0 | 11002 | backend #0 port number
+ backend_weight0 | 0.500000 | weight of backend #0
+ backend_data_directory0 | /home/t-ishii/work/pgpool-II/current/aaa/data0 | data directory for backend #0
+ backend_status0 | 2 | status of backend #0
+ backend_flag0 | ALLOW_TO_FAILOVER | backend #0 flag
+(6 rows)
+ </programlisting>
+ </para>
+
+ </refsect1>
+
+</refentry>
diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml
index 711d7afaf..986e5783d 100644
--- a/doc/src/sgml/reference.sgml
+++ b/doc/src/sgml/reference.sgml
@@ -148,4 +148,75 @@
&showPoolCache
</reference>
+
+ <reference id="pgpool-adm">
+ <title>pgpool_adm extension</title>
+
+ <partintro>
+ <para>
+ <command>pgpool_adm</command> is a set of extensions to allow
+ SQL access to <xref linkend="pcp-commands"> (actually, pcp
+ libraries). It uses foreign data wrapper as shown in the
+ diagram below.
+ </para>
+ <para>
+ <figure>
+ <title>How <command>pgpool_adm</command> works</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="pgpool_adm.gif">
+ </imageobject>
+ </mediaobject>
+ </figure>
+ </para>
+
+ <para>
+ It is possible to call the functions from either via pgpool-II
+ (1) or via <productname>PostgreSQL</productname> (2). In case
+ (1), <productname>Pgpool-II</productname> accepts query from
+ user (1), then forward
+ to <productname>PostgreSQL</productname> (3).
+ <productname>PostgreSQL</productname> connects
+ to <productname>Pgpool-II</productname> (5)
+ and <productname>Pgpool-II</productname> reply back
+ to <productname>PostgreSQL</productname> with the result
+ (3). <productname>PostgreSQL</productname> returns the result
+ to <productname>Pgpool-II</productname> (5)
+ and <productname>Pgpool-II</productname> fowards the data to
+ the user (6).
+ </para>
+ <para>
+ In case (2), <productname>PostgreSQL</productname> accepts query from user (2).
+ <productname>PostgreSQL</productname> connects
+ to <productname>Pgpool-II</productname> (5)
+ and <productname>Pgpool-II</productname> reply back
+ to <productname>PostgreSQL</productname> with the result (3).
+ <productname>PostgreSQL</productname> replies back the data to
+ the user (6).
+ </para>
+ <para>
+ There are two forms to call pgpool_adm functions: first form
+ accepts <productname>Pgpool-II</productname> host name (or IP
+ address), pcp port number, pcp user name, its password and
+ another parameters.
+ </para>
+ <para>
+ In the second form, <productname>Pgpool-II</productname>
+ server name is required. The server name must be already
+ defined using "CREATE FOREIGN SERVER" command
+ of <productname>PostgreSQL</productname>. The pcp port number
+ is hard coded as 9898, the pcp user name is assumes to be same
+ as caller's <productname>PostgreSQL</productname> user name.
+ password is extraced from $HOME/.pcppass.
+ </para>
+ </partintro>
+
+ &pgpoolAdmPcpNodeInfo
+ &pgpoolAdmPcpPoolStatus
+ &pgpoolAdmPcpNodeCount
+ &pgpoolAdmPcpAttachNode
+ &pgpoolAdmPcpDetachNode
+
+ </reference>
+
</part>
[parent: 5add91252260]