Skip to content

RefNotFoundException is thrown when changing the git branch when using vertx-config-git #165

Description

@pcloves

Version

5.0.1

Context

I am using the vertx-config-git and add a git repo as a config store, it works fine. but when i change the git branch and restart the app, an exception is thrown as bellow:

io.vertx.core.VertxException: Unable to initialize the Git repository
	at io.vertx.config.git.GitConfigStore.<init>(GitConfigStore.java:128)
	at io.vertx.config.git.GitConfigStoreFactory.create(GitConfigStoreFactory.java:38)
	at io.vertx.config.impl.ConfigRetrieverImpl.<init>(ConfigRetrieverImpl.java:118)
	at io.vertx.config.ConfigRetriever.create(ConfigRetriever.java:52)
	at com.example.vertxStudy.ConfigVerticle.start(ConfigVerticle.kt:18)
	at io.vertx.kotlin.coroutines.CoroutineVerticle$start$1.invokeSuspend(CoroutineVerticle.kt:81)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.internal.DispatchedContinuationKt.resumeCancellableWith(DispatchedContinuation.kt:363)
	at kotlinx.coroutines.intrinsics.CancellableKt.startCoroutineCancellable(Cancellable.kt:26)
	at kotlinx.coroutines.intrinsics.CancellableKt.startCoroutineCancellable$default(Cancellable.kt:21)
	at kotlinx.coroutines.CoroutineStart.invoke(CoroutineStart.kt:88)
	at kotlinx.coroutines.AbstractCoroutine.start(AbstractCoroutine.kt:123)
	at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch(Builders.common.kt:52)
	at kotlinx.coroutines.BuildersKt.launch(Unknown Source)
	at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch$default(Builders.common.kt:43)
	at kotlinx.coroutines.BuildersKt.launch$default(Unknown Source)
	at io.vertx.kotlin.coroutines.CoroutineVerticle.start(CoroutineVerticle.kt:79)
	at io.vertx.kotlin.coroutines.CoroutineVerticle.deploy(CoroutineVerticle.kt:54)
	at io.vertx.core.impl.deployment.DefaultDeployment.lambda$deploy$1(DefaultDeployment.java:183)
	at io.vertx.core.internal.ContextInternal.dispatch(ContextInternal.java:249)
	at io.vertx.core.internal.ContextInternal.dispatch(ContextInternal.java:231)
	at io.vertx.core.internal.ContextInternal.lambda$runOnContext$0(ContextInternal.java:50)
	at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:148)
	at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:141)
	at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:507)
	at io.netty.channel.SingleThreadIoEventLoop.run(SingleThreadIoEventLoop.java:182)
	at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:1073)
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: org.eclipse.jgit.api.errors.RefNotFoundException: Ref main cannot be resolved
	at org.eclipse.jgit.api.CheckoutCommand.call(CheckoutCommand.java:222)
	at io.vertx.config.git.GitConfigStore.initializeGit(GitConfigStore.java:149)
	at io.vertx.config.git.GitConfigStore.<init>(GitConfigStore.java:126)
	... 29 more

Steps to reproduce

  1. config a verticle, and add a ConfigRetriever containing git config store, as bellow:
    val configRetriever = ConfigRetriever.create(
      vertx, ConfigRetrieverOptions()
        .setIncludeDefaultStores(true)
        .setScanPeriod(1000)
        .addStore(
          ConfigStoreOptions()
            .setType("git")
            .setConfig(
              json {
                obj(
                  "url" to "git repo https url",
                  "path" to "../config/git/",
                  "branch" to "main",
                  "remote" to "origin",
                  "user" to "user",
                  "password" to "password",
                  "filesets" to array(
                    obj(
                      "pattern" to "*.yaml",
                      "format" to "yaml"
                    )
                  )
                )
              }
            )
        )
    )
  1. deploy the verticle, it will works fine.
  2. change the "branch" to "main" to some other git branch likes: "branch" to "dev", and restart the verticle
  3. the exception is thrown as follow:
io.vertx.core.VertxException: Unable to initialize the Git repository
	at io.vertx.config.git.GitConfigStore.<init>(GitConfigStore.java:128)
	at io.vertx.config.git.GitConfigStoreFactory.create(GitConfigStoreFactory.java:38)
	at io.vertx.config.impl.ConfigRetrieverImpl.<init>(ConfigRetrieverImpl.java:118)
	at io.vertx.config.ConfigRetriever.create(ConfigRetriever.java:52)
	at com.example.vertxStudy.ConfigVerticle.start(ConfigVerticle.kt:18)
	at io.vertx.kotlin.coroutines.CoroutineVerticle$start$1.invokeSuspend(CoroutineVerticle.kt:81)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.internal.DispatchedContinuationKt.resumeCancellableWith(DispatchedContinuation.kt:363)
	at kotlinx.coroutines.intrinsics.CancellableKt.startCoroutineCancellable(Cancellable.kt:26)
	at kotlinx.coroutines.intrinsics.CancellableKt.startCoroutineCancellable$default(Cancellable.kt:21)
	at kotlinx.coroutines.CoroutineStart.invoke(CoroutineStart.kt:88)
	at kotlinx.coroutines.AbstractCoroutine.start(AbstractCoroutine.kt:123)
	at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch(Builders.common.kt:52)
	at kotlinx.coroutines.BuildersKt.launch(Unknown Source)
	at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch$default(Builders.common.kt:43)
	at kotlinx.coroutines.BuildersKt.launch$default(Unknown Source)
	at io.vertx.kotlin.coroutines.CoroutineVerticle.start(CoroutineVerticle.kt:79)
	at io.vertx.kotlin.coroutines.CoroutineVerticle.deploy(CoroutineVerticle.kt:54)
	at io.vertx.core.impl.deployment.DefaultDeployment.lambda$deploy$1(DefaultDeployment.java:183)
	at io.vertx.core.internal.ContextInternal.dispatch(ContextInternal.java:249)
	at io.vertx.core.internal.ContextInternal.dispatch(ContextInternal.java:231)
	at io.vertx.core.internal.ContextInternal.lambda$runOnContext$0(ContextInternal.java:50)
	at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:148)
	at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:141)
	at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:507)
	at io.netty.channel.SingleThreadIoEventLoop.run(SingleThreadIoEventLoop.java:182)
	at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:1073)
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: org.eclipse.jgit.api.errors.RefNotFoundException: Ref main cannot be resolved
	at org.eclipse.jgit.api.CheckoutCommand.call(CheckoutCommand.java:222)
	at io.vertx.config.git.GitConfigStore.initializeGit(GitConfigStore.java:149)
	at io.vertx.config.git.GitConfigStore.<init>(GitConfigStore.java:126)
	... 29 more

I've done some research and found the location the code

        git.checkout()
          .setName(branch)
          .setCreateBranch(true)  //this line is missing                      <----------------
          .setUpstreamMode(CreateBranchCommand.SetupUpstreamMode.TRACK)
          .setStartPoint(remote + "/" + branch)
          .call();

Do you have a reproducer?

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    Fields

    No fields configured for Bug.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions