Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

バージョンチェック処理でキャッシュが有効になっていないようにみえる #4

Closed
t2y opened this issue Dec 10, 2021 · 14 comments
Assignees
Labels
invalid This doesn't seem right

Comments

@t2y
Copy link
Contributor

t2y commented Dec 10, 2021

#2 でビルドキャッシュで任意のディレクトリを除外対象とした。しかし、同じ action のワークフローで最実行するときはキャッシュが有効になっているようにみえるが、実際の運用で action を呼び出す初回にはキャッシュが有効になっていないようにみえる。ワークフローの初回実行時にどういった振る舞いになっているのかを確認する。

@t2y t2y added the bug Something isn't working label Dec 10, 2021
@t2y t2y self-assigned this Dec 10, 2021
@t2y
Copy link
Contributor Author

t2y commented Dec 20, 2021

もしくはキャッシュとは無関係に前回チェックした時間などを記録していて一定時間経っていれば確認しているのかもしれない。

@t2y
Copy link
Contributor Author

t2y commented Dec 23, 2021

まずは maven のバージョンチェックの処理の振る舞いから調べる。

@t2y
Copy link
Contributor Author

t2y commented Dec 23, 2021

必ずしもすべてのパッケージにあるわけではないが、こんな metadata をもっている。

$ cat path/to/.m2/repository/org/apache/logging/log4j/log4j-api/maven-metadata-central.xml
<?xml version="1.0" encoding="UTF-8"?>
<metadata>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-api</artifactId>
  <versioning>
    <latest>2.16.0</latest>
    <release>2.16.0</release>
    <versions>
      ...
      <version>2.13.0</version>
      <version>2.13.1</version>
      <version>2.13.2</version>
      <version>2.13.3</version>
      <version>2.14.0</version>
      <version>2.14.1</version>
      <version>2.15.0</version>
      <version>2.16.0</version>
    </versions>
    <lastUpdated>20211214184914</lastUpdated>
  </versioning>
</metadata>

@t2y
Copy link
Contributor Author

t2y commented Dec 23, 2021

ドキュメントを探してもどこに書いてあるのか全然わからない。直接 versions-maven-plugin のソースを読む。

@t2y
Copy link
Contributor Author

t2y commented Dec 23, 2021

このログを出力しているのは DefaultRepositoryMetadataManager にみえる。

[INFO] artifact ninja.cero.bootiful-sqltemplate:bootiful-sqltemplate: checking for updates from github
[INFO] artifact ninja.cero.bootiful-sqltemplate:bootiful-sqltemplate: checking for updates from central

https://github.com/apache/maven/blob/maven-3.6.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java#L129

@t2y
Copy link
Contributor Author

t2y commented Dec 23, 2021

DefaultRepositoryMetadataManager がどうやって呼び出されるかを調べればいいはず。

@t2y
Copy link
Contributor Author

t2y commented Dec 23, 2021

ソースだけではわからないのでデバッグログを眺めてみる。

$ ./mvnw versions:use-latest-releases -DgenerateBackupPoms=false -DallowMajorUpdates=false -X | tee versoins-debug.log

@t2y
Copy link
Contributor Author

t2y commented Dec 23, 2021

デバッグログはこんな感じ。

[INFO] Minor version changes allowed
[DEBUG] Selected version:2.1.0
[DEBUG] Looking for newer versions of ninja.cero.bootiful-sqltemplate:bootiful-sqltemplate:jar:2.1.0
[DEBUG] Determining update check for artifact ninja.cero.bootiful-sqltemplate:bootiful-sqltemplate (path/to/.m2/repository/ninja/cero/bootiful-sqltemplate/bootiful-sqltemplate/maven-metadata-github.xml) from github (https://maven.pkg.github.com/xxx/*)
[DEBUG] Searching for github.maven-metadata-github.xml.lastUpdated in resolution tracking file.
[DEBUG] Reading resolution-state from: path/to/.m2/repository/ninja/cero/bootiful-sqltemplate/bootiful-sqltemplate/resolver-status.properties
[INFO] artifact ninja.cero.bootiful-sqltemplate:bootiful-sqltemplate: checking for updates from github
[DEBUG] repository metadata for: 'artifact ninja.cero.bootiful-sqltemplate:bootiful-sqltemplate' could not be found on repository: github
[DEBUG] Reading resolution-state from: path/to/.m2/repository/ninja/cero/bootiful-sqltemplate/bootiful-sqltemplate/resolver-status.properties
[DEBUG] Writing resolution-state to: path/to/.m2/repository/ninja/cero/bootiful-sqltemplate/bootiful-sqltemplate/resolver-status.properties
[DEBUG] Determining update check for artifact ninja.cero.bootiful-sqltemplate:bootiful-sqltemplate (path/to/.m2/repository/ninja/cero/bootiful-sqltemplate/bootiful-sqltemplate/maven-metadata-central.xml) from central (https://repo.maven.apache.org/maven2)
[DEBUG] Searching for central.maven-metadata-central.xml.lastUpdated in resolution tracking file.
[DEBUG] Reading resolution-state from: path/to/.m2/repository/ninja/cero/bootiful-sqltemplate/bootiful-sqltemplate/resolver-status.properties
[INFO] artifact ninja.cero.bootiful-sqltemplate:bootiful-sqltemplate: checking for updates from central
[DEBUG] Reading resolution-state from: path/to/.m2/repository/ninja/cero/bootiful-sqltemplate/bootiful-sqltemplate/resolver-status.properties
[DEBUG] Writing resolution-state to: path/to/.m2/repository/ninja/cero/bootiful-sqltemplate/bootiful-sqltemplate/resolver-status.properties

@t2y
Copy link
Contributor Author

t2y commented Dec 23, 2021

ログにある github をチェックしにいくのは https://maven.pkg.github.com/ のことだったのか。いま理解できた。

@t2y
Copy link
Contributor Author

t2y commented Dec 23, 2021

versions-maven-plugin のソース上はバージョンチェックの処理のタイミングを制御しているようにはみえない。おそらく maven 本体がなんらかの条件でバージョンチェックをスキップする制御があるんだと推測する。

@t2y
Copy link
Contributor Author

t2y commented Dec 23, 2021

DefaultUpdateCheckManager.isUpdateRequired でポリシーが最終チェック日付を確認している。これやな。

return ( lastCheckDate == null ) || policy.checkOutOfDate( lastCheckDate );

https://github.com/apache/maven/blob/maven-3.6.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/DefaultUpdateCheckManager.java#L110

@t2y
Copy link
Contributor Author

t2y commented Dec 23, 2021

ArtifactRepositoryPolicy という仕組みがある。これを調べればよさそう。

https://github.com/apache/maven/blob/maven-3.6.3/maven-artifact/src/main/java/org/apache/maven/artifact/repository/ArtifactRepositoryPolicy.java#L115

@t2y
Copy link
Contributor Author

t2y commented Dec 23, 2021

この release 設定のポリシーだと思う。デフォルトが daily になっているので日次でチェックしにいくのだと思う。ビルドキャッシュが効いていないわけではなさそう。

Element Type Description
updatePolicy String The frequency for downloading updates - can be "always", "daily" (default), "interval:XXX" (in minutes) or "never" (only if it doesn't exist locally).

https://maven.apache.org/ref/3.6.3/maven-settings/settings.html

@t2y t2y added invalid This doesn't seem right and removed bug Something isn't working labels Dec 23, 2021
@t2y
Copy link
Contributor Author

t2y commented Dec 23, 2021

ビルドキャッシュは関係ないので日次で待ち時間が長くなることへの対応は #5 で検討する。

@t2y t2y closed this as completed Dec 23, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
invalid This doesn't seem right
Projects
None yet
Development

No branches or pull requests

1 participant