3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Nexus RepositoryのOrientDBを復旧させた話※追記あり

Last updated at Posted at 2020-01-10

概要

  • Nexus Repositoryで500エラーが返ってくるようになり、OrientDbを再作成して復旧させた
  • ※同じような事象が再度発生し、以前と同じ方法では復旧せず別の方法で解決した内容を追記(2020/05/06)

環境

発端

  • Nexusへのファイルアップロードが突然できなくなった。
    • 起動はしているのに、アップロードができない。
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 6.339 s
[INFO] Finished at: 2020-01-06T01:30:50Z
[INFO] Final Memory: 10M/239M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy-file (default-cli) on project standalone-pom: Failed to deploy artifacts: Could not transfer artifact jp.hoge.fuga:api:jar:1.0.1-20200106.013045-1 from/to remote-repository (https://example.com/nexus/repository/maven-api-snapshots/): Failed to transfer file: https://example.com/nexus/repository/maven-api-snapshots/jp/hoge/fuga/api/1.0.1-SNAPSHOT/api-2.10.1-20200106.013045-1.jar. Return code is: 500, ReasonPhrase: Server Error. -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
  • ログを見ると、中で使っているDB(OrientDB)でエラーとなっている
2020-01-06 01:30:44,913+0000 WARN  [qtp637974386-634] admin org.sonatype.nexus.repository.httpbridge.internal.ViewServlet - Failure servicing: PUT /nexus/repository/maven-api-snapshots/jp/hoge/fuga/api/1.0.1-SNAPSHOT/api-2.10.1-20200106.013045-1.jar
com.orientechnologies.orient.core.exception.OStorageException: Error during transaction commit
	DB name="component"
2020-01-06 01:30:44,913+0000 ERROR [qtp637974386-621] admin com.orientechnologies.orient.core.storage.impl.local.paginated.OLocalPaginatedStorage - $ANSI{green {db=component}} Exception `6C3A2748` in storage `component`
java.lang.NullPointerException: null

やったこと

# docker-compose run --rm nexus_service sh
sh-4.2$ 
sh-4.2$ java -version
sh: java: command not found
  • 何と、当該バージョンのNexusには、javaがインストールされていなかった…
  • ということで、一旦上記記事の方と同じバージョン(3.12.0)にアップデートした上で、OrientDBの復旧手順をやってみた。
# docker-compose run --rm nexus_service sh
sh-4.2$ 
sh-4.2$ java -version
java version "1.8.0_172"
Java(TM) SE Runtime Environment (build 1.8.0_172-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.172-b11, mixed mode)
sh-4.2$ 
sh-4.2$ # ↑よかった、javaがインストールされている!!
sh-4.2$ 
sh-4.2$ whoami
nexus
sh-4.2$ 
sh-4.2$ pwd
/
sh-4.2$ cd /opt/sonatype/nexus/
sh-4.2$ 
sh-4.2$ java -jar ./lib/support/nexus-orient-console.jar
OrientDB console v.2.2.34 (build f340442755a31eabc91b87cb3ef99eda5cee6ebd, branch 2.2.x) https://www.orientdb.com
Type 'help' to display all the supported commands.

orientdb> ### 以下コマンドのみ、結果略 ###
orientdb> CONNECT 'plocal:/nexus-data/db/analytics' admin admin
orientdb> EXPORT DATABASE analytics-export
orientdb> DROP DATABASE
orientdb> CREATE DATABASE 'plocal:/nexus-data/db/analytics'
orientdb> IMPORT DATABASE analytics-export.json.gz
orientdb> DISCONNECT
orientdb> exit

sh-4.2$ exit
# # コンテナ再起動
# docker-compose down
# docker-compose up -d
  • 無事復旧できた。
    • 今回壊れていたのはcomponent DBのみだったので、他のDBの再作成は行っていない。

やったこと その2 ※2020/05/06追記

  • 今度はNexusそのものが起動しなくなっており、ログを見るとやはりOrientDBでエラーとなっていた。
  • 前回同様のことを行ったが、途中DBへの接続でエラーとなり先進めできず。(今回壊れていたのはconfig DB)
    • エラーとなったコマンド:CONNECT 'plocal:/nexus-data/db/config' admin admin
  • stackoverflowの回答の中に「.wal」ファイルを削除するという解決策があったので試してみた。
# docker-compose run --rm nexus_service sh
sh-4.2$ 
sh-4.2$ cd /nexus-data/db/
sh-4.2$ 
sh-4.2$ ls
OSystem  accesslog  analytics  audit  component  config  frozen.marker  model.properties  security
sh-4.2$ 
sh-4.2$ ### 復旧対象(config)のバックアップを取る ###
sh-4.2$ cp -r -p config config-bk
sh-4.2$ 
sh-4.2$ ls
OSystem  accesslog  analytics  audit  component  config  config-bk  frozen.marker  model.properties  security
sh-4.2$ 
sh-4.2$ ### configにはwalファイルがたくさん ###
sh-4.2$ ls config/*.wal
config.12913.wal
config.12914.wal
config.12915.wal
………以下略………

sh-4.2$ 
sh-4.2$ ### walファイルをすべて削除 ###
sh-4.2$ rm config/*.wal
sh-4.2$ 
sh-4.2$ 
sh-4.2$ diff config config-bk
Only in config-bk: config.12913.wal
Only in config-bk: config.12914.wal
Only in config-bk: config.12915.wal
………以下略………

sh-4.2$ 
sh-4.2$ ### この後は前回と同様 ###
sh-4.2$ cd /opt/sonatype/nexus/
sh-4.2$ 
sh-4.2$ java -jar ./lib/support/nexus-orient-console.jar

OrientDB console v.2.2.34 (build f340442755a31eabc91b87cb3ef99eda5cee6ebd, branch 2.2.x) https://www.orientdb.com
Type 'help' to display all the supported commands.

orientdb> 
orientdb> CONNECT 'plocal:/nexus-data/db/config' admin admin

Connecting to database [plocal:/nexus-data/db/config] with user 'admin'...
2020-03-24 12:16:30:289 WARNI {db=config} Storage 'config' was not closed properly. Will try to recover from write ahead log...
2020-03-24 12:16:30:296 WARNI {db=config} Restore is not possible because write ahead log is empty.OK

orientdb {db=config}> 
orientdb {db=config}> ### 接続できた! ###
orientdb {db=config}> ### 以下コマンドのみ、結果略 ###
orientdb {db=config}> EXPORT DATABASE config-export
orientdb {db=config}> DROP DATABASE
orientdb> CREATE DATABASE 'plocal:/nexus-data/db/config'
orientdb {db=config}> IMPORT DATABASE config-export.json.gz
orientdb {db=config}> DISCONNECT
orientdb> exit

sh-4.2$ exit
# ### コンテナ再起動 ###
# docker-compose down
# docker-compose up -d

原因

  • いまだに不明。

失敗したこと

  • Nexus3.4.0でjavaがインストールされていなかったので、自力でインストールして上記手順を実施したところ、root実行してしまったため、コンテナ起動時にPermissionエラーが出続けてしまい立ち上がらなくなってしまった。

参考

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?