flapdoodle-oss / de.flapdoodle.embed.mongo.spring

embedded mongo spring integration
Apache License 2.0
30 stars 7 forks source link

Caused by: java.lang.IllegalArgumentException: initReplicaSet failed to elect localhost:46234 as master after PT1.062S #57

Closed patriciayogi closed 1 week ago

patriciayogi commented 1 week ago

The tests are randomly failing, I wonder what could cause the error:

Log:

 java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@2d0e29fa testClass = com.samsung.knoxwsm.kfm.campaign.controller.KfmCampaignControllerMockTest, locations = [], classes = [com.samsung.knoxwsm.KfmTestApplication], contextInitializerClasses = [], activeProfiles = ["test"], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@626ed5f0, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@49924fc6, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@53ca2b49, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@2461a62c, org.springframework.boot.test.web.reactive.server.WebTestClientContextCustomizer@17f83573, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@4e0b9055, org.springframework.boot.test.context.SpringBootTestAnnotation@f8ba167e], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null]
    at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:180)
    at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130)
    at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191)
    at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130)
    at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260)
    at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:163)
    at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
    at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
    at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1708)
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
    at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310)
    at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735)
    at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734)
    at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762)
    at java.base/java.util.Optional.orElseGet(Optional.java:364)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'kfmTestApplication': Invocation of init method failed
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:222)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:422)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1778)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:975)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:962)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:624)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754)
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:334)
    at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137)
    at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58)
    at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46)
    at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1454)
    at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:553)
    at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137)
    at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108)
    at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:225)
    at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:152)
    ... 17 more
Caused by: java.lang.RuntimeException: rollback after error on transition to State(RunningMongodProcess), successful reached:
  State(ExtractedFileSet)=ExtractedFileSet{baseDir=/root/.embedmongo/fileSets/0a516fae7d7ed91f324f796e186499d58023284632581048ddcc1550c2ff21ad, executable=/root/.embedmongo/fileSets/0a516fae7d7ed91f324f796e186499d58023284632581048ddcc1550c2ff21ad/mongod, libraryFiles=[]},
  State(Archive)=Archive(/root/.embedmongo/archives/https-fastdl-mongodb-org/56cb3d10404e5b9df5358ac4ee83efcb/linuxmongodb-linux-x86-64-ubuntu2204-7-0-9-tgz/bd24b84793e701cd79aa60741658d053f2f3d44de02caee2306656f722230ae0/archive.tgz),
  State(ProcessOutput)=ProcessOutput{output=de.flapdoodle.embed.process.io.NamedOutputStreamProcessor@78db229b, error=de.flapdoodle.embed.process.io.NamedOutputStreamProcessor@557c7b22, commands=de.flapdoodle.embed.process.io.ConsoleOutputStreamProcessor@2c0dbcd1},
  State(DownloadCache)=de.flapdoodle.embed.process.store.LocalDownloadCache@12a42f61,
  State(Package)=Package{archiveType=TGZ, fileSet=FileSet{entries=[Entry{type=Executable, destination=mongod, uncompiledMatchingPattern=UncompiledPattern{regex=.*mongod, flags=2}}]}, url=https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu2204-7.0.9.tgz},
  State(ExtractedFileSetStore)=de.flapdoodle.embed.process.store.ContentHashExtractedFileSetStore@334a0854,
  State(ProcessArguments)=ProcessArguments([--dbpath, /tmp/temp--7ee20569-129d-4083-a68b-3bbb700c6f7a/mongod-database10889110510105629091, --noauth, --port, 46234, --ipv6, --bind_ip, 127.0.0.1, --replSet, rs0, --oplogSize, 5000, --configsvr, --syncdelay=0]),
  State(ProcessWorkingDir)=ProcessWorkingDir(/tmp/temp--7ee20569-129d-4083-a68b-3bbb700c6f7a/workingDir9518550815598930034),
  State(Distribution)=Version{7.0.9}:Platform{operatingSystem=Linux, architecture=X86_64, distribution=Ubuntu, version=Ubuntu_22_04},
  State(SupportConfig)=SupportConfig{name=mongod, supportUrl=https://github.com/flapdoodle-oss/de.flapdoodle.embed.mongo/issues, messageOnException=de.flapdoodle.embed.mongo.transitions.ProcessDefaults$$Lambda/0x00007f02a0ae8440@5d9d074},
  State(Name)=Name(mongod),
  State(PersistentDir)=ImmutablePersistentDir(/root/.embedmongo),
  State(DatabaseDir)=DatabaseDir(/tmp/temp--7ee20569-129d-4083-a68b-3bbb700c6f7a/mongod-database10889110510105629091),
  State(TempDir)=ImmutableTempDir(/tmp/temp--7ee20569-129d-4083-a68b-3bbb700c6f7a),
  State(DistributionBaseUrl)=DistributionBaseUrl(https://fastdl.mongodb.org),
  State(Platform)=Platform{operatingSystem=Linux, architecture=X86_64, distribution=Ubuntu, version=Ubuntu_22_04},
  State(ProcessConfig)=ProcessConfig{daemonProcess=false, stopTimeoutInMillis=5000},
  State(ProcessEnv)=ProcessEnv({}),
  State(StartTimeout)=StartTimeout(30000),
  State(SystemEnv)=SystemEnv({GITHUB_EVENT_NAME=push, LC_ALL=en_US.UTF-8, GITHUB_RUN_NUMBER=1313, GITHUB_STEP_SUMMARY=/__w/_temp/_runner_file_commands/step_summary_a34a6f3f-0893-40f6-a56a-cfe6b225f692, GITHUB_OUTPUT=/__w/_temp/_runner_file_commands/set_output_a34a6f3f-0893-40f6-a56a-cfe6b225f692, PATH=/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin, MONGODB_VERSION=4.4.13, GITHUB_REF=refs/heads/relusqa-KFM-10422-jdk21, MAVEN_CMD_LINE_ARGS= test -Dkcs.logger.integration.test=true -Dkcs.logger.host=http://opensearch:9200 -f pom.xml -P test -U --no-transfer-progress --fail-at-end -Dspring.test.context.failure.threshold=1000000, GITHUB_REF_PROTECTED=false, GITHUB_REPOSITORY_OWNER=RAM-knox-deployment-services, JAVA_HOME=/opt/java/openjdk, GITHUB_REF_TYPE=branch, SBT_COMMON_SETTINGS_PATH=/opt/sbt-common-settings, CI=true, GITHUB_ACTOR_ID=103727, GITHUB_WORKSPACE=/__w/kfm-be/kfm-be, GITHUB_RUN_ATTEMPT=2, GITHUB_PATH=/__w/_temp/_runner_file_commands/add_path_a34a6f3f-0893-40f6-a56a-cfe6b225f692, GITHUB_WORKFLOW_REF=RAM-knox-deployment-services/kfm-be/.github/workflows/run_unit_test.yaml@refs/heads/relusqa-KFM-10422-jdk21, GITHUB_SERVER_URL=https://github.sec.samsung.net, GITHUB_SHA=97f0683bdaa84e2caf04b1b337ce863aa8bc22a5, GITHUB_ACTIONS=true, GITHUB_ACTION_REPOSITORY=, GITHUB_RETENTION_DAYS=5, GITHUB_REPOSITORY_ID=74136, GITHUB_ACTION=__run_3, GITHUB_ACTOR=p-yogi, RUNNER_NAME=code-runner-greenback-176-2xlarge-1, GITHUB_GRAPHQL_URL=https://github.sec.samsung.net/api/graphql, HOSTNAME=e3e7542afebb, GITHUB_BASE_REF=, SHLVL=1, GITHUB_JOB=build-and-test, GITHUB_REPOSITORY=RAM-knox-deployment-services/kfm-be, RUNNER_TEMP=/__w/_temp, MAVEN_PROJECTBASEDIR=/__w/kfm-be/kfm-be, HOME=/github/home, GITHUB_ACTION_REF=, GITHUB_HEAD_REF=, HELM_DATA_HOME=/usr/local/share/helm, JAVA_VERSION=jdk-21.0.2+13, RUNNER_OS=Linux, GITHUB_WORKFLOW_SHA=97f0683bdaa84e2caf04b1b337ce863aa8bc22a5, GITHUB_STATE=/__w/_temp/_runner_file_commands/save_state_a34a6f3f-0893-40f6-a56a-cfe6b225f692, LANG=en_US.UTF-8, GITHUB_WORKFLOW=JUnit Tests and CQA Analysis, GITHUB_REPOSITORY_OWNER_ID=62955, LANGUAGE=en_US:en, MAVEN_COMMON_SETTINGS_PATH=/opt/maven-common-settings, GITHUB_EVENT_PATH=/github/workflow/event.json, RUNNER_TOOL_CACHE=/__t, GITHUB_RUN_ID=11038995, GITHUB_REF_NAME=relusqa-KFM-10422-jdk21, OLDPWD=/__w/kfm-be/kfm-be, GITHUB_ENV=/__w/_temp/_runner_file_commands/set_env_a34a6f3f-0893-40f6-a56a-cfe6b225f692, RUNNER_WORKSPACE=/__w/kfm-be, GITHUB_API_URL=https://github.sec.samsung.net/api/v3, RUNNER_ARCH=X64, PWD=/__w/kfm-be/kfm-be, GITHUB_TRIGGERING_ACTOR=p-yogi, _=/usr/bin/mvn}),
  State(ProgressListener)=de.flapdoodle.embed.process.io.progress.StandardConsoleProgressListener@44731f2a,
  State(Command)=MongoD,
  State(Version)=Version{7.0.9},
  State(Net)=Net{bindIp=localhost, port=46234, isIpv6=true},
  State(MongodArguments)=MongodArguments{syncDelay=0, useDefaultSyncDelay=false, isVerbose=false, verbosityLevel=1, isQuiet=false, useNoPrealloc=true, useSmallFiles=true, useNoJournal=true, enableTextSearch=false, auth=false, master=false, replication=Storage{oplogSize=5000, replSetName=rs0}, isConfigServer=true, isShardServer=false, params={}, args={}}

    at de.flapdoodle.reverse.TransitionWalker.initState(TransitionWalker.java:190)
    at de.flapdoodle.reverse.TransitionWalker.initState(TransitionWalker.java:69)
    at de.flapdoodle.reverse.TransitionWalker.initState(TransitionWalker.java:65)
    at de.flapdoodle.embed.mongo.transitions.Mongod.start(Mongod.java:93)
    at com.samsung.knoxwsm.KfmTestApplication.init(KfmTestApplication.java:139)
    at java.base/java.lang.reflect.Method.invoke(Method.java:580)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMethod.invoke(InitDestroyAnnotationBeanPostProcessor.java:457)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:401)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:219)
    ... 40 more
Caused by: java.lang.IllegalArgumentException: initReplicaSet failed to elect localhost:46234 as master after PT1.062S
    at de.flapdoodle.embed.mongo.client.ClientActions.lambda$initReplicaSet$5(ClientActions.java:155)
    at java.base/java.util.function.Consumer.lambda$andThen$0(Consumer.java:65)
    at de.flapdoodle.reverse.Listener$TypedListener.lambda$onStateReached$0(Listener.java:89)
    at java.base/java.util.Optional.ifPresent(Optional.java:178)
    at de.flapdoodle.reverse.Listener$TypedListener.onStateReached(Listener.java:89)
    at de.flapdoodle.reverse.TransitionWalker.lambda$resolve$0(TransitionWalker.java:60)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
    at de.flapdoodle.reverse.TransitionWalker.resolve(TransitionWalker.java:60)
    at de.flapdoodle.reverse.TransitionWalker.resolve(TransitionWalker.java:46)
    at de.flapdoodle.reverse.TransitionWalker.initState(TransitionWalker.java:180)
    ... 48 more

Code:

private String embedMongoReplicaSetName = "rs0";

    private Version embedMongoVersion = Version.V7_0_9;
    private String embedMongoHost = "localhost";
    private int embedMongoPort = TestSocketUtils.findAvailableTcpPort();
    private Mongod mongod;
    private TransitionWalker.ReachedState<RunningMongodProcess> runningMongod;
    private TransitionWalker.ReachedState<RunningMongosProcess> runningMongos;

    private DownloadConfig createDownloadConfigBuilder() {
        if (isProxy && proxyHost != null) {
            return DownloadConfig.defaults()
                    .withProxyFactory(new HttpProxyFactory(proxyHost, proxyPort));
        } else {
            return DownloadConfig.defaults();
        }
    }
    @PostConstruct
    public void init() {
        Storage storage = Storage.of(embedMongoReplicaSetName, 5000);

        Listener withRunningMongod = ClientActions.initReplicaSet(new SyncClientAdapter(), embedMongoVersion, storage);
        Net net = Net.of(embedMongoHost, embedMongoPort, true)
                .withPort(embedMongoPort);
        MongodArguments arg = MongodArguments.defaults()
                .withIsConfigServer(true)
                .withReplication(storage);
        mongod = Mongod.builder()
                .net(Start.to(Net.class).initializedWith(net))
                .mongodArguments(Start.to(MongodArguments.class)
                        .initializedWith(arg))
                .downloadPackage(DownloadPackage.withDefaults()
                        .withDownloadConfig(createDownloadConfigBuilder()))
                .build();
        runningMongod = mongod.start(embedMongoVersion, withRunningMongod);

        Mongos mongos = new Mongos() {
            @Override public Start<MongosArguments> mongosArguments() {
                return Start.to(MongosArguments.class).initializedWith(MongosArguments.defaults()
                        .withConfigDB(runningMongod.current().getServerAddress().toString())
                        .withReplicaSet(embedMongoReplicaSetName)
                );
            }
        };
        runningMongos = mongos.start(embedMongoVersion);
    }

    @PreDestroy
    void clean() {
        runningMongod.close();
        runningMongos.close();
    }
michaelmosmann commented 1 week ago

@patriciayogi just out of curiosity: what was the problem?