blob: fc9107d97863d3a35a992a779b6671e535d3ddc5 [file] [log] [blame]
<!doctype html><html lang=en class=no-js><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=generator content="Hugo 0.102.3"><link rel=canonical type=text/html href=/docs/contribution-guidelines/><link rel=alternate type=application/rss+xml href=/docs/contribution-guidelines/index.xml><meta name=robots content="noindex, nofollow"><link rel="shortcut icon" href=/favicons/favicon.ico><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/favicons/favicon-32x32.png sizes=32x32><link rel=icon type=image/png href=/favicons/android-36x36.png sizes=36x36><link rel=icon type=image/png href=/favicons/android-48x48.png sizes=48x48><link rel=icon type=image/png href=/favicons/android-72x72.png sizes=72x72><link rel=icon type=image/png href=/favicons/android-96x96.png sizes=96x96><link rel=icon type=image/png href=/favicons/android-144x144.png sizes=144x144><link rel=icon type=image/png href=/favicons/android-192x192.png sizes=192x192><title>Contribution Guidelines | HugeGraph</title><meta name=description content><meta property="og:title" content="Contribution Guidelines"><meta property="og:description" content="Apache HugeGraph site"><meta property="og:type" content="website"><meta property="og:url" content="/docs/contribution-guidelines/"><meta property="og:site_name" content="HugeGraph"><meta itemprop=name content="Contribution Guidelines"><meta itemprop=description content="Apache HugeGraph site"><meta name=twitter:card content="summary"><meta name=twitter:title content="Contribution Guidelines"><meta name=twitter:description content="Apache HugeGraph site"><link rel=preload href=/scss/main.min.14ea575cb35d93d46ff8681b2334f40fd46243c100c5c39f5a841b931fae2d40.css as=style><link href=/scss/main.min.14ea575cb35d93d46ff8681b2334f40fd46243c100c5c39f5a841b931fae2d40.css rel=stylesheet integrity><script src=https://code.jquery.com/jquery-3.5.1.min.js integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin=anonymous></script>
<link rel=stylesheet href=/css/prism.css><script type=application/javascript>var doNotTrack=!1;doNotTrack||(window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)},ga.l=+new Date,ga("create","UA-00000000-0","auto"),ga("send","pageview"))</script><script async src=https://www.google-analytics.com/analytics.js></script></head><body class=td-section><header><nav class="js-navbar-scroll navbar navbar-expand navbar-dark flex-column flex-md-row td-navbar"><a class=navbar-brand href=/><span class=navbar-logo><svg id="图层_1" data-name="图层 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 16 16"><defs><style>.cls-1{fill:none;stroke:#fff;stroke-miterlimit:10;stroke-width:.5px;opacity:.3}.cls-2{fill:#229efa}.cls-3{fill:#9948f7}.cls-4{fill:#33bc7a}.cls-5{fill:url(#未命名的渐变_3)}.cls-6{fill:url(#未命名的渐变_13)}.cls-7{fill:url(#未命名的渐变_11)}</style><linearGradient id="未命名的渐变_3" x1="6.16" y1="14.63" x2="6.16" y2="6.01" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#2e3192"/><stop offset="0" stop-color="#229efa"/><stop offset=".44" stop-color="#239cf8"/><stop offset=".6" stop-color="#2795f2"/><stop offset=".71" stop-color="#2d8ae8"/><stop offset=".81" stop-color="#3679d9"/><stop offset=".89" stop-color="#4263c6"/><stop offset=".95" stop-color="#5048af"/><stop offset="1" stop-color="#5c319b"/></linearGradient><linearGradient id="未命名的渐变_13" x1="10.75" y1="8.2" x2="4.49" y2="1.94" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#991146"/><stop offset="0" stop-color="#326b4e"/><stop offset=".02" stop-color="#3a685c"/><stop offset=".07" stop-color="#506180"/><stop offset=".13" stop-color="#645aa0"/><stop offset=".19" stop-color="#7554bc"/><stop offset=".26" stop-color="#8250d2"/><stop offset=".35" stop-color="#8d4ce3"/><stop offset=".45" stop-color="#944aee"/><stop offset=".6" stop-color="#9848f5"/><stop offset="1" stop-color="#9948f7"/></linearGradient><linearGradient id="未命名的渐变_11" x1="15.34" y1="6.67" x2="7.88" y2="10.98" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#33bc7a"/><stop offset=".45" stop-color="#32ba7a"/><stop offset=".61" stop-color="#2fb37c"/><stop offset=".73" stop-color="#29a87e"/><stop offset=".82" stop-color="#219782"/><stop offset=".9" stop-color="#168186"/><stop offset=".97" stop-color="#09668b"/><stop offset="1" stop-color="#03598e"/></linearGradient></defs><title>logo</title><rect class="cls-1" x="-143.14" y="-373.46" width="597.8" height="424.44"/><circle class="cls-2" cx="12.02" cy="1.83" r="1.33"/><circle class="cls-3" cx="12.02" cy="14.17" r="1.33"/><circle class="cls-4" cx="1.33" cy="8" r="1.33"/><path class="cls-5" d="M7.91 10h0a2.65 2.65.0 01-.23-3.74A1.75 1.75.0 017.91 6h0A2.66 2.66.0 014.4 6h0a1.81 1.81.0 01.24.24A2.65 2.65.0 014.4 10h0a2.62 2.62.0 00-.89 2 2.65 2.65.0 104.4-2z"/><path class="cls-6" d="M12.19 5.49a2.78 2.78.0 01-.5.11A2.64 2.64.0 018.76 3.5h0a2.65 2.65.0 10-2.6 3.17A2.6 2.6.0 007 6.53H7a2.65 2.65.0 013.44 2 2.94 2.94.0 010-.51 2.65 2.65.0 011.75-2.53z"/><path class="cls-7" d="M13 5.35a2.64 2.64.0 00-2.59 2.12h0a3 3 0 01-.08.32A2.65 2.65.0 017.54 9.58a2.86 2.86.0 00.37.41h0a2.63 2.63.0 01.9 2 2.84 2.84.0 01-.05.51 2.64 2.64.0 013.12-2.06l.32.08h0a2.6 2.6.0 00.84.14 2.65 2.65.0 100-5.3z"/></svg></span><span class=font-weight-bold>HugeGraph</span></a><div class="td-navbar-nav-scroll ml-md-auto" id=main_navbar><ul class="navbar-nav mt-2 mt-lg-0"><li class="nav-item mr-4 mb-2 mb-lg-0"><a class=nav-link href=/docs/><i class='fas fa-book pr-2'></i><span>Documentation</span></a></li><li class="nav-item mr-4 mb-2 mb-lg-0"><a class=nav-link href=https://github.com/apache/incubator-hugegraph target=_blank><i class='fab fa-github pr-2'></i><span>GitHub</span></a></li><li class="nav-item mr-4 mb-2 mb-lg-0"><a class=nav-link href=/docs/download/download/><i class='fas fa-download pr-2'></i><span>Download</span></a></li><li class="nav-item mr-4 mb-2 mb-lg-0"><a class=nav-link href=/community/><span>Community</span></a></li><li class="nav-item dropdown mr-4 d-none d-lg-block"><a class="nav-link dropdown-toggle" href=# id=navbarDropdown role=button data-toggle=dropdown aria-haspopup=true aria-expanded=false>English</a><div class=dropdown-menu aria-labelledby=navbarDropdownMenuLink><a class=dropdown-item href=/cn/docs/contribution-guidelines/>中文</a></div></li></ul></div><div class="navbar-nav d-none d-lg-block"></div></nav></header><div class="container-fluid td-outer"><div class=td-main><div class="row flex-xl-nowrap"><main class="col-12 col-md-9 col-xl-8 pl-md-5" role=main><div class=td-content><div class="pageinfo pageinfo-primary d-print-none"><p>This is the multi-page printable view of this section.
<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/docs/contribution-guidelines/>Return to the regular view of this page</a>.</p></div><h1 class=title>Contribution Guidelines</h1><ul><li>1: <a href=#pg-17ea1d6a1e6627d08a7d6f4d2898cca1>How to Contribute to HugeGraph</a></li><li>2: <a href=#pg-dc89ef117bed0b0ef3c6487f9a6a8bd0>Subscribe Mailing Lists</a></li><li>3: <a href=#pg-07536ba8fd0a4ba5975f821978cf0009>Validate Apache Release</a></li><li>4: <a href=#pg-c89774a4e231af418639f53a926ea188>Setup Server in IDEA (Dev)</a></li><li>5: <a href=#pg-e1fc3666faccec72ead94a2ed6a9f8a3>Apache HugeGraph Committer Guide</a></li></ul><div class=content></div></div><div class=td-content><h1 id=pg-17ea1d6a1e6627d08a7d6f4d2898cca1>1 - How to Contribute to HugeGraph</h1><p>Thanks for taking the time to contribute! As an open source project, HugeGraph is looking forward to be contributed from everyone, and we are also grateful to all the contributors.</p><p>The following is a contribution guide for HugeGraph:</p><img width=884 alt=image src=https://user-images.githubusercontent.com/9625821/159643158-8bf72c0a-93c3-4a58-8912-7b2ab20ced1d.png><h2 id=1-preparation>1. Preparation</h2><p>Optional: You can use <a href=https://desktop.github.com/>GitHub desktop</a> to greatly simplify the commit and update process.</p><p>We can contribute by reporting issues, submitting code patches or any other feedback.</p><p>Before submitting the code, we need to do some preparation:</p><ol><li><p>Sign up or login to GitHub: <a href=https://github.com>https://github.com</a></p></li><li><p>Fork HugeGraph repo from GitHub: <a href=https://github.com/apache/hugegraph/fork>https://github.com/apache/incubator-hugegraph/fork</a></p></li><li><p>Clone code from fork repo to local: <a href=https://github.com/$%7BGITHUB_USER_NAME%7D/hugegraph>https://github.com/${GITHUB_USER_NAME}/hugegraph</a></p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell><span style=display:flex><span><span style=color:#8f5902;font-style:italic># clone code from remote to local repo</span>
</span></span><span style=display:flex><span>git clone https://github.com/<span style=color:#4e9a06>${</span><span style=color:#000>GITHUB_USER_NAME</span><span style=color:#4e9a06>}</span>/hugegraph
</span></span></code></pre></div></li><li><p>Configure local HugeGraph repo</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell><span style=display:flex><span><span style=color:#204a87>cd</span> hugegraph
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># add upstream to synchronize the latest code</span>
</span></span><span style=display:flex><span>git remote add hugegraph https://github.com/apache/hugegraph
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># set name and email to push code to github</span>
</span></span><span style=display:flex><span>git config user.name <span style=color:#4e9a06>&#34;{full-name}&#34;</span> <span style=color:#8f5902;font-style:italic># like &#34;Jermy Li&#34;</span>
</span></span><span style=display:flex><span>git config user.email <span style=color:#4e9a06>&#34;{email-address-of-github}&#34;</span> <span style=color:#8f5902;font-style:italic># like &#34;jermy@apache.org&#34;</span>
</span></span></code></pre></div></li></ol><h2 id=2-create-an-issue-on-github>2. Create an Issue on GitHub</h2><p>If you encounter bugs or have any questions, please go to <a href=https://github.com/apache/incubator-hugegraph/issues>GitHub Issues</a> to report them and feel free to <a href=https://github.com/apache/hugegraph/issues/new>create an issue</a>.</p><h2 id=3-make-changes-of-code-locally>3. Make changes of code locally</h2><h4 id=31-create-a-new-branch>3.1 Create a new branch</h4><p>Please don&rsquo;t use master branch for development. We should create a new branch instead:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell><span style=display:flex><span><span style=color:#8f5902;font-style:italic># checkout master branch</span>
</span></span><span style=display:flex><span>git checkout master
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># pull the latest code from official hugegraph</span>
</span></span><span style=display:flex><span>git pull hugegraph
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># create new branch: bugfix-branch</span>
</span></span><span style=display:flex><span>git checkout -b bugfix-branch
</span></span></code></pre></div><h4 id=32-change-the-code>3.2 Change the code</h4><p>Assume that we need to modify some files like &ldquo;HugeGraph.java&rdquo; and &ldquo;HugeFactory.java&rdquo;:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell><span style=display:flex><span><span style=color:#8f5902;font-style:italic># modify code to fix a bug</span>
</span></span><span style=display:flex><span>vim hugegraph-core/src/main/java/org/apache/hugegraph/HugeGraph.java
</span></span><span style=display:flex><span>vim hugegraph-core/src/main/java/org/apache/hugegraph/HugeFactory.java
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># run test locally (optional)</span>
</span></span><span style=display:flex><span>mvn <span style=color:#204a87>test</span> -Pcore-test,memory
</span></span></code></pre></div><p>Note: In order to be consistent with the code style easily, if you use <a href=https://www.jetbrains.com/idea/>IDEA</a> as your IDE, you can directly <a href=https://www.jetbrains.com/help/idea/configuring-code-style.html>import</a> our code style <a href=./hugegraph-style.xml>configuration file</a>.</p><h5 id=321-check-licenses>3.2.1 Check licenses</h5><p>If we want to add new third-party dependencies to the <code>HugeGraph</code> project, we need to do the following things:</p><ol><li>Find the third-party dependent repository, put the dependent <code>license</code> file into <a href=https://github.com/apache/incubator-hugegraph/tree/master/hugegraph-server/hugegraph-dist/release-docs/licenses>./hugegraph-dist/release-docs/licenses/</a> path.</li><li>Declare the dependency in <a href=https://github.com/apache/incubator-hugegraph/blob/master/hugegraph-server/hugegraph-dist/release-docs/LICENSE>./hugegraph-dist/release-docs/LICENSE</a> <code>LICENSE</code> information.</li><li>Find the NOTICE file in the repository and append it to <a href=https://github.com/apache/incubator-hugegraph/blob/master/hugegraph-server/hugegraph-dist/release-docs/NOTICE>./hugegraph-dist/release-docs/NOTICE</a> file (skip this step if there is no NOTICE file).</li><li>Execute locally <a href=https://github.com/apache/incubator-hugegraph/blob/master/hugegraph-server/hugegraph-dist/scripts/dependency/regenerate_known_dependencies.sh>./hugegraph-dist/scripts/dependency/regenerate_known_dependencies.sh</a> to update the dependency list <a href=https://github.com/apache/incubator-hugegraph/blob/master/hugegraph-server/hugegraph-dist/scripts/dependency/known-dependencies.txt>known-dependencies.txt</a> (or manually update) .</li></ol><p><strong>Example</strong>: A new third-party dependency is introduced into the project -> <code>ant-1.9.1.jar</code></p><ul><li>The project source code is located at: <a href=https://github.com/apache/ant/tree/rel/1.9.1>https://github.com/apache/ant/tree/rel/1.9.1</a></li><li>LICENSE file: <a href=https://github.com/apache/ant/blob/rel/1.9.1/LICENSE>https://github.com/apache/ant/blob/rel/1.9.1/LICENSE</a></li><li>NOTICE file: <a href=https://github.com/apache/ant/blob/rel/1.9.1/NOTICE>https://github.com/apache/ant/blob/rel/1.9.1/NOTICE</a></li></ul><p>The license information of <code>ant-1.9.1.jar</code> needs to be specified in the LICENSE file, and the notice information needs to be specified in the NOTICE file. The detailed LICENSE file corresponding to ant-1.9.1.jar needs to be copied to our licenses/ directory. Finally update the known-dependencies.txt file.</p><h4 id=33-commit-changes-to-git-repo>3.3 Commit changes to git repo</h4><p>After the code has been completed, we submit them to the local git repo:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell><span style=display:flex><span><span style=color:#8f5902;font-style:italic># add files to local git index</span>
</span></span><span style=display:flex><span>git add hugegraph-core/src/main/java/org/apache/hugegraph/HugeGraph.java
</span></span><span style=display:flex><span>git add hugegraph-core/src/main/java/org/apache/hugegraph/HugeFactory.java
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># commit to local git repo</span>
</span></span><span style=display:flex><span>git commit
</span></span></code></pre></div><p>Please edit the commit message after running <code>git commit</code>, we can explain what and how to fix a bug or implement a feature, the following is an example:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-sh data-lang=sh><span style=display:flex><span>Fix bug: run deploy multiple <span style=color:#204a87>times</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>fix <span style=color:#8f5902;font-style:italic>#ISSUE_ID</span>
</span></span></code></pre></div><blockquote><p>Please remember to fill in the issue id, which was generated by GitHub after issue creation.</p></blockquote><h4 id=34-push-commit-to-github-fork-repo>3.4 Push commit to GitHub fork repo</h4><p>Push the local commit to GitHub fork repo:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell><span style=display:flex><span><span style=color:#8f5902;font-style:italic># push the local commit to fork repo</span>
</span></span><span style=display:flex><span>git push origin bugfix-branch:bugfix-branch
</span></span></code></pre></div><p>Note that since GitHub requires submitting code through <code>username + token</code> (instead of using <code>username + password</code> directly), you need to create a GitHub token from <a href=https://github.com/settings/tokens>https://github.com/settings/tokens</a>:
<img width=1280 alt=image src=https://user-images.githubusercontent.com/9625821/163524204-7fe0e6bf-9c8b-4b1a-ac65-6a0ac423eb16.png></p><h2 id=4-create-a-pull-request>4. Create a Pull Request</h2><p>Go to the web page of GitHub fork repo, there would be a chance to create a Pull Request after pushing to a new branch, just click button &ldquo;Compare & pull request&rdquo; to do it. Then edit the description for proposed changes, which can just be copied from the commit message.</p><p>Note: please make sure the email address you used to submit the code is bound to the GitHub account. For how to bind the email address, please refer to <a href=https://github.com/settings/emails>https://github.com/settings/emails</a>:
<img width=1280 alt=image src=https://user-images.githubusercontent.com/9625821/163522445-2a50a72a-dea2-434f-9868-3a0d40d0d037.png></p><h2 id=5-code-review>5. Code review</h2><p>Maintainers will start the code review after all the <strong>automatic</strong> checks are passed:</p><ul><li>Check: Contributor License Agreement is signed</li><li>Check: Travis CI builds is passed (automatically Test and Deploy)</li></ul><p>The commit will be accepted and merged if there is no problem after review.</p><p>Please click on &ldquo;Details&rdquo; to find the problem if any check does not pass.</p><p>If there are checks not passed or changes requested, then continue to modify the code and push again.</p><h2 id=6-more-changes-after-review>6. More changes after review</h2><p>If we have not passed the review, don&rsquo;t be discouraged. Usually a commit needs to be reviewed several times before being accepted! Please follow the review comments and make further changes.</p><p>After the further changes, we submit them to the local repo:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell><span style=display:flex><span><span style=color:#8f5902;font-style:italic># commit all updated files in a new commit,</span>
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># please feel free to enter any appropriate commit message, note that</span>
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># we will squash all commits in the pull request as one commit when</span>
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># merging into the master branch.</span>
</span></span><span style=display:flex><span>git commit -a
</span></span></code></pre></div><blockquote><p>If there are conflicts that prevent the code from being merged, we need to rebase on master branch:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell><span style=display:flex><span><span style=color:#8f5902;font-style:italic># synchronize the latest code</span>
</span></span><span style=display:flex><span>git checkout master
</span></span><span style=display:flex><span>git pull hugegraph
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># rebase on master</span>
</span></span><span style=display:flex><span>git checkout bugfix-branch
</span></span><span style=display:flex><span>git rebase -i master
</span></span></code></pre></div></blockquote><p>And push it to GitHub fork repo again:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell><span style=display:flex><span><span style=color:#8f5902;font-style:italic># force push the local commit to fork repo</span>
</span></span><span style=display:flex><span>git push -f origin bugfix-branch:bugfix-branch
</span></span></code></pre></div><p>GitHub will automatically update the Pull Request after we push it, just wait for code review.</p></div><div class=td-content style=page-break-before:always><h1 id=pg-dc89ef117bed0b0ef3c6487f9a6a8bd0>2 - Subscribe Mailing Lists</h1><h3 id=subscribe-the-mailing-list>Subscribe the mailing list</h3><p>Subscribe to the mailing list by following steps:</p><ul><li>Email <a href=mailto:dev-subscribe@hugegraph.apache.org>dev-subscribe@hugegraph.apache.org</a> through your email account, and then you will receive a confirmation email.</li><li>Reply to the confirmation email to confirm your subscription. Then, you will receive another confirmation email.</li><li>Now you are a subscriber of the mailing list. If you have more questions, just email the mailing list and someone will reply to you soon.</li></ul><p>You can subscribe to the mailing list anytime you want. Additionally, you can check <a href=https://lists.apache.org/list.html?dev@hugegraph.apache.org>historical emails / all emails</a> easily (even if you are not subscribing to the list).</p><p>Some notes:</p><ul><li>If you don&rsquo;t receive the confirmation email, please send it after 24 hours later.</li><li>Don&rsquo;t email to <strong>dev</strong> until you subscribe to the mailing list successfully (otherwise the mail will be banned).</li></ul><p>HugeGraph offers an email list for development and user discussions.</p><ul><li>hugegraph-dev: <a href=mailto:dev@hugegraph.apache.org>dev@hugegraph.apache.org</a> for both development and users discussions.</li></ul><p>More information on mailing subscribe can be found at:</p><ul><li><a href=https://lists.apache.org/list.html?dev@hugegraph.apache.org>https://lists.apache.org/list.html?dev@hugegraph.apache.org</a></li><li><a href=http://apache.org/foundation/mailinglists.html#subscribing>http://apache.org/foundation/mailinglists.html#subscribing</a></li></ul><h1 id=unsubscribe-mailing-lists>Unsubscribe Mailing Lists</h1><p>If you do not need to know what&rsquo;s going on with HugeGraph, you can unsubscribe from the mailing list.</p><p>Unsubscribe from the mailing list steps are as follows:</p><ol><li><p>Email <a href=mailto:dev-unsubscribe@hugegraph.apache.org>dev-unsubscribe@hugegraph.apache.org</a> with your subscribed email address, subject and content are arbitrary.</p></li><li><p>Receive confirmation email and reply. After completing step 1, you will receive a confirmation email from <a href=mailto:dev-help@hugegraph.apache.org>dev-help@hugegraph.apache.org</a> (if not received, please confirm whether the email is automatically classified as spam, promotion email, subscription email, etc.) . Then reply directly to the email, or click on the link in the email to reply quickly, the subject and content are arbitrary.</p></li><li><p>Receive a goodbye email. After completing the above steps, you will receive a goodbye email with the subject GOODBYE from <a href=mailto:dev@hugegraph.apache.org>dev@hugegraph.apache.org</a>, and you have successfully unsubscribed to the Apache HugeGraph mailing list, and you will not receive emails from <a href=mailto:dev@hugegraph.apache.org>dev@hugegraph.apache.org</a>.</p></li></ol></div><div class=td-content style=page-break-before:always><h1 id=pg-07536ba8fd0a4ba5975f821978cf0009>3 - Validate Apache Release</h1><blockquote><p>Note: this doc will be updated continuously.
It is recommended to use Java11 in verification, we will drop Java8 support from version 1.5.0</p></blockquote><h2 id=verification>Verification</h2><p>When the internal temporary release and packaging work is completed, other community developers (
especially PMC) need to participate in the <a href=https://cwiki.apache.org/confluence/display/INCUBATOR/Incubator+Release+Checklist>verification link</a>
To ensure the &ldquo;correctness + completeness&rdquo; of someone&rsquo;s published version, here requires **everyone
** to participate as much as possible, and then explain which items you have <strong>checked</strong> in the
subsequent <strong>email reply</strong>.(The following are the core items)</p><h4 id=1-prepare>1. prepare</h4><p>If there is no svn or gpg or wget environment locally, it is recommended to install it first
(windows recommend using WSL2 environment, or at least <code>git-bash</code>), also make sure to install java
(recommended 11) and maven software</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=display:flex><span><span style=color:#8f5902;font-style:italic># 1. install svn</span>
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># ubuntu/debian</span>
</span></span><span style=display:flex><span>sudo apt install subversion -y
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># MacOS</span>
</span></span><span style=display:flex><span>brew install subversion
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># To verify that the installation was successful, execute the following command:</span>
</span></span><span style=display:flex><span>svn --version
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># 2. install gpg</span>
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># ubuntu/debian</span>
</span></span><span style=display:flex><span>sudo apt-get install gnupg -y
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># MacOS</span>
</span></span><span style=display:flex><span>brew install gnupg
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># To verify that the installation was successful, execute the following command:</span>
</span></span><span style=display:flex><span>gpg --version
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># 3. install wget (we will enhance it later, like use `curl`)</span>
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># ubuntu/debian</span>
</span></span><span style=display:flex><span>sudo apt-get install wget -y
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># MacOS</span>
</span></span><span style=display:flex><span>brew install wget
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># 4. Download the hugegraph-svn directory </span>
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># For version number, pay attention to fill in the verification version</span>
</span></span><span style=display:flex><span>svn co https://dist.apache.org/repos/dist/dev/incubator/hugegraph/1.x.x/
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># (Note) If svn downloads a file very slowly, </span>
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># you can consider wget to download a single file, as follows (or consider using a proxy)</span>
</span></span><span style=display:flex><span>wget https://dist.apache.org/repos/dist/dev/incubator/hugegraph/1.x.x/apache-hugegraph-toolchain-incubating-1.x.x.tar.gz
</span></span></code></pre></div><h4 id=2-check-hash-value>2. check hash value</h4><p>First you need to check the file integrity of the <code>source + binary</code> package, Verify by <code>shasum</code> to
ensure that it is consistent with the hash value published on apache/GitHub (Usually sha512), Here
is the same as the last step of 0x02 inspection.</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=display:flex><span>execute the following command:
</span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>for</span> i in *.tar.gz<span style=color:#000;font-weight:700>;</span> <span style=color:#204a87;font-weight:700>do</span> <span style=color:#204a87>echo</span> <span style=color:#000>$i</span><span style=color:#000;font-weight:700>;</span> shasum -a <span style=color:#0000cf;font-weight:700>512</span> --check <span style=color:#000>$i</span>.sha512<span style=color:#000;font-weight:700>;</span> <span style=color:#204a87;font-weight:700>done</span>
</span></span></code></pre></div><h4 id=3-check-gpg-signature>3. check gpg signature</h4><p>This is to ensure that the published package is uploaded by a <strong>reliable</strong> person.
Assuming tom signs and uploads,
others should download A&rsquo;s <strong>public key</strong> and then perform <strong>signature
confirmation</strong>.</p><p>Related commands:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=display:flex><span><span style=color:#8f5902;font-style:italic># 1. Download project trusted public key to local (required for the first time) &amp; import</span>
</span></span><span style=display:flex><span>curl https://downloads.apache.org/incubator/hugegraph/KEYS &gt; KEYS
</span></span><span style=display:flex><span>gpg --import KEYS
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># After importing, you can see the following output, which means that x user public keys have been imported</span>
</span></span><span style=display:flex><span>gpg: /home/ubuntu/.gnupg/trustdb.gpg: trustdb created
</span></span><span style=display:flex><span>gpg: key BA7E78F8A81A885E: public key <span style=color:#4e9a06>&#34;imbajin (apache mail) &lt;jin@apache.org&gt;&#34;</span> imported
</span></span><span style=display:flex><span>gpg: key 818108E7924549CC: public key <span style=color:#4e9a06>&#34;vaughn &lt;vaughn@apache.org&gt;&#34;</span> imported
</span></span><span style=display:flex><span>gpg: key 28DCAED849C4180E: public key <span style=color:#4e9a06>&#34;coderzc (CODE SIGNING KEY) &lt;zhaocong@apache.org&gt;&#34;</span> imported
</span></span><span style=display:flex><span>...
</span></span><span style=display:flex><span>gpg: Total number processed: x
</span></span><span style=display:flex><span>gpg: imported: x
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># 2. Trust release users (trust n username mentioned in voting mail, if more than one user, </span>
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># just repeat the steps in turn or use the script below)</span>
</span></span><span style=display:flex><span>gpg --edit-key <span style=color:#000>$USER</span> <span style=color:#8f5902;font-style:italic># input the username, enter the interactive mode</span>
</span></span><span style=display:flex><span>gpg&gt; trust
</span></span><span style=display:flex><span>...output options..
</span></span><span style=display:flex><span>Your decision? <span style=color:#0000cf;font-weight:700>5</span> <span style=color:#8f5902;font-style:italic># select 5</span>
</span></span><span style=display:flex><span>Do you really want to <span style=color:#204a87>set</span> this key to ultimate trust? <span style=color:#ce5c00;font-weight:700>(</span>y/N<span style=color:#ce5c00;font-weight:700>)</span> y <span style=color:#8f5902;font-style:italic># slect y, then q quits trusting the next user</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># (Optional) You could also use the command to trust one user in non-interactive mode:</span>
</span></span><span style=display:flex><span><span style=color:#204a87>echo</span> -e <span style=color:#4e9a06>&#34;5\ny\n&#34;</span> <span style=color:#000;font-weight:700>|</span> gpg --batch --command-fd <span style=color:#0000cf;font-weight:700>0</span> --edit-key <span style=color:#000>$USER</span> trust
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># Or use the script to auto import all public gpg keys (be carefully):</span>
</span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>for</span> key in <span style=color:#204a87;font-weight:700>$(</span>gpg --no-tty --list-keys --with-colons <span style=color:#000;font-weight:700>|</span> awk -F: <span style=color:#4e9a06>&#39;/^pub/ {print $5}&#39;</span><span style=color:#204a87;font-weight:700>)</span><span style=color:#000;font-weight:700>;</span> <span style=color:#204a87;font-weight:700>do</span>
</span></span><span style=display:flex><span> <span style=color:#204a87>echo</span> -e <span style=color:#4e9a06>&#34;5\ny\n&#34;</span> <span style=color:#000;font-weight:700>|</span> gpg --batch --command-fd <span style=color:#0000cf;font-weight:700>0</span> --edit-key <span style=color:#4e9a06>&#34;</span><span style=color:#000>$key</span><span style=color:#4e9a06>&#34;</span> trust
</span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>done</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># 3. Check the signature (make sure there is no Warning output, every source/binary file prompts Good Signature)</span>
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic>#Single file verification</span>
</span></span><span style=display:flex><span>gpg --verify xx.asc xxx-src.tar.gz
</span></span><span style=display:flex><span>gpg --verify xx.asc xxx.tar.gz <span style=color:#8f5902;font-style:italic># Note: without the bin/binary suffix</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># One-click shell traversal verification (recommended)</span>
</span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>for</span> i in *.tar.gz<span style=color:#000;font-weight:700>;</span> <span style=color:#204a87;font-weight:700>do</span> <span style=color:#204a87>echo</span> <span style=color:#000>$i</span><span style=color:#000;font-weight:700>;</span> gpg --verify <span style=color:#000>$i</span>.asc <span style=color:#000>$i</span> <span style=color:#000;font-weight:700>;</span> <span style=color:#204a87;font-weight:700>done</span>
</span></span></code></pre></div><p>First confirm the overall integrity/consistency, and then confirm the specific content (<strong>key</strong>)</p><h4 id=4-check-the-archive-contents>4. Check the archive contents</h4><p>Check the contents of the archive downloaded from preparation work. Divided into two aspects: source code package + binary package, The source code package is stricter, it can be said that the core part (Because it is longer, For a complete list refer to
the official <a href=https://cwiki.apache.org/confluence/display/INCUBATOR/Incubator+Release+Checklist>Wiki</a>)</p><h5 id=a-source-package>A. source package</h5><p>After decompressing <code>*hugegraph*src.tar.gz</code>, Do the following checks:</p><ol><li>folders with <code>incubating</code>, and no <strong>empty</strong> files/folders</li><li><code>LICENSE</code> + <code>NOTICE</code> + <code>DISCLAIM</code> file exists and the content is normal</li><li><strong>does not exist</strong> binaries (without LICENSE)</li><li>The source code files all contain the standard <code>ASF License</code> header (this could be done with
the <code>Maven-MAT</code> plugin)</li><li>Check whether the <code>pom.xml</code> version number of each parent/child module is consistent (and meet
expectations)</li><li>Finally, make sure the source code works/compiles correctly</li></ol><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=display:flex><span><span style=color:#8f5902;font-style:italic># prefer to use/switch to `java 11` for the following operations (compiling/running) (Note: `Computer` only supports `java &gt;= 11`)</span>
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># java --version</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># try to compile in the Unix env to check if it works well</span>
</span></span><span style=display:flex><span>mvn clean package -P stage -Dmaven.test.skip<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>true</span> -Dcheckstyle.skip<span style=color:#ce5c00;font-weight:700>=</span><span style=color:#204a87>true</span>
</span></span></code></pre></div><h5 id=b-binary-package>B. binary package</h5><p>After decompressing <code>xxx-hugegraph.tar.gz</code>, perform the following checks:</p><ol><li>folders with <code>incubating</code></li><li><code>LICENSE</code> and <code>NOTICE</code> file exists and the content is normal</li><li>start server</li></ol><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=display:flex><span><span style=color:#8f5902;font-style:italic># hugegraph-server</span>
</span></span><span style=display:flex><span>bin/start-hugegraph.sh
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># hugegraph-loader</span>
</span></span><span style=display:flex><span>bin/hugegraph-loader.sh -g hugegraph -f example/file/struct.json -s example/file/schema.groovy
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic># hugegraph-hubble</span>
</span></span><span style=display:flex><span>bin/start-hubble.sh
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>more reference official website: https://hugegraph.apache.org/docs/quickstart
</span></span></code></pre></div><p><strong>Note:</strong> If a third-party dependency is introduced in the binary package, you need to update the
LICENSE and add the third-party dependent LICENSE; if the third-party dependent LICENSE is Apache
2.0, and the corresponding project contains NOTICE, you also need to update Our NOTICE file</p><h4 id=5-check-the-official-website-and-github-and-other-pages>5. Check the official website and GitHub and other pages</h4><ol><li>Make sure that the official website at least meets <a href=https://whimsy.apache.org/pods/project/hugegraph>apache website check</a>,
and no circular links, etc.</li><li>Update <strong>download link</strong> and release notes updated</li><li>&mldr;</li></ol><h2 id=mail-template>Mail Template</h2><p>After the check & test, you should reply to the mail with the following content: (normal devs & PMC)</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-markdown data-lang=markdown><span style=display:flex><span>[] +1 approve
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>[] +0 no opinion
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>[] -1 disapprove with the reason
</span></span></code></pre></div><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-markdown data-lang=markdown><span style=display:flex><span>+1 (non-binding)
</span></span><span style=display:flex><span>I checked:
</span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>1.</span> Download link/tag in mail are valid
</span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>2.</span> Checksum and GPG signatures are OK
</span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>3.</span> LICENSE <span style=color:#a40000>&amp;</span> NOTICE <span style=color:#a40000>&amp;</span> DISCLAIMER are exist
</span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>4.</span> Build successfully on XX OS <span style=color:#a40000>&amp;</span> Version XX
</span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>5.</span> No unexpected binary files
</span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>6.</span> Date is right in the NOTICE file
</span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>7.</span> Compile from source is fine under JavaXX
</span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>8.</span> No empty file <span style=color:#a40000>&amp;</span> directory found
</span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>9.</span> Test running XXX service OK
</span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>10.</span> ....
</span></span></code></pre></div><p>and the PMC members should reply with <code>binding</code>, it&rsquo;s important for summary the valid votes:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-markdown data-lang=markdown><span style=display:flex><span>+1 (binding)
</span></span><span style=display:flex><span>I checked:
</span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>1.</span> Download link/tag in mail are valid
</span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>2.</span> Checksum and GPG signatures are OK
</span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>3.</span> LICENSE <span style=color:#a40000>&amp;</span> NOTICE <span style=color:#a40000>&amp;</span> DISCLAIMER are exist
</span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>4.</span> Build successfully on XX OS <span style=color:#a40000>&amp;</span> Version XX
</span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>5.</span> No unexpected binary files
</span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>6.</span> Date is right in the NOTICE file
</span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>7.</span> Compile from source is fine under JavaXX
</span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>8.</span> No empty file <span style=color:#a40000>&amp;</span> directory found
</span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>9.</span> Test running XX process OK
</span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>10.</span> ....
</span></span></code></pre></div></div><div class=td-content style=page-break-before:always><h1 id=pg-c89774a4e231af418639f53a926ea188>4 - Setup Server in IDEA (Dev)</h1><blockquote><p>NOTE: The following configuration is for reference purposes only, and has been tested on Linux and macOS platforms based on <a href=https://github.com/apache/incubator-hugegraph/commit/a946ad1de4e8f922251a5241ffc957c33379677f>this version</a>.</p></blockquote><h3 id=background>Background</h3><p>The <a href=/docs/quickstart/hugegraph-server/>Quick Start</a> section provides instructions on how to start and stop HugeGraph-Server using <strong>scripts</strong>. In this guide, we will explain how to run and debug HugeGraph-Server on the Linux platform using <strong>IntelliJ IDEA</strong>.</p><p>The core steps for local startup are the same as starting with <strong>scripts</strong>:</p><ol><li>Initialize the database backend by executing the <code>InitStore</code> class to initialize the graph.</li><li>Start HugeGraph-Server by executing the <code>HugeGraphServer</code> class to load the initialized graph information and start the server.</li></ol><p>Before proceeding with the following process, make sure that you have cloned the source code of HugeGraph
and have configured the development environment, such as <code>Java 11</code> & you could config your local environment
with this <a href=https://github.com/apache/incubator-hugegraph/wiki/The-style-config-for-HugeGraph-in-IDEA>config-doc</a></p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=display:flex><span>git clone https://github.com/apache/hugegraph.git
</span></span></code></pre></div><h3 id=steps>Steps</h3><h4 id=1-copy-configuration-files>1. Copy Configuration Files</h4><p>To avoid the impact of configuration file changes on Git tracking, it is recommended to copy the required configuration files to a separate folder. Run the following command to copy the files:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=display:flex><span>cp -r hugegraph-dist/src/assembly/static/scripts hugegraph-dist/src/assembly/static/conf path-to-your-directory
</span></span></code></pre></div><p>Replace <code>path-to-your-directory</code> with the path to the directory where you want to copy the files.</p><h4 id=2-configure-initstore-to-initialize-the-graph>2. Configure <code>InitStore</code> to initialize the graph</h4><p>First, you need to configure the database backend in the configuration files. In this example, we will use RocksDB. Open <code>path-to-your-directory/conf/graphs/hugegraph.properties</code> and configure it as follows:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback><span style=display:flex><span>backend=rocksdb
</span></span><span style=display:flex><span>serializer=binary
</span></span><span style=display:flex><span>rocksdb.data_path=.
</span></span><span style=display:flex><span>rocksdb.wal_path=.
</span></span></code></pre></div><p>Next, open the <code>Run/Debug Configurations</code> panel in IntelliJ IDEA and create a new Application configuration. Follow these steps for the configuration:</p><ul><li>Select <code>hugegraph-dist</code> as the <code>Use classpath of module</code>.</li><li>Set the <code>Main class</code> to <code>org.apache.hugegraph.cmd.InitStore</code>.</li><li>Set the program arguments to <code>conf/rest-server.properties</code>. Note that the path here is relative to the working directory, so make sure to set the working directory to <code>path-to-your-directory</code>.</li></ul><blockquote><p>If <strong>user authentication</strong> (authenticator) is configured for HugeGraph-Server in the <strong>Java 11</strong> environment, you need to refer to the script <a href=https://github.com/apache/incubator-hugegraph/blob/master/hugegraph-server/hugegraph-dist/src/assembly/static/bin/init-store.sh#L52>configuration</a> in the binary package and add the following <strong>VM options</strong>:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=display:flex><span>--add-exports<span style=color:#ce5c00;font-weight:700>=</span>java.base/jdk.internal.reflect<span style=color:#ce5c00;font-weight:700>=</span>ALL-UNNAMED
</span></span></code></pre></div><p>Otherwise, an error will occur:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#000>java</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>lang</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>reflect</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>InaccessibleObjectException</span><span style=color:#ce5c00;font-weight:700>:</span> <span style=color:#000>Unable</span> <span style=color:#000>to</span> <span style=color:#000>make</span> <span style=color:#204a87;font-weight:700>public</span> <span style=color:#204a87;font-weight:700>static</span> <span style=color:#204a87;font-weight:700>synchronized</span> <span style=color:#204a87;font-weight:700>void</span> <span style=color:#000>jdk</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>internal</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>reflect</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>Reflection</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>registerFieldsToFilter</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#000>java</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>lang</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>Class</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#000>java</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>lang</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>String</span><span style=color:#ce5c00;font-weight:700>[])</span> <span style=color:#000>accessible</span><span style=color:#ce5c00;font-weight:700>:</span> <span style=color:#000>module</span> <span style=color:#000>java</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>base</span> <span style=color:#000>does</span> <span style=color:#000>not</span> <span style=color:#4e9a06>&#34;exports jdk.internal.reflect&#34;</span> <span style=color:#000>to</span> <span style=color:#000>unnamed</span> <span style=color:#000>module</span> <span style=color:#5c35cc;font-weight:700>@xxx</span>
</span></span></code></pre></div></blockquote><p>Once the configuration is completed, run it. If the execution is successful, the following runtime logs will be displayed:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#000>2023</span><span style=color:#ce5c00;font-weight:700>-</span><span style=color:#000>06</span><span style=color:#ce5c00;font-weight:700>-</span><span style=color:#000>05</span> <span style=color:#000>00</span><span style=color:#ce5c00;font-weight:700>:</span><span style=color:#000>43</span><span style=color:#ce5c00;font-weight:700>:</span><span style=color:#000>37</span> <span style=color:#ce5c00;font-weight:700>[</span><span style=color:#000>main</span><span style=color:#ce5c00;font-weight:700>]</span> <span style=color:#ce5c00;font-weight:700>[</span><span style=color:#000>INFO</span><span style=color:#ce5c00;font-weight:700>]</span> <span style=color:#000>o</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>a</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>h</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>u</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>ConfigUtil</span> <span style=color:#ce5c00;font-weight:700>-</span> <span style=color:#000>Scanning</span> <span style=color:#000>option</span> <span style=color:#a40000>&#39;</span><span style=color:#000>graphs</span><span style=color:#a40000>&#39;</span> <span style=color:#000>directory</span> <span style=color:#a40000>&#39;</span><span style=color:#ce5c00;font-weight:700>./</span><span style=color:#000>conf</span><span style=color:#ce5c00;font-weight:700>/</span><span style=color:#000>graphs</span><span style=color:#a40000>&#39;</span>
</span></span><span style=display:flex><span><span style=color:#000>2023</span><span style=color:#ce5c00;font-weight:700>-</span><span style=color:#000>06</span><span style=color:#ce5c00;font-weight:700>-</span><span style=color:#000>05</span> <span style=color:#000>00</span><span style=color:#ce5c00;font-weight:700>:</span><span style=color:#000>43</span><span style=color:#ce5c00;font-weight:700>:</span><span style=color:#000>37</span> <span style=color:#ce5c00;font-weight:700>[</span><span style=color:#000>main</span><span style=color:#ce5c00;font-weight:700>]</span> <span style=color:#ce5c00;font-weight:700>[</span><span style=color:#000>INFO</span><span style=color:#ce5c00;font-weight:700>]</span> <span style=color:#000>o</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>a</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>h</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>c</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>InitStore</span> <span style=color:#ce5c00;font-weight:700>-</span> <span style=color:#000>Init</span> <span style=color:#000>graph</span> <span style=color:#000>with</span> <span style=color:#000>config</span> <span style=color:#000>file</span><span style=color:#ce5c00;font-weight:700>:</span> <span style=color:#ce5c00;font-weight:700>./</span><span style=color:#000>conf</span><span style=color:#ce5c00;font-weight:700>/</span><span style=color:#000>graphs</span><span style=color:#ce5c00;font-weight:700>/</span><span style=color:#000>hugegraph</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>properties</span>
</span></span><span style=display:flex><span><span style=color:#ce5c00;font-weight:700>......</span>
</span></span><span style=display:flex><span><span style=color:#000>2023</span><span style=color:#ce5c00;font-weight:700>-</span><span style=color:#000>06</span><span style=color:#ce5c00;font-weight:700>-</span><span style=color:#000>05</span> <span style=color:#000>00</span><span style=color:#ce5c00;font-weight:700>:</span><span style=color:#000>43</span><span style=color:#ce5c00;font-weight:700>:</span><span style=color:#000>39</span> <span style=color:#ce5c00;font-weight:700>[</span><span style=color:#000>main</span><span style=color:#ce5c00;font-weight:700>]</span> <span style=color:#ce5c00;font-weight:700>[</span><span style=color:#000>INFO</span><span style=color:#ce5c00;font-weight:700>]</span> <span style=color:#000>o</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>a</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>h</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>b</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>s</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>r</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>RocksDBStore</span> <span style=color:#ce5c00;font-weight:700>-</span> <span style=color:#000>Write</span> <span style=color:#000>down</span> <span style=color:#000>the</span> <span style=color:#000>backend</span> <span style=color:#000>version</span><span style=color:#ce5c00;font-weight:700>:</span> <span style=color:#000>1</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>11</span>
</span></span><span style=display:flex><span><span style=color:#000>2023</span><span style=color:#ce5c00;font-weight:700>-</span><span style=color:#000>06</span><span style=color:#ce5c00;font-weight:700>-</span><span style=color:#000>05</span> <span style=color:#000>00</span><span style=color:#ce5c00;font-weight:700>:</span><span style=color:#000>43</span><span style=color:#ce5c00;font-weight:700>:</span><span style=color:#000>39</span> <span style=color:#ce5c00;font-weight:700>[</span><span style=color:#000>main</span><span style=color:#ce5c00;font-weight:700>]</span> <span style=color:#ce5c00;font-weight:700>[</span><span style=color:#000>INFO</span><span style=color:#ce5c00;font-weight:700>]</span> <span style=color:#000>o</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>a</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>h</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>StandardHugeGraph</span> <span style=color:#ce5c00;font-weight:700>-</span> <span style=color:#000>Graph</span> <span style=color:#a40000>&#39;</span><span style=color:#000>hugegraph</span><span style=color:#a40000>&#39;</span> <span style=color:#000>has</span> <span style=color:#000>been</span> <span style=color:#000>initialized</span>
</span></span><span style=display:flex><span><span style=color:#000>2023</span><span style=color:#ce5c00;font-weight:700>-</span><span style=color:#000>06</span><span style=color:#ce5c00;font-weight:700>-</span><span style=color:#000>05</span> <span style=color:#000>00</span><span style=color:#ce5c00;font-weight:700>:</span><span style=color:#000>43</span><span style=color:#ce5c00;font-weight:700>:</span><span style=color:#000>39</span> <span style=color:#ce5c00;font-weight:700>[</span><span style=color:#000>main</span><span style=color:#ce5c00;font-weight:700>]</span> <span style=color:#ce5c00;font-weight:700>[</span><span style=color:#000>INFO</span><span style=color:#ce5c00;font-weight:700>]</span> <span style=color:#000>o</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>a</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>h</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>StandardHugeGraph</span> <span style=color:#ce5c00;font-weight:700>-</span> <span style=color:#000>Close</span> <span style=color:#000>graph</span> <span style=color:#000>standardhugegraph</span><span style=color:#ce5c00;font-weight:700>[</span><span style=color:#000>hugegraph</span><span style=color:#ce5c00;font-weight:700>]</span>
</span></span><span style=display:flex><span><span style=color:#000>2023</span><span style=color:#ce5c00;font-weight:700>-</span><span style=color:#000>06</span><span style=color:#ce5c00;font-weight:700>-</span><span style=color:#000>05</span> <span style=color:#000>00</span><span style=color:#ce5c00;font-weight:700>:</span><span style=color:#000>43</span><span style=color:#ce5c00;font-weight:700>:</span><span style=color:#000>39</span> <span style=color:#ce5c00;font-weight:700>[</span><span style=color:#000>db</span><span style=color:#ce5c00;font-weight:700>-</span><span style=color:#000>open</span><span style=color:#ce5c00;font-weight:700>-</span><span style=color:#000>1</span><span style=color:#ce5c00;font-weight:700>]</span> <span style=color:#ce5c00;font-weight:700>[</span><span style=color:#000>INFO</span><span style=color:#ce5c00;font-weight:700>]</span> <span style=color:#000>o</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>a</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>h</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>b</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>s</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>r</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>RocksDBStore</span> <span style=color:#ce5c00;font-weight:700>-</span> <span style=color:#000>Opening</span> <span style=color:#000>RocksDB</span> <span style=color:#000>with</span> <span style=color:#000>data</span> <span style=color:#000>path</span><span style=color:#ce5c00;font-weight:700>:</span> <span style=color:#ce5c00;font-weight:700>./</span><span style=color:#000>m</span>
</span></span><span style=display:flex><span><span style=color:#000>2023</span><span style=color:#ce5c00;font-weight:700>-</span><span style=color:#000>06</span><span style=color:#ce5c00;font-weight:700>-</span><span style=color:#000>05</span> <span style=color:#000>00</span><span style=color:#ce5c00;font-weight:700>:</span><span style=color:#000>43</span><span style=color:#ce5c00;font-weight:700>:</span><span style=color:#000>39</span> <span style=color:#ce5c00;font-weight:700>[</span><span style=color:#000>db</span><span style=color:#ce5c00;font-weight:700>-</span><span style=color:#000>open</span><span style=color:#ce5c00;font-weight:700>-</span><span style=color:#000>1</span><span style=color:#ce5c00;font-weight:700>]</span> <span style=color:#ce5c00;font-weight:700>[</span><span style=color:#000>INFO</span><span style=color:#ce5c00;font-weight:700>]</span> <span style=color:#000>o</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>a</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>h</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>b</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>s</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>r</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>RocksDBStore</span> <span style=color:#ce5c00;font-weight:700>-</span> <span style=color:#000>Opening</span> <span style=color:#000>RocksDB</span> <span style=color:#000>with</span> <span style=color:#000>data</span> <span style=color:#000>path</span><span style=color:#ce5c00;font-weight:700>:</span> <span style=color:#ce5c00;font-weight:700>./</span><span style=color:#000>s</span>
</span></span><span style=display:flex><span><span style=color:#000>2023</span><span style=color:#ce5c00;font-weight:700>-</span><span style=color:#000>06</span><span style=color:#ce5c00;font-weight:700>-</span><span style=color:#000>05</span> <span style=color:#000>00</span><span style=color:#ce5c00;font-weight:700>:</span><span style=color:#000>43</span><span style=color:#ce5c00;font-weight:700>:</span><span style=color:#000>39</span> <span style=color:#ce5c00;font-weight:700>[</span><span style=color:#000>db</span><span style=color:#ce5c00;font-weight:700>-</span><span style=color:#000>open</span><span style=color:#ce5c00;font-weight:700>-</span><span style=color:#000>1</span><span style=color:#ce5c00;font-weight:700>]</span> <span style=color:#ce5c00;font-weight:700>[</span><span style=color:#000>INFO</span><span style=color:#ce5c00;font-weight:700>]</span> <span style=color:#000>o</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>a</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>h</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>b</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>s</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>r</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>RocksDBStore</span> <span style=color:#ce5c00;font-weight:700>-</span> <span style=color:#000>Opening</span> <span style=color:#000>RocksDB</span> <span style=color:#000>with</span> <span style=color:#000>data</span> <span style=color:#000>path</span><span style=color:#ce5c00;font-weight:700>:</span> <span style=color:#ce5c00;font-weight:700>./</span><span style=color:#000>g</span>
</span></span><span style=display:flex><span><span style=color:#000>2023</span><span style=color:#ce5c00;font-weight:700>-</span><span style=color:#000>06</span><span style=color:#ce5c00;font-weight:700>-</span><span style=color:#000>05</span> <span style=color:#000>00</span><span style=color:#ce5c00;font-weight:700>:</span><span style=color:#000>43</span><span style=color:#ce5c00;font-weight:700>:</span><span style=color:#000>39</span> <span style=color:#ce5c00;font-weight:700>[</span><span style=color:#000>main</span><span style=color:#ce5c00;font-weight:700>]</span> <span style=color:#ce5c00;font-weight:700>[</span><span style=color:#000>INFO</span><span style=color:#ce5c00;font-weight:700>]</span> <span style=color:#000>o</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>a</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>h</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>HugeFactory</span> <span style=color:#ce5c00;font-weight:700>-</span> <span style=color:#000>HugeFactory</span> <span style=color:#000>shutdown</span>
</span></span><span style=display:flex><span><span style=color:#000>2023</span><span style=color:#ce5c00;font-weight:700>-</span><span style=color:#000>06</span><span style=color:#ce5c00;font-weight:700>-</span><span style=color:#000>05</span> <span style=color:#000>00</span><span style=color:#ce5c00;font-weight:700>:</span><span style=color:#000>43</span><span style=color:#ce5c00;font-weight:700>:</span><span style=color:#000>39</span> <span style=color:#ce5c00;font-weight:700>[</span><span style=color:#000>hugegraph</span><span style=color:#ce5c00;font-weight:700>-</span><span style=color:#000>shutdown</span><span style=color:#ce5c00;font-weight:700>]</span> <span style=color:#ce5c00;font-weight:700>[</span><span style=color:#000>INFO</span><span style=color:#ce5c00;font-weight:700>]</span> <span style=color:#000>o</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>a</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>h</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>HugeFactory</span> <span style=color:#ce5c00;font-weight:700>-</span> <span style=color:#000>HugeGraph</span> <span style=color:#000>is</span> <span style=color:#000>shutting</span> <span style=color:#000>down</span>
</span></span></code></pre></div><h4 id=3-running-hugegraphserver>3. Running <code>HugeGraphServer</code></h4><p>Similarly, open the <code>Run/Debug Configurations</code> panel in IntelliJ IDEA and create a new <code>Application</code> configuration. Follow these steps for the configuration:</p><ul><li>Select <code>hugegraph-dist</code> as the <code>Use classpath of module</code>.</li><li>Set the <code>Main class</code> to <code>org.apache.hugegraph.dist.HugeGraphServer</code>.</li><li>Set the program arguments to <code>conf/gremlin-server.yaml conf/rest-server.properties</code>. Similarly, note that the path here is relative to the working directory, so make sure to set the working directory to <code>path-to-your-directory</code>.</li></ul><blockquote><p>Similarly, if <strong>user authentication</strong> (authenticator) is configured for HugeGraph-Server in the <strong>Java 11</strong> environment, you need to refer to the script <a href=https://github.com/apache/incubator-hugegraph/blob/master/hugegraph-server/hugegraph-dist/src/assembly/static/bin/hugegraph-server.sh#L124>configuration</a> in the binary package and add the following <strong>VM options</strong>:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=display:flex><span>--add-exports<span style=color:#ce5c00;font-weight:700>=</span>java.base/jdk.internal.reflect<span style=color:#ce5c00;font-weight:700>=</span>ALL-UNNAMED --add-modules<span style=color:#ce5c00;font-weight:700>=</span>jdk.unsupported --add-exports<span style=color:#ce5c00;font-weight:700>=</span>java.base/sun.nio.ch<span style=color:#ce5c00;font-weight:700>=</span>ALL-UNNAMED
</span></span></code></pre></div><p>Otherwise, an error will occur:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#000>java</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>lang</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>reflect</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>InaccessibleObjectException</span><span style=color:#ce5c00;font-weight:700>:</span> <span style=color:#000>Unable</span> <span style=color:#000>to</span> <span style=color:#000>make</span> <span style=color:#204a87;font-weight:700>public</span> <span style=color:#204a87;font-weight:700>static</span> <span style=color:#204a87;font-weight:700>synchronized</span> <span style=color:#204a87;font-weight:700>void</span> <span style=color:#000>jdk</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>internal</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>reflect</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>Reflection</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>registerFieldsToFilter</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#000>java</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>lang</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>Class</span><span style=color:#ce5c00;font-weight:700>,</span><span style=color:#000>java</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>lang</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>String</span><span style=color:#ce5c00;font-weight:700>[])</span> <span style=color:#000>accessible</span><span style=color:#ce5c00;font-weight:700>:</span> <span style=color:#000>module</span> <span style=color:#000>java</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>base</span> <span style=color:#000>does</span> <span style=color:#000>not</span> <span style=color:#4e9a06>&#34;exports jdk.internal.reflect&#34;</span> <span style=color:#000>to</span> <span style=color:#000>unnamed</span> <span style=color:#000>module</span> <span style=color:#5c35cc;font-weight:700>@xxx</span>
</span></span></code></pre></div></blockquote><p>Once the configuration is completed, run it. If you see the following logs, it means that <code>HugeGraphServer</code> has been successfully started:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#ce5c00;font-weight:700>......</span>
</span></span><span style=display:flex><span><span style=color:#000>2023</span><span style=color:#ce5c00;font-weight:700>-</span><span style=color:#000>06</span><span style=color:#ce5c00;font-weight:700>-</span><span style=color:#000>05</span> <span style=color:#000>00</span><span style=color:#ce5c00;font-weight:700>:</span><span style=color:#000>51</span><span style=color:#ce5c00;font-weight:700>:</span><span style=color:#000>56</span> <span style=color:#ce5c00;font-weight:700>[</span><span style=color:#000>gremlin</span><span style=color:#ce5c00;font-weight:700>-</span><span style=color:#000>server</span><span style=color:#ce5c00;font-weight:700>-</span><span style=color:#000>boss</span><span style=color:#ce5c00;font-weight:700>-</span><span style=color:#000>1</span><span style=color:#ce5c00;font-weight:700>]</span> <span style=color:#ce5c00;font-weight:700>[</span><span style=color:#000>INFO</span><span style=color:#ce5c00;font-weight:700>]</span> <span style=color:#000>o</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>a</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>t</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>g</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>s</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>GremlinServer</span> <span style=color:#ce5c00;font-weight:700>-</span> <span style=color:#000>Gremlin</span> <span style=color:#000>Server</span> <span style=color:#000>configured</span> <span style=color:#000>with</span> <span style=color:#000>worker</span> <span style=color:#000>thread</span> <span style=color:#000>pool</span> <span style=color:#000>of</span> <span style=color:#000>1</span><span style=color:#ce5c00;font-weight:700>,</span> <span style=color:#000>gremlin</span> <span style=color:#000>pool</span> <span style=color:#000>of</span> <span style=color:#000>8</span> <span style=color:#000>and</span> <span style=color:#000>boss</span> <span style=color:#000>thread</span> <span style=color:#000>pool</span> <span style=color:#000>of</span> <span style=color:#000>1</span><span style=color:#ce5c00;font-weight:700>.</span>
</span></span><span style=display:flex><span><span style=color:#000>2023</span><span style=color:#ce5c00;font-weight:700>-</span><span style=color:#000>06</span><span style=color:#ce5c00;font-weight:700>-</span><span style=color:#000>05</span> <span style=color:#000>00</span><span style=color:#ce5c00;font-weight:700>:</span><span style=color:#000>51</span><span style=color:#ce5c00;font-weight:700>:</span><span style=color:#000>56</span> <span style=color:#ce5c00;font-weight:700>[</span><span style=color:#000>gremlin</span><span style=color:#ce5c00;font-weight:700>-</span><span style=color:#000>server</span><span style=color:#ce5c00;font-weight:700>-</span><span style=color:#000>boss</span><span style=color:#ce5c00;font-weight:700>-</span><span style=color:#000>1</span><span style=color:#ce5c00;font-weight:700>]</span> <span style=color:#ce5c00;font-weight:700>[</span><span style=color:#000>INFO</span><span style=color:#ce5c00;font-weight:700>]</span> <span style=color:#000>o</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>a</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>t</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>g</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>s</span><span style=color:#ce5c00;font-weight:700>.</span><span style=color:#c4a000>GremlinServer</span> <span style=color:#ce5c00;font-weight:700>-</span> <span style=color:#000>Channel</span> <span style=color:#000>started</span> <span style=color:#000>at</span> <span style=color:#000>port</span> <span style=color:#000>8182</span><span style=color:#ce5c00;font-weight:700>.</span>
</span></span></code></pre></div><h4 id=4-debugging-hugegraphserver-optional>4. Debugging <code>HugeGraphServer</code> (optional)</h4><p>After completing the above configuration, you can try debugging <code>HugeGraphServer</code>. Run <code>HugeGraphServer</code> in debug mode and set a breakpoint at the following <a href=https://github.com/apache/hugegraph/blob/a946ad1de4e8f922251a5241ffc957c33379677f/hugegraph-api/src/main/java/org/apache/hugegraph/api/graph/VertexAPI.java#L238>location</a>:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span><span style=color:#204a87;font-weight:700>public</span> <span style=color:#000>String</span> <span style=color:#000>list</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#5c35cc;font-weight:700>@Context</span> <span style=color:#000>GraphManager</span> <span style=color:#000>manager</span><span style=color:#ce5c00;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#5c35cc;font-weight:700>@PathParam</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;graph&#34;</span><span style=color:#ce5c00;font-weight:700>)</span> <span style=color:#000>String</span> <span style=color:#000>graph</span><span style=color:#ce5c00;font-weight:700>,</span> <span style=color:#5c35cc;font-weight:700>@QueryParam</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;label&#34;</span><span style=color:#ce5c00;font-weight:700>)</span> <span style=color:#000>String</span> <span style=color:#000>label</span><span style=color:#ce5c00;font-weight:700>,</span>
</span></span><span style=display:flex><span> <span style=color:#5c35cc;font-weight:700>@QueryParam</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#4e9a06>&#34;properties&#34;</span><span style=color:#ce5c00;font-weight:700>)</span> <span style=color:#000>String</span> <span style=color:#000>properties</span><span style=color:#ce5c00;font-weight:700>,</span> <span style=color:#ce5c00;font-weight:700>......)</span> <span style=color:#ce5c00;font-weight:700>{</span>
</span></span><span style=display:flex><span> <span style=color:#8f5902;font-style:italic>// ignore log
</span></span></span><span style=display:flex><span><span style=color:#8f5902;font-style:italic></span> <span style=color:#000>Map</span><span style=color:#ce5c00;font-weight:700>&lt;</span><span style=color:#000>String</span><span style=color:#ce5c00;font-weight:700>,</span> <span style=color:#000>Object</span><span style=color:#ce5c00;font-weight:700>&gt;</span> <span style=color:#000>props</span> <span style=color:#ce5c00;font-weight:700>=</span> <span style=color:#000>parseProperties</span><span style=color:#ce5c00;font-weight:700>(</span><span style=color:#000>properties</span><span style=color:#ce5c00;font-weight:700>);</span>
</span></span></code></pre></div><p>Then use the RESTful API to request <code>HugeGraphServer</code>:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=display:flex><span>curl <span style=color:#4e9a06>&#34;http://localhost:8080/graphs/hugegraph/graph/vertices&#34;</span> <span style=color:#000;font-weight:700>|</span> gunzip
</span></span></code></pre></div><p>At this point, you can view detailed variable information in the debugger.</p><h4 id=5-log4j2-configuration>5. Log4j2 Configuration</h4><p>By default, when running <code>InitStore</code> and <code>HugeGraphServer</code>, the Log4j2 configuration file path read is <code>hugegraph-dist/src/main/resources/log4j2.xml</code>, not <code>path-to-your-directory/conf/log4j2.xml</code>. This configuration file is read when starting HugeGraph-Server using the <strong>script</strong>.</p><p>To avoid maintaining two separate configuration files, you can modify the Log4j2 configuration file path when running and debugging HugeGraph-Server in <strong>IntelliJ IDEA</strong>:</p><ol><li>Open the previously created <code>Application</code> configuration.</li><li>Click on <code>Modify options</code> - <code>Add VM options</code>.</li><li>Set the VM options to <code>-Dlog4j.configurationFile=conf/log4j2.xml</code>.</li></ol><h3 id=possible-issues>Possible Issues</h3><h4 id=1-java-package-sunmisc-does-not-exist>1. java: package sun.misc does not exist</h4><p>The reason may be that cross-compilation is triggered when using Java 11 to compile, causing the symbol of <code>sun.misc.Unsafe</code> used in the project to not be found. There are two possible solutions:</p><ol><li>In IntelliJ IDEA, go to <code>Preferences/Settings</code> and find the <code>Java Compiler</code> panel. Then, disable the <code>--release</code> option (recommended).</li><li>Set the Project SDK to 8 (Deprecated soon).</li></ol><h4 id=2-java-storeraftrpcraftrequests-does-not-exist-rpc-generated-files>2. java: *.store.raft.rpc.RaftRequests does not exist (RPC Generated Files)</h4><p>The reason is that the source code didn&rsquo;t include the <code>RPC-generated</code> files. You could try 2 ways to fix it:</p><ol><li>[CMD]<code>mvn clean compile</code> in the <strong>root</strong> directory (Recommend)</li><li>[UI] right click on the <code>hugegraph</code> repo and select <code>Maven->Generate Sources and Update Folders</code>. This will rebuild the repo and correctly generate the required files.</li></ol><h4 id=3-unable-to-print-location-information-l-in-log4j2>3. Unable to Print Location Information (%l) in Log4j2</h4><p>This is because Log4j2 uses asynchronous loggers. You can refer to the <a href=https://logging.apache.org/log4j/2.x/manual/layouts.html#LocationInformation>official documentation</a> for configuration details.</p><hr><h3 id=references>References</h3><ol><li><a href=/docs/quickstart/hugegraph-server/>HugeGraph-Server Quick Start</a></li><li><a href=https://gist.github.com/imbajin/1661450f000cd62a67e46d4f1abfe82c>Local Debugging Guide for HugeGraph Server (Win/Unix)</a></li><li><a href=https://youtrack.jetbrains.com/issue/IDEA-180033>&ldquo;package sun.misc does not exist&rdquo; compilation error</a></li><li><a href=https://youtrack.jetbrains.com/issue/IDEA-201168>Cannot compile: java: package sun.misc does not exist</a></li><li><a href=https://github.com/apache/incubator-hugegraph/wiki/The-style-config-for-HugeGraph-in-IDEA>The code-style config for HugeGraph in IDEA</a></li></ol></div><div class=td-content style=page-break-before:always><h1 id=pg-e1fc3666faccec72ead94a2ed6a9f8a3>5 - Apache HugeGraph Committer Guide</h1><blockquote><p>This document outlines the requirements and process for becoming an Apache Committer. The corresponding ASF official document can be found at: <a href=https://community.apache.org/newcommitter.html>https://community.apache.org/newcommitter.html</a></p></blockquote><h1 id=candidate-requirements>Candidate Requirements</h1><ol><li>Candidates must adhere to the <a href=https://www.apache.org/foundation/policies/conduct.html>Apache Code of Conduct</a>.</li><li>PMC members will assess candidates&rsquo; interactions with others and contributions through <a href=https://lists.apache.org/list?dev@hugegraph.apache.org>mailing lists</a>, <a href=https://github.com/apache/hugegraph/issues>issues</a>, <a href=https://github.com/apache/incubator-hugegraph/pulls>pull requests</a>, and <a href=https://hugegraph.apache.org/docs>official documentation</a>.</li><li>Considerations for evaluating candidates as potential Committers include:<ol><li>Ability to collaborate with community members</li><li>Mentorship capabilities</li><li>Community involvement</li><li>Level of contribution</li><li>Personal skills/abilities</li></ol></li></ol><h1 id=nomination-process>Nomination Process</h1><p><strong>Discussion → Vote → Invitation → Announcement</strong></p><h2 id=1-initiate-community-discussion-discuss>1. Initiate Community Discussion (DISCUSS)</h2><p>Any (P)PMC member of HugeGraph can initiate a voting discussion. After identifying valuable contributions from a community contributor and obtaining the candidate&rsquo;s consent, a discussion can be initiated via <a href=mailto:private@hugegraph.apache.org>private@hugegraph.apache.org</a>.
The initiator of the discussion should clearly state the candidate&rsquo;s contributions in the discussion email and provide URLs or other information for confirming the contributions, facilitating discussion and analysis.</p><p>Below is a template for HugeGraph emails: (For reference only)</p><blockquote><p>Note: The term <code>xxx</code> will be used to refer to the candidate. Typically, <code>xxx</code> represents an easily readable name (e.g., <code>Simon Jay</code>).</p><p>ASF-INFRA recommends <strong>avoiding</strong> the use of less readable <code>ID</code> directly as a reference to the person in emails (e.g., avoid <code>simon321</code> or <code>wh0isSim0n</code> 😄).</p><p>In addition, it is best to choose the <strong>&ldquo;pure text&rdquo;</strong> mode, otherwise the typesetting may be chaotic in the ASF Mailing-list UI</p></blockquote><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-markdown data-lang=markdown><span style=display:flex><span>To: private@hugegraph.apache.org
</span></span><span style=display:flex><span>Subject: [DISCUSS] XXX as a HugeGraph Committer Candidate
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Hi all:
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>I am pleased to nominate xxx for the role of HugeGraph Committer based on his/her contributions over the past few months.
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>[ Candidate&#39;s Contribution Summary ]
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Here are the relevant PRs (issues) he/she has participated in:
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>**Core Features:**</span>
</span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>-</span> Feature 1: [ Reference Links ]
</span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>-</span> ...
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>**Fix/Chore/Release:**</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#000;font-weight:700>**Doc:**</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>[ Candidate&#39;s Current Notable Contributions ]
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>His/Her contributions bring the following benefits to the community, helping us in the following ways:
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>[ Candidate&#39;s Contributions and Benefits to the Community ]
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>In view of the above contributions, I elect xxx as Committer of the HugeGraph project.
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>[ Reference Links ]
</span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>1.</span> PR1
</span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>2.</span> PR2
</span></span><span style=display:flex><span><span style=color:#204a87;font-weight:700>3.</span> ...
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Welcome everyone to share opinions~
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Thanks!
</span></span></code></pre></div><p>For contribution links in discussion emails, you can use the statistical feature of <a href=https://github.com/search>GitHub Search</a> by entering corresponding keywords as needed. You can also adjust parameters and add new repositories such as <code>repo:apache/incubator-hugegraph-computer</code>. Pay special attention to adjusting the <strong>time range</strong> (below is a template reference, please adjust the parameters accordingly):</p><ul><li>Number of PR submissions<ul><li><code>is:pr author:xxx repo:apache/incubator-hugegraph repo:apache/incubator-hugegraph-doc created:>2023-06-01 updated:&lt;2023-12-25</code></li></ul></li><li>Lines of code submissions/changes<ul><li><a href="https://github.com/apache/incubator-hugegraph/graphs/contributors?from=2023-06-01&to=2023-12-25&type=c">https://github.com/apache/incubator-hugegraph/graphs/contributors?from=2023-06-01&to=2023-12-25&type=c</a></li><li><a href="https://github.com/apache/incubator-hugegraph-doc/graphs/contributors?from=2023-06-01&to=2023-12-25&type=c">https://github.com/apache/incubator-hugegraph-doc/graphs/contributors?from=2023-06-01&to=2023-12-25&type=c</a></li></ul></li><li>Number of PR submissions associated with issues<ul><li><code>linked:issue involves:xxx repo:apache/incubator-hugegraph repo:apache/incubator-hugegraph-doc created:>2023-06-01 updated:&lt;2023-12-25</code></li></ul></li><li>Number of PR reviews<ul><li><code>type:pr reviewed-by:xxx repo:apache/incubator-hugegraph repo:apache/incubator-hugegraph-doc created:>2023-06-01 updated:&lt;2023-12-25</code></li></ul></li><li>Number of merge commits<ul><li><code>type:pr author:xxx repo:apache/incubator-hugegraph repo:apache/incubator-hugegraph-doc created:>2023-06-01 updated:&lt;2023-12-25</code></li></ul></li><li>Effective lines merged<ul><li><a href="https://github.com/apache/incubator-hugegraph/graphs/contributors?from=2023-06-01&to=2023-12-25&type=c">https://github.com/apache/incubator-hugegraph/graphs/contributors?from=2023-06-01&to=2023-12-25&type=c</a></li><li><a href="https://github.com/apache/incubator-hugegraph-doc/graphs/contributors?from=2023-06-01&to=2023-12-25&type=c">https://github.com/apache/incubator-hugegraph-doc/graphs/contributors?from=2023-06-01&to=2023-12-25&type=c</a></li></ul></li><li>Number of issue submissions<ul><li><code>type:issue author:xxx repo:apache/incubator-hugegraph repo:apache/incubator-hugegraph-doc created:>2023-06-01 updated:&lt;2023-12-25</code></li></ul></li><li>Number of issue fixes<ul><li>Based on the number of issue submissions, select those with a closed status.</li></ul></li><li>Number of issue participations<ul><li><code>type:issue involves:xxx repo:apache/incubator-hugegraph repo:apache/incubator-hugegraph-doc created:>2023-06-01 updated:&lt;2023-12-25</code></li></ul></li><li>Number of issue comments<ul><li><code>type:issue commenter:xxx repo:apache/incubator-hugegraph repo:apache/incubator-hugegraph-doc created:>2023-06-01 updated:&lt;2023-12-25</code></li></ul></li><li>Number of PR comments<ul><li><code>type:pr commenter:xxx repo:apache/incubator-hugegraph repo:apache/incubator-hugegraph-doc created:>2023-06-01 updated:&lt;2023-12-25</code></li></ul></li></ul><p>For participation in mailing lists, you can use <a href="https://lists.apache.org/list?dev@hugegraph.apache.org:lte=10M:xxx">https://lists.apache.org/list?dev@hugegraph.apache.org:lte=10M:xxx</a>.</p><h2 id=2-initiate-community-voting-email-vote>2. Initiate Community Voting Email (VOTE)</h2><p>If there are no dissenting opinions within the specified time frame of the discussion email, the initiator of the discussion needs to initiate a voting email for the committer election at <a href=mailto:private@hugegraph.apache.org>private@hugegraph.apache.org</a>.</p><p>Below is the corresponding email template:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-text data-lang=text><span style=display:flex><span>To: private@hugegraph.apache.org
</span></span><span style=display:flex><span>Subject: [VOTE] xxx as a HugeGraph Committer
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Hi all:
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Through the discussion of last week:
</span></span><span style=display:flex><span>[ Discussion Mailing List Link ]
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>We have discussed and listed what xxx participated in the HugeGraph community.
</span></span><span style=display:flex><span>I believe making him/her a Committer will enhance the work for HugeGraph.
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>So, I am happy to call VOTE to accept xxx as a HugeGraph Committer.
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Voting will continue for at least 72 hours or until the required number of votes is reached.
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Please vote accordingly:
</span></span><span style=display:flex><span>[ ] +1 approve
</span></span><span style=display:flex><span>[ ] +0 no opinion
</span></span><span style=display:flex><span>[ ] -1 disapprove with the reason
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Thanks!
</span></span></code></pre></div><p>Then, (P)PMC members reply to the email with +1 or -1 to express their opinions. Generally, at least 3 votes of +1 are needed to conclude the vote.</p><h2 id=announcement-of-voting-results-result>Announcement of Voting Results (RESULT)</h2><p>After the voting email concludes, the initiator of the vote needs to remind the end of the voting in the email. Additionally, the initiator needs to announce the voting results via email to <a href=mailto:private@hugegraph.apache.org>private@hugegraph.apache.org</a>. The email template can be as follows:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-text data-lang=text><span style=display:flex><span>To: private@hugegraph.apache.org
</span></span><span style=display:flex><span>Subject: [RESULTS][VOTE] xxx as a HugeGraph Committer
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Hi all: The vote for &#34;xxx&#34; as an HugeGraph Committer has PASSED and closed now.
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>The result is as follows: X PMC +1 Votes:
</span></span><span style=display:flex><span>- A (PMC ID)
</span></span><span style=display:flex><span>- B
</span></span><span style=display:flex><span>- C...
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Vote thread:
</span></span><span style=display:flex><span>put vote thread link here
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Then I&#39;m going to invite xxx to join us soon. Thanks for everyone&#39;s support!
</span></span></code></pre></div><h2 id=send-invitation-email-to-candidate-invite>Send Invitation Email to Candidate (INVITE)</h2><p>After the announcement of the voting results email is sent, the initiator of the vote should send an invitation email to the candidate. The invitation email is addressed to the candidate and cc&rsquo;d to <a href=mailto:private@hugegraph.apache.org>private@hugegraph.apache.org</a>. The invited candidate must reply to the specified email address to accept or reject the invitation.</p><p>Below is a template for reference:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-text data-lang=text><span style=display:flex><span>To: [ Candidate&#39;s Email ]
</span></span><span style=display:flex><span>Cc: private@hugegraph.apache.org
</span></span><span style=display:flex><span>Subject: Invitation to become HugeGraph committer: xxx
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Hello xxx,
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>The HugeGraph Project Management Committee (PPMC)
</span></span><span style=display:flex><span>hereby offers you committer privileges to the project.
</span></span><span style=display:flex><span>These privileges are offered on the understanding that you&#39;ll use them
</span></span><span style=display:flex><span>reasonably and with common sense. We like to work on trust
</span></span><span style=display:flex><span>rather than unnecessary constraints.
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Being a committer enables you to more easily make
</span></span><span style=display:flex><span>changes without needing to go through the patch
</span></span><span style=display:flex><span>submission process.
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Being a committer does not require you to
</span></span><span style=display:flex><span>participate any more than you already do. It does
</span></span><span style=display:flex><span>tend to make one even more committed. You will
</span></span><span style=display:flex><span>probably find that you spend more time here.
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Of course, you can decline and instead remain as a
</span></span><span style=display:flex><span>contributor, participating as you do now.
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>A. This personal invitation is a chance for you to
</span></span><span style=display:flex><span>accept or decline in private. Either way, please
</span></span><span style=display:flex><span>let us know in reply to the private@hugegraph.apache.org
</span></span><span style=display:flex><span>address only.
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>B. If you accept, the next step is to register an iCLA:
</span></span><span style=display:flex><span> 1. Details of the iCLA and the forms are found
</span></span><span style=display:flex><span> through this link: https://www.apache.org/licenses/#clas
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> 2. Instructions for its completion and return to
</span></span><span style=display:flex><span> the Secretary of the ASF are found at
</span></span><span style=display:flex><span> https://www.apache.org/licenses/#submitting
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> 3. When you transmit the completed iCLA, request
</span></span><span style=display:flex><span> to notify the Apache HugeGraph project and choose a
</span></span><span style=display:flex><span> unique Apache ID. Look to see if your preferred
</span></span><span style=display:flex><span> ID is already taken at
</span></span><span style=display:flex><span> https://people.apache.org/committer-index.html
</span></span><span style=display:flex><span> This will allow the Secretary to notify the PMC
</span></span><span style=display:flex><span> when your iCLA has been recorded.
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>When recording of your iCLA is noted, you will
</span></span><span style=display:flex><span>receive a follow-up message with the next steps for
</span></span><span style=display:flex><span>establishing you as a committer.
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>With the expectation of your acceptance, welcome!
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>The Apache HugeGraph(incubating) PPMC
</span></span></code></pre></div><h2 id=candidate-accepts-invitation-accept>Candidate Accepts Invitation (ACCEPT)</h2><p>The candidate should reply to the aforementioned email (select <strong>reply all</strong>) to indicate acceptance of the invitation. Below is a template for the email:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-text data-lang=text><span style=display:flex><span>To: [ Sender&#39;s Email ]
</span></span><span style=display:flex><span>Cc: private@hugegraph.apache.org
</span></span><span style=display:flex><span>Subject: Re: Invitation to become HugeGraph committer: xxx
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Hello Apache HugeGraph(incubating) PPMC,
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>I accept the invitation.
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Thanks to the Apache HugeGraph Community for recognizing my work, I
</span></span><span style=display:flex><span>will continue to actively participate in the work of the Apache
</span></span><span style=display:flex><span>HugeGraph(incubating).
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Next, I will follow the instructions to complete the next steps:
</span></span><span style=display:flex><span>Signing and submitting iCLA and registering Apache ID.
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>xxx
</span></span></code></pre></div><p>Of course, the candidate may also choose to decline the invitation, in which case there is no template:)</p><p>Once the invitation is accepted, the candidate needs to complete the following tasks:</p><ul><li>Subscribe to <a href=mailto:dev@hugegraph.apache.org>dev@hugegraph.apache.org</a>, for specific steps/filtering configurations, please refer to the <a href=https://hugegraph.apache.org/docs/contribution-guidelines/subscribe/>documentation</a></li><li>Sign the <a href=https://www.apache.org/licenses/icla.pdf>ICLA</a>, follow the steps below↓</li></ul><h3 id=icla-signing-process>ICLA Signing Process</h3><ol><li>Download the <a href=https://www.apache.org/licenses/icla.pdf>ICLA</a></li><li>Open the PDF and fill in the required information. All fields must be filled in English. It is recommended to use a PDF tool to edit and sign.<ol><li><strong>Full name</strong>: First name followed by last name</li><li><strong>Public name</strong>: Optional, defaults to the same as <code>Full name</code></li><li>Check the box only if you entered names with your family name first</li><li><strong>Postal Address</strong>: English address, starting from small to large, including detailed street address</li><li><strong>Country:</strong> Country of residence in English</li><li><strong>E-mail</strong>: Email address, preferably the same as the one used in the invitation email</li><li><strong>(optional) preferred Apache id(s)</strong>: Choose an SVN ID that is not listed on the <a href=http://people.apache.org/committer-index.html>Apache committer</a> page</li><li><strong>(optional) notify project</strong>: Apache HugeGraph(incubating)</li><li><strong>Signature: Must be handwritten using a PDF tool</strong></li><li><strong>Date:</strong> Format as xxxx-xx-xx</li></ol></li><li>After signing, rename <code>icla.pdf</code> to <code>name-pinyin-icla.pdf</code></li><li>Send the following email and attach <code>name-pinyin-icla.pdf</code> as a reference.</li></ol><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-text data-lang=text><span style=display:flex><span>To: secretary@apache.org
</span></span><span style=display:flex><span>Subject: ICLA Information
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Hello everyone:
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>I have accepted the Apache HugeGraph(incubating) PPMC invitation to
</span></span><span style=display:flex><span>become a HugeGraph committer, the attachment is my ICLA information.
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>(Optional) My GitHub account is https://github.com/xxx. Thanks!
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>xxx
</span></span></code></pre></div><blockquote><p>For more details, please refer to <a href=https://github.com/apache/hugegraph/issues/1732>https://github.com/apache/hugegraph/issues/1732</a>.</p></blockquote><p>PMC members will await confirmation of the ICLA record from the Apache secretary team. Candidates and PMC members will receive the following email:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-text data-lang=text><span style=display:flex><span>Dear xxx,
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>This message acknowledges receipt of your ICLA, which has been filed in the Apache Software Foundation records.
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Your account (with id xxx) has been requested for you and you should receive email with next steps
</span></span><span style=display:flex><span>within the next few days (this process can take up to a week).
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Please refer to https://www.apache.org/foundation/how-it-works.html#developers
</span></span><span style=display:flex><span>for more information about roles at Apache.
</span></span></code></pre></div><h3 id=setting-up-apache-account-and-development-environment-config>Setting Up Apache Account and Development Environment (CONFIG)</h3><p>After the record is completed, the candidate will receive an email from <a href=mailto:root@apache.org>root@apache.org</a> with the subject <code>Welcome to the Apache Software Foundation</code>. At this point, the candidate needs to follow the steps in the email to set up the Apache account and development environment:</p><ol><li>Reset the password at <a href=https://id.apache.org/reset/enter>https://id.apache.org/reset/enter</a>.</li><li>Configure personal information at <a href=https://whimsy.apache.org/roster/committer/xxx>https://whimsy.apache.org/roster/committer/xxx</a>.</li><li>Associate GitHub account at <a href=https://gitbox.apache.org/boxer>https://gitbox.apache.org/boxer</a>.<ul><li>This step requires configuring GitHub Two-Factor Authentication (2FA).</li></ul></li><li><strong>The nominating PMC member must add the new Committer to the official list of committers via the <a href=https://whimsy.apache.org/roster/ppmc/hugegraph>Roster</a> page.</strong> (<strong>Important</strong>, otherwise repository permissions will not take effect).<ul><li>After this step, the candidate becomes a new Committer and gains write access to the GitHub HugeGraph repository.</li></ul></li><li>(Optional) The new Committer can apply for free use of JetBrains&rsquo; full range of products with their Apache account <a href=https://www.jetbrains.com/shop/eform/apache>here</a>.</li></ol><h2 id=announcing-via-email-announce>Announcing via Email (ANNOUNCE)</h2><p>After the candidate completes the above steps, they will officially become a Committer of HugeGraph. At this point, they need to send an announcement email to <a href=mailto:dev@hugegraph.apache.org>dev@hugegraph.apache.org</a>. Below is a template for the email:</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-text data-lang=text><span style=display:flex><span>To: dev@hugegraph.apache.org
</span></span><span style=display:flex><span>Subject: [ANNOUNCE] New Committer: xxx
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Hi everyone, The PPMC for Apache HugeGraph(incubating) has invited xxx to
</span></span><span style=display:flex><span>become a Committer and we are pleased to announce that he/she has accepted.
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>xxx is being active in the HugeGraph community &amp; dedicated to ... modules,
</span></span><span style=display:flex><span>and we are glad to see his/her more interactions with the community in the future.
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>(Optional) His/Her GitHub account is https://github.com/xxx
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Welcome xxx, and please enjoy your community journey~
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Thanks!
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>The Apache HugeGraph PPMC
</span></span></code></pre></div><h1 id=references>References</h1><ol><li><a href=https://community.apache.org/newcommitter.html>https://community.apache.org/newcommitter.html</a> (ASF official documentation)</li><li><a href=https://infra.apache.org/new-committers-guide.html>https://infra.apache.org/new-committers-guide.html</a></li><li><a href=https://www.apache.org/dev/pmc.html#newcommitter>https://www.apache.org/dev/pmc.html#newcommitter</a></li><li><a href=https://linkis.apache.org/zh-CN/community/how-to-vote-a-committer-pmc>https://linkis.apache.org/zh-CN/community/how-to-vote-a-committer-pmc</a></li><li><a href=https://www.apache.org/licenses/contributor-agreements.html#submitting>https://www.apache.org/licenses/contributor-agreements.html#submitting</a></li><li><a href=https://www.apache.org/licenses/cla-faq.html#printer>https://www.apache.org/licenses/cla-faq.html#printer</a></li><li><a href=https://linkis.apache.org/zh-CN/community/how-to-sign-apache-icla>https://linkis.apache.org/zh-CN/community/how-to-sign-apache-icla</a></li><li><a href=https://github.com/apache/hugegraph/issues/1732>https://github.com/apache/hugegraph/issues/1732</a> (HugeGraph ICLA related issue)</li></ol></div></main></div></div><footer class="bg-dark py-3 row d-print-none"><div class=footer-container><div class="row bg-dark"><div class=col-1></div><div class="col-4 text-center container-center"><div class=footer-row><a href=https://www.apache.org><div class=footer-apache-logo><svg id="Layer_2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 7127.6 2890" enable-background="new 0 0 7127.6 2890"><path fill="#6d6e71" d="M7104.7 847.8c15.3 15.3 22.9 33.7 22.9 55.2s-7.6 39.9-22.9 55.4c-15.3 15.4-33.8 23.1-55.6 23.1s-40.2-7.6-55.4-22.9c-15.1-15.3-22.7-33.7-22.7-55.2s7.6-39.9 22.9-55.4c15.3-15.4 33.7-23.1 55.4-23.1C7070.9 824.9 7089.4 832.5 7104.7 847.8zM7098.1 951.9c13.3-13.6 20-29.8 20-48.7s-6.6-35-19.8-48.5c-13.2-13.4-29.4-20.1-48.6-20.1-19.2.0-35.4 6.7-48.7 20.2s-19.9 29.7-19.9 48.7 6.6 35.2 19.7 48.6c13.1 13.4 29.3 20.1 48.5 20.1S7084.7 965.4 7098.1 951.9zm-11-63.8c0 14-6.1 22.8-18.4 26.4l22.5 30.5H7073l-20.3-28.3h-18.6V945h-14.7v-84.6h31.8c12.8.0 22 2.2 27.6 6.6C7084.4 871.4 7087.1 878.4 7087.1 888.1zM7068.2 9e2c3-2.4 4.4-6.5 4.4-12s-1.5-9.4-4.5-11.6-8.4-3.2-16-3.2h-18v30.5h17.5C7059.7 903.6 7065.3 902.4 7068.2 9e2z"/><path fill="#6d6e71" d="M1803.6 499.8v155.4h-20V499.8h-56.8v-19.2h133.9v19.2H1803.6z"/><path fill="#6d6e71" d="M2082.2 655.2v-76.9H1977v76.9h-20V480.5h20v78.9h105.2v-78.9h20v174.7h-20z"/><path fill="#6d6e71" d="M2241.4 499.8v57.4h88.1v19.2h-88.1v59.8h101.8v19h-121.8V480.5H2340v19.2H2241.4z"/><path fill="#d22128" d="M1574.5 1852.4l417.3-997.6h80.1l417.3 997.6h-105.4l-129.3-311.9h-448.2l-127.9 311.9H1574.5zM2032.6 970l-205.1 493.2h404.7L2032.6 970z"/><path fill="#d22128" d="M2596.9 1852.4V854.8H3010c171.4.0 295.1 158.8 295.1 313.3.0 163-115.2 316.1-286.6 316.1h-324.6v368.1h-97zm97-455.3h318.9c118 0 193.9-108.2 193.9-229 0-125.1-92.7-226.2-202.3-226.2h-310.5v455.2z"/><path fill="#d22128" d="M3250.5 1852.4l417.3-997.6h80.1l417.3 997.6h-105.4l-129.3-311.9h-448.2l-127.9 311.9H3250.5zM3708.6 970l-205.1 493.2h404.7L3708.6 970z"/><path fill="#d22128" d="M4637.3 849.1c177 0 306.3 89.9 368.1 217.8l-78.7 47.8c-63.2-132.1-186.9-177-295.1-177-238.9.0-369.5 213.6-369.5 414.5.0 220.6 161.6 420.1 373.7 420.1 112.4.0 244.5-56.2 307.7-185.5l81.5 42.1c-64.6 148.9-241.7 231.8-394.8 231.8-274 0-466.5-261.3-466.5-514.2C4163.8 1106.3 4336.6 849.1 4637.3 849.1z"/><path fill="#d22128" d="M5949.1 854.8v997.6h-98.4v-466.5h-591.5v466.5h-96.9V854.8h96.9v444h591.5v-444H5949.1z"/><path fill="#d22128" d="M6844.6 1765.2v87.1h-670.2V854.8H6832v87.1h-560.6v359.7h489v82.9h-489v380.8H6844.6z"/><path fill="#6d6e71" d="M1667.6 2063.6c11.8 3.5 22.2 8.3 31 14.2l-10.3 22.6c-9-6-18.6-10.4-28.9-13.4-10.2-2.9-20-4.4-29.2-4.4-13.6.0-24.5 2.4-32.6 7.3s-12.2 11.8-12.2 20.7c0 7.6 2.3 14 6.8 19s10.2 8.9 17 11.7c6.8 2.8 16.1 6 28 9.6 14.4 4.6 26 8.9 34.7 12.9 8.8 4 16.3 9.9 22.5 17.8 6.2 7.8 9.3 18.2 9.3 31 0 11.7-3.2 21.8-9.5 30.6-6.3 8.7-15.3 15.5-26.8 20.3-11.6 4.8-24.9 7.2-40 7.2s-29.7-2.9-43.9-8.7c-14.2-5.8-26.4-13.6-36.6-23.4l10.7-21.6c9.6 9.4 20.7 16.7 33.3 21.9 12.6 5.2 24.8 7.8 36.8 7.8 15.3.0 27.3-3 36.1-8.9s13.2-13.9 13.2-23.9c0-7.8-2.3-14.3-6.9-19.4-4.6-5.1-10.3-9-17.1-11.9-6.8-2.8-16.1-6-28-9.6-14.2-4.2-25.7-8.3-34.6-12.2-8.9-3.9-16.4-9.7-22.5-17.5-6.1-7.7-9.2-17.9-9.2-30.6.0-10.9 3-20.4 9-28.6s14.6-14.6 25.6-19.1c11.1-4.5 23.8-6.8 38.2-6.8C1643.8 2058.3 1655.7 2060.1 1667.6 2063.6z"/><path fill="#6d6e71" d="M1980.1 2072.8c16.8 9.4 30.2 22.3 40 38.4 9.8 16.2 14.8 33.9 14.8 53.3.0 19.5-4.9 37.4-14.8 53.6-9.8 16.3-23.2 29.1-40 38.6s-35.3 14.3-55.2 14.3c-20.3.0-38.8-4.7-55.7-14.3-16.8-9.5-30.2-22.4-40-38.6-9.8-16.3-14.8-34.1-14.8-53.6s4.9-37.3 14.8-53.5c9.8-16.2 23.2-29 40-38.3 16.8-9.4 35.4-14 55.7-14C1944.8 2058.6 1963.2 2063.3 1980.1 2072.8zM1881.9 2092.7c-13.1 7.4-23.6 17.5-31.4 30.1-7.8 12.6-11.8 26.5-11.8 41.7.0 15.3 3.9 29.3 11.8 42 7.8 12.7 18.3 22.8 31.4 30.2 13.1 7.4 27.4 11.1 42.9 11.1s29.7-3.7 42.7-11.1 23.3-17.4 31.1-30.2c7.7-12.7 11.6-26.7 11.6-42s-3.9-29.2-11.6-41.8c-7.7-12.6-18.1-22.6-31.1-30s-27.2-11.2-42.6-11.2C1909.4 2081.5 1895.1 2085.2 1881.9 2092.7z"/><path fill="#6d6e71" d="M2186.5 2082.4v74h98.4v23.2h-98.4v90.2h-24.1v-210.6h133.8v23.2H2186.5z"/><path fill="#6d6e71" d="M2491.6 2082.4v187.4h-24.1v-187.4h-68.4v-23.2h161.4v23.2H2491.6z"/><path fill="#6d6e71" d="M2871.8 2269.8l-56.8-177.4-57.6 177.4h-24.5l-70.5-210.6h25.9l57.9 182.7 57.1-182.4 24.1-.3 57.7 182.7 57.1-182.7h25l-70.6 210.6H2871.8z"/><path fill="#6d6e71" d="M3087.3 2216.6l-23.5 53.2h-25.6l94.4-210.6h25l94.1 210.6h-26.1l-23.5-53.2H3087.3zM3144.5 2086.6l-46.9 106.8h94.4l-47.5-106.8z"/><path fill="#6d6e71" d="M3461.1 2202.7c-6 .4-10.7.6-14.1.6h-56v66.5h-24v-210.6h80c26.2.0 46.6 6.2 61.2 18.5 14.5 12.3 21.8 29.8 21.8 52.3.0 17.2-4.1 31.7-12.2 43.3-8.1 11.6-19.8 20-35 25l49.2 71.5h-27.3L3461.1 2202.7zM3491.3 2167.6c10.3-8.4 15.5-20.8 15.5-37 0-15.9-5.2-27.9-15.5-36s-25.1-12.2-44.3-12.2h-56v97.8h56C3466.2 2180.2 3481 2176 3491.3 2167.6z"/><path fill="#6d6e71" d="M3688.3 2082.4v69.2h106.2v23.2h-106.2v72.1h122.8v22.9h-146.9v-210.6h142.9v23.2H3688.3z"/><path fill="#6d6e71" d="M4147 2082.4v74h98.4v23.2H4147v90.2h-24.1v-210.6h133.8v23.2H4147z"/><path fill="#6d6e71" d="M4523.3 2072.8c16.8 9.4 30.2 22.3 40 38.4 9.8 16.2 14.8 33.9 14.8 53.3.0 19.5-4.9 37.4-14.8 53.6-9.8 16.3-23.2 29.1-40 38.6s-35.3 14.3-55.2 14.3c-20.3.0-38.8-4.7-55.7-14.3-16.8-9.5-30.2-22.4-40-38.6-9.8-16.3-14.8-34.1-14.8-53.6s4.9-37.3 14.8-53.5c9.8-16.2 23.2-29 40-38.3 16.8-9.4 35.4-14 55.7-14C4488.1 2058.6 4506.5 2063.3 4523.3 2072.8zM4425.2 2092.7c-13.1 7.4-23.6 17.5-31.4 30.1-7.8 12.6-11.8 26.5-11.8 41.7.0 15.3 3.9 29.3 11.8 42 7.8 12.7 18.3 22.8 31.4 30.2 13.1 7.4 27.4 11.1 42.9 11.1s29.7-3.7 42.7-11.1 23.3-17.4 31.1-30.2c7.7-12.7 11.6-26.7 11.6-42s-3.9-29.2-11.6-41.8c-7.7-12.6-18.1-22.6-31.1-30s-27.2-11.2-42.6-11.2C4452.6 2081.5 4438.3 2085.2 4425.2 2092.7z"/><path fill="#6d6e71" d="M4854.7 2247.7c-15.7 15.5-37.3 23.3-64.8 23.3-27.7.0-49.4-7.8-65.1-23.3-15.7-15.5-23.6-37-23.6-64.6v-124h24.1v124c0 20.3 5.8 36.1 17.3 47.5 11.6 11.4 27.3 17.1 47.3 17.1 20.1.0 35.8-5.7 47.1-17 11.4-11.3 17-27.2 17-47.7v-124h24.1v124C4878.2 2210.7 4870.4 2232.2 4854.7 2247.7z"/><path fill="#6d6e71" d="M5169.5 2269.8l-126.3-169.1v169.1h-24.1v-210.6h25l126.3 169.3v-169.3h23.8v210.6H5169.5z"/><path fill="#6d6e71" d="M5478.4 2073.1c16.4 9.3 29.4 21.9 38.9 37.9 9.6 16 14.3 33.9 14.3 53.5s-4.8 37.6-14.3 53.6c-9.5 16.1-22.6 28.7-39.3 37.9-16.6 9.2-35.2 13.8-55.5 13.8h-84.3v-210.6h85.2C5443.7 2059.2 5462 2063.8 5478.4 2073.1zM5362.3 2246.9h61.4c15.5.0 29.6-3.5 42.3-10.6s22.8-16.9 30.2-29.5c7.4-12.5 11.1-26.5 11.1-42s-3.8-29.4-11.3-41.9-17.7-22.3-30.6-29.6c-12.8-7.2-27-10.9-42.6-10.9h-60.5v164.5z"/><path fill="#6d6e71" d="M5668.6 2216.6l-23.5 53.2h-25.6l94.4-210.6h25l94.1 210.6h-26l-23.5-53.2H5668.6zM5725.8 2086.6l-46.9 106.8h94.4l-47.5-106.8z"/><path fill="#6d6e71" d="M5991 2082.4v187.4h-24v-187.4h-68.4v-23.2H6060v23.2h-69z"/><path fill="#6d6e71" d="M6175.9 2269.8v-210.6h24.1v210.6H6175.9z"/><path fill="#6d6e71" d="M6493.7 2072.8c16.8 9.4 30.2 22.3 40 38.4 9.8 16.2 14.8 33.9 14.8 53.3.0 19.5-4.9 37.4-14.8 53.6-9.8 16.3-23.2 29.1-40 38.6s-35.3 14.3-55.2 14.3c-20.3.0-38.8-4.7-55.7-14.3-16.8-9.5-30.2-22.4-40-38.6-9.8-16.3-14.8-34.1-14.8-53.6s4.9-37.3 14.8-53.5c9.8-16.2 23.2-29 40-38.3 16.8-9.4 35.4-14 55.7-14C6458.5 2058.6 6476.9 2063.3 6493.7 2072.8zM6395.6 2092.7c-13.1 7.4-23.6 17.5-31.4 30.1-7.8 12.6-11.8 26.5-11.8 41.7.0 15.3 3.9 29.3 11.8 42 7.8 12.7 18.3 22.8 31.4 30.2 13.1 7.4 27.4 11.1 42.9 11.1s29.7-3.7 42.7-11.1 23.3-17.4 31.1-30.2c7.7-12.7 11.6-26.7 11.6-42s-3.9-29.2-11.6-41.8c-7.7-12.6-18.1-22.6-31.1-30s-27.2-11.2-42.6-11.2C6423 2081.5 6408.8 2085.2 6395.6 2092.7z"/><path fill="#6d6e71" d="M6826.5 2269.8l-126.3-169.1v169.1h-24.1v-210.6h25l126.3 169.3v-169.3h23.8v210.6H6826.5z"/><linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="-4516.6152" y1="-2338.7222" x2="-4108.4111" y2="-1861.3982" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)"><stop offset="0" style="stop-color:#F69923"/><stop offset=".3123" style="stop-color:#F79A23"/><stop offset=".8383" style="stop-color:#E97826"/></linearGradient><path fill="url(#SVGID_1_)" d="M1230.1 13.7c-45.3 26.8-120.6 102.5-210.5 212.3l82.6 155.9c58-82.9 116.9-157.5 176.3-221.2 4.6-5.1 7-7.5 7-7.5-2.3 2.5-4.6 5-7 7.5-19.2 21.2-77.5 89.2-165.5 224.4 84.7-4.2 214.9-21.6 321.1-39.7 31.6-177-31-258-31-258S1323.4-41.4 1230.1 13.7z"/><path fill="none" d="M1090.2 903.1c.6-.1 1.2-.2 1.8-.3l-11.9 1.3c-.7.3-1.4.7-2.1 1C1082.1 904.4 1086.2 903.7 1090.2 903.1z"/><path fill="none" d="M1005.9 1182.3c-6.7 1.5-13.7 2.7-20.7 3.7C992.3 1185 999.2 1183.8 1005.9 1182.3z"/><path fill="none" d="M432.9 1808.8c.9-2.3 1.8-4.7 2.6-7 18.2-48 36.2-94.7 54-140.1 20-51 39.8-100.4 59.3-148.3 20.6-50.4 40.9-99.2 60.9-146.3 21-49.4 41.7-97 62-142.8 16.5-37.3 32.8-73.4 48.9-108.3 5.4-11.7 10.7-23.2 16-34.6 10.5-22.7 21-44.8 31.3-66.5 9.5-20 19-39.6 28.3-58.8 3.1-6.4 6.2-12.8 9.3-19.1.5-1 1-2 1.5-3.1l-10.2 1.1-8-15.9c-.8 1.6-1.6 3.1-2.4 4.6-14.5 28.8-28.9 57.9-43.1 87.2-8.2 16.9-16.4 34-24.6 51-22.6 47.4-44.8 95.2-66.6 143.3-22.1 48.6-43.7 97.5-64.9 146.5-20.8 48.1-41.3 96.2-61.2 144.2-20 48-39.5 95.7-58.5 143.2-19.9 49.5-39.2 98.7-58 147.2-4.2 10.9-8.5 21.9-12.7 32.8-15 39.2-29.7 77.8-44 116l12.7 25.1 11.4-1.2c.4-1.1.8-2.3 1.3-3.4C396.7 1905.4 414.9 1856.4 432.9 1808.8z"/><path fill="none" d="M980 1186.8c.1.0.1.0.1-.1C980.1 1186.8 980.1 1186.8 980 1186.8z"/><path fill="#be202e" d="M952.6 1323c-10.6 1.9-21.4 3.8-32.5 5.7-.1.0-.1.1-.2.1 5.6-.8 11.2-1.7 16.6-2.6C942 1325.2 947.3 1324.1 952.6 1323z"/><path opacity=".35" fill="#be202e" d="M952.6 1323c-10.6 1.9-21.4 3.8-32.5 5.7-.1.0-.1.1-.2.1 5.6-.8 11.2-1.7 16.6-2.6C942 1325.2 947.3 1324.1 952.6 1323z"/><path fill="#be202e" d="M980.3 1186.7C980.2 1186.7 980.2 1186.7 980.3 1186.7c-.1.1-.2.1-.2.1 1.8-.2 3.5-.5 5.2-.8 7-1 13.9-2.2 20.7-3.7C997.5 1183.8 989 1185.2 980.3 1186.7z"/><path opacity=".35" fill="#be202e" d="M980.3 1186.7C980.2 1186.7 980.2 1186.7 980.3 1186.7c-.1.1-.2.1-.2.1 1.8-.2 3.5-.5 5.2-.8 7-1 13.9-2.2 20.7-3.7C997.5 1183.8 989 1185.2 980.3 1186.7z"/><linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="-7537.7339" y1="-2391.4075" x2="-4625.4141" y2="-2391.4075" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)"><stop offset=".3233" style="stop-color:#9E2064"/><stop offset=".6302" style="stop-color:#C92037"/><stop offset=".7514" style="stop-color:#CD2335"/><stop offset="1" style="stop-color:#E97826"/></linearGradient><path fill="url(#SVGID_2_)" d="M858.6 784.7c25.1-46.9 50.5-92.8 76.2-137.4 26.7-46.4 53.7-91.3 80.9-134.7 1.6-2.6 3.2-5.2 4.8-7.7 27-42.7 54.2-83.7 81.6-122.9L1019.5 226c-6.2 7.6-12.5 15.3-18.8 23.2-23.8 29.7-48.6 61.6-73.9 95.5-28.6 38.2-58 78.9-87.8 121.7-27.6 39.5-55.5 80.9-83.5 123.7-23.8 36.5-47.7 74-71.4 112.5-.9 1.4-1.8 2.9-2.6 4.3L789 919.2c22.8-45.6 46.1-90.5 69.6-134.5z"/><linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="-7186.1777" y1="-2099.3059" x2="-5450.7183" y2="-2099.3059" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)"><stop offset="0" style="stop-color:#282662"/><stop offset=".0954839" style="stop-color:#662E8D"/><stop offset=".7882" style="stop-color:#9F2064"/><stop offset=".9487" style="stop-color:#CD2032"/></linearGradient><path fill="url(#SVGID_3_)" d="M369 1981c-14.2 39.1-28.5 78.9-42.9 119.6-.2.6-.4 1.2-.6 1.8-2 5.7-4.1 11.5-6.1 17.2-9.7 27.4-18 52.1-37.3 108.2 31.7 14.5 57.1 52.5 81.1 95.6-2.6-44.7-21-86.6-56.2-119.1 156.1 7 290.6-32.4 360.1-146.6 6.2-10.2 11.9-20.9 17-32.2-31.6 40.1-70.8 57.1-144.5 53-.2.1-.3.1-.5.2.2-.1.3-.1.5-.2 108.6-48.6 163.1-95.3 211.2-172.6 11.4-18.3 22.5-38.4 33.8-60.6-94.9 97.5-205 125.3-320.9 104.2l-86.9 9.5C374.4 1966.3 371.7 1973.6 369 1981z"/><linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="-7374.1626" y1="-2418.5454" x2="-4461.8428" y2="-2418.5454" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)"><stop offset=".3233" style="stop-color:#9E2064"/><stop offset=".6302" style="stop-color:#C92037"/><stop offset=".7514" style="stop-color:#CD2335"/><stop offset="1" style="stop-color:#E97826"/></linearGradient><path fill="url(#SVGID_4_)" d="M409.6 1786.3c18.8-48.5 38.1-97.7 58-147.2 19-47.4 38.5-95.2 58.5-143.2s40.4-96.1 61.2-144.2c21.2-49 42.9-97.8 64.9-146.5 21.8-48.1 44-95.9 66.6-143.3 8.1-17.1 16.3-34.1 24.6-51 14.2-29.3 28.6-58.4 43.1-87.2.8-1.6 1.6-3.1 2.4-4.6L681.4 706.8c-1.8 2.9-3.5 5.8-5.3 8.6-25.1 40.9-50 82.7-74.4 125.4-24.7 43.1-49 87.1-72.7 131.7-20 37.6-39.6 75.6-58.6 113.9-3.8 7.8-7.6 15.5-11.3 23.2-23.4 48.2-44.6 94.8-63.7 139.5-21.7 50.7-40.7 99.2-57.5 145.1-11 30.2-21 59.4-30.1 87.4-7.5 24-14.7 47.9-21.5 71.8-16 56.3-29.9 112.4-41.2 168.3L353 1935.1c14.3-38.1 28.9-76.8 44-116C401.1 1808.2 405.4 1797.3 409.6 1786.3z"/><linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="-7161.7642" y1="-2379.1431" x2="-5631.2524" y2="-2379.1431" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)"><stop offset="0" style="stop-color:#282662"/><stop offset=".0954839" style="stop-color:#662E8D"/><stop offset=".7882" style="stop-color:#9F2064"/><stop offset=".9487" style="stop-color:#CD2032"/></linearGradient><path fill="url(#SVGID_5_)" d="M243.5 1729.4c-13.6 68.2-23.2 136.2-28 203.8-.2 2.4-.4 4.7-.5 7.1-33.7-54-124-106.8-123.8-106.2 64.6 93.7 113.7 186.7 120.9 278-34.6 7.1-82-3.2-136.8-23.3 57.1 52.5 1e2 67 116.7 70.9-52.5 3.3-107.1 39.3-162.1 80.8 80.5-32.8 145.5-45.8 192.1-35.3C148.1 2414.2 74.1 2645 0 2890c22.7-6.7 36.2-21.9 43.9-42.6 13.2-44.4 100.8-335.6 238-718.2 3.9-10.9 7.8-21.8 11.8-32.9 1.1-3 2.2-6.1 3.3-9.2 14.5-40.1 29.5-81.1 45.1-122.9 3.5-9.5 7.1-19 10.7-28.6.1-.2.1-.4.2-.6l-107.9-213.2C244.6 1724.4 244 1726.9 243.5 1729.4z"/><linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="-7374.1626" y1="-2117.1309" x2="-4461.8428" y2="-2117.1309" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)"><stop offset=".3233" style="stop-color:#9E2064"/><stop offset=".6302" style="stop-color:#C92037"/><stop offset=".7514" style="stop-color:#CD2335"/><stop offset="1" style="stop-color:#E97826"/></linearGradient><path fill="url(#SVGID_6_)" d="M805.6 937c-3.1 6.3-6.2 12.7-9.3 19.1-9.3 19.2-18.8 38.8-28.3 58.8-10.3 21.7-20.7 43.9-31.3 66.5-5.3 11.4-10.6 22.9-16 34.6-16.1 35-32.4 71.1-48.9 108.3-20.3 45.8-41 93.4-62 142.8-20 47.1-40.3 95.9-60.9 146.3-19.5 47.9-39.3 97.3-59.3 148.3-17.8 45.4-35.9 92.1-54 140.1-.9 2.3-1.8 4.7-2.6 7-18 47.6-36.2 96.6-54.6 146.8-.4 1.1-.8 2.3-1.3 3.4l86.9-9.5c-1.7-.3-3.5-.5-5.2-.9 103.9-13 242.1-90.6 331.4-186.5 41.1-44.2 78.5-96.3 113-157.3 25.7-45.4 49.8-95.8 72.8-151.5 20.1-48.7 39.4-101.4 58-158.6-23.9 12.6-51.2 21.8-81.4 28.2-5.3 1.1-10.7 2.2-16.1 3.1-5.5 1-11 1.8-16.6 2.6.1.0.1-.1.2-.1 96.9-37.3 158-109.2 202.4-197.4-25.5 17.4-66.9 40.1-116.6 51.1-6.7 1.5-13.7 2.7-20.7 3.7-1.7.3-3.5.6-5.2.8.1.0.1.0.1-.1h.1c33.6-14.1 62-29.8 86.6-48.4 5.3-4 10.4-8.1 15.3-12.3 7.5-6.5 14.7-13.3 21.5-20.5 4.4-4.6 8.6-9.3 12.7-14.2 9.6-11.5 18.7-23.9 27.1-37.3 2.6-4.1 5.1-8.3 7.6-12.6 3.2-6.2 6.3-12.3 9.3-18.3 13.5-27.2 24.4-51.5 33-72.8 4.3-10.6 8.1-20.5 11.3-29.7 1.3-3.7 2.5-7.2 3.7-10.6 3.4-10.2 6.2-19.3 8.4-27.3 3.3-12 5.3-21.5 6.4-28.4-3.3 2.6-7.1 5.2-11.3 7.7-29.3 17.5-79.5 33.4-119.9 40.8l79.8-8.8-79.8 8.8c-.6.1-1.2.2-1.8.3-4 .7-8.1 1.3-12.2 2 .7-.3 1.4-.7 2.1-1l-273 29.9C806.6 935 806.1 936 805.6 937z"/><linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="-7554.8232" y1="-2132.0981" x2="-4642.5034" y2="-2132.0981" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)"><stop offset=".3233" style="stop-color:#9E2064"/><stop offset=".6302" style="stop-color:#C92037"/><stop offset=".7514" style="stop-color:#CD2335"/><stop offset="1" style="stop-color:#E97826"/></linearGradient><path fill="url(#SVGID_7_)" d="M1112.9 385.1c-24.3 37.3-50.8 79.6-79.4 127.5-1.5 2.5-3 5.1-4.5 7.6-24.6 41.5-50.8 87.1-78.3 137-23.8 43.1-48.5 89.3-74.3 139C854 839.5 830.8 885.4 807 934l273-29.9c79.5-36.6 115.1-69.7 149.6-117.6 9.2-13.2 18.4-27 27.5-41.3 28-43.8 55.6-92 80.1-139.9 23.7-46.3 44.7-92.2 60.7-133.5 10.2-26.3 18.4-50.8 24.1-72.3 5-19 8.9-36.9 11.9-54.1C1327.9 363.5 1197.6 380.9 1112.9 385.1z"/><path fill="#be202e" d="M936.5 1326.1c-5.5 1-11 1.8-16.6 2.6C925.5 1328 931 1327.1 936.5 1326.1z"/><path opacity=".35" fill="#be202e" d="M936.5 1326.1c-5.5 1-11 1.8-16.6 2.6C925.5 1328 931 1327.1 936.5 1326.1z"/><linearGradient id="SVGID_8_" gradientUnits="userSpaceOnUse" x1="-7374.1626" y1="-2027.484" x2="-4461.8433" y2="-2027.484" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)"><stop offset=".3233" style="stop-color:#9E2064"/><stop offset=".6302" style="stop-color:#C92037"/><stop offset=".7514" style="stop-color:#CD2335"/><stop offset="1" style="stop-color:#E97826"/></linearGradient><path fill="url(#SVGID_8_)" d="M936.5 1326.1c-5.5 1-11 1.8-16.6 2.6C925.5 1328 931 1327.1 936.5 1326.1z"/><path fill="#be202e" d="M980 1186.8c1.8-.2 3.5-.5 5.2-.8C983.5 1186.3 981.8 1186.6 980 1186.8z"/><path opacity=".35" fill="#be202e" d="M980 1186.8c1.8-.2 3.5-.5 5.2-.8C983.5 1186.3 981.8 1186.6 980 1186.8z"/><linearGradient id="SVGID_9_" gradientUnits="userSpaceOnUse" x1="-7374.1626" y1="-2037.7417" x2="-4461.8433" y2="-2037.7417" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)"><stop offset=".3233" style="stop-color:#9E2064"/><stop offset=".6302" style="stop-color:#C92037"/><stop offset=".7514" style="stop-color:#CD2335"/><stop offset="1" style="stop-color:#E97826"/></linearGradient><path fill="url(#SVGID_9_)" d="M980 1186.8c1.8-.2 3.5-.5 5.2-.8C983.5 1186.3 981.8 1186.6 980 1186.8z"/><path fill="#be202e" d="M980.2 1186.7z"/><path opacity=".35" fill="#be202e" d="M980.2 1186.7z"/><linearGradient id="SVGID_10_" gradientUnits="userSpaceOnUse" x1="-5738.0635" y1="-2039.799" x2="-5094.3457" y2="-2039.799" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 5117.8774 -2859.9343)"><stop offset=".3233" style="stop-color:#9E2064"/><stop offset=".6302" style="stop-color:#C92037"/><stop offset=".7514" style="stop-color:#CD2335"/><stop offset="1" style="stop-color:#E97826"/></linearGradient><path fill="url(#SVGID_10_)" d="M980.2 1186.7z"/></svg></div></a><ul class=footer-link><li><a class=white href=http://www.apache.org>Foundation</a></li><li><a class=white href=http://www.apache.org/licenses/>License</a></li><li><a class=white href=https://www.apache.org/security/>Security</a></li><li><a class=white href=http://www.apache.org/events/current-event>Events</a></li><li><a class=white href=http://www.apache.org/foundation/sponsorship.html>Sponsorship</a></li><li><a class=white href=http://www.apache.org/foundation/thanks.html>Thanks</a></li><li><a class=white href=https://privacy.apache.org/policies/privacy-policy-public.html target=_blank>Privacy</a></li></ul></div></div><div class="col-6 text-white text-center container-center"><p>Copyright &copy; 2024 The Apache Software Foundation, Licensed under the <a class=white href=https://www.apache.org/licenses/LICENSE-2.0>Apache License Version 2.0</a></p><p>Apache and the Apache feather logo are trademarks of The Apache Software Foundation.</p></div><div class=col-1></div></div></div></footer></div><script src=https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js integrity=sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN crossorigin=anonymous></script>
<script src=https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.min.js integrity="sha512-UR25UO94eTnCVwjbXozyeVd6ZqpaAE9naiEUBK/A+QDbfSTQFhPGj5lOR6d8tsgbBk84Ggb5A3EkjsOgPRPcKA==" crossorigin=anonymous></script>
<script src=/js/tabpane-persist.js></script>
<script src=/js/main.min.aa9f4c5dae6a98b2c46277f4c56f1673a2b000d1756ce4ffae93784cab25e6d5.js integrity="sha256-qp9MXa5qmLLEYnf0xW8Wc6KwANF1bOT/rpN4TKsl5tU=" crossorigin=anonymous></script>
<script src=/js/prism.js></script></body></html>