[ https://issues.apache.org/jira/browse/GEODE-9576?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17412718#comment-17412718 ]
ASF GitHub Bot commented on GEODE-9576: --------------------------------------- pivotal-jbarrett commented on a change in pull request #864: URL: https://github.com/apache/geode-native/pull/864#discussion_r705544017 ########## File path: cppcache/integration/test/FunctionExecutionTest.cpp ########## @@ -175,6 +181,58 @@ TEST(FunctionExecutionTest, cache.close(); } +void populateRegion(const std::shared_ptr<Region> ®ion) { + for (int i = 0; i < 113; i++) { + region->put("KEY--" + std::to_string(i), "VALUE--" + std::to_string(i)); + } +} + +TEST(FunctionExecutionTest, FunctionExecutionSingleHopNonHA) { + Cluster cluster{ + LocatorCount{1}, ServerCount{3}, + CacheXMLFiles( + {std::string(getFrameworkString(FrameworkVariable::TestCacheXmlDir)) + + "/func_cacheserver1_pool_nonHA.xml", + std::string(getFrameworkString(FrameworkVariable::TestCacheXmlDir)) + + "/func_cacheserver2_pool_nonHA.xml", + std::string(getFrameworkString(FrameworkVariable::TestCacheXmlDir)) + + "/func_cacheserver3_pool_nonHA.xml"})}; + + cluster.start([&]() { + cluster.getGfsh() + .deploy() + .jar(getFrameworkString(FrameworkVariable::JavaObjectJarPath)) + .execute(); + }); + + auto cache = CacheFactory().create(); + auto poolFactory = cache.getPoolManager().createFactory(); + + cluster.applyLocators(poolFactory); + + auto pool = + poolFactory.setPRSingleHopEnabled(true).setRetryAttempts(0).create( + "pool"); + + auto region = cache.createRegionFactory(RegionShortcut::PROXY) + .setPoolName("pool") + .create("partition_region"); + + populateRegion(region); + + for (int i = 0; i < 30; i++) { + auto functionService = FunctionService::onRegion(region); + auto rc = + functionService.withCollector(std::make_shared<TestResultCollector>()) Review comment: Unfortunately this is notoriously hard to test. PR metadata updates are asynchronous and there isn't any hooks to trigger when an update is complete. You may want to start with adding that function. The downside to that is to use them in an integration tests we would have to export those functions and we try not to export internal/test symbols if we can. Perhaps it might be easier to create a unit test that asserts this part of the function execution logic does the correct thing when the metadata is incomplete. It should be easier to tease out a function that is given the metadata and makes this decisions and then write a test to verify the expected behaviors. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: notifications-unsubscr...@geode.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org > InternalFunctionInvocationTargetException when executing single hop function > all buckets > ---------------------------------------------------------------------------------------- > > Key: GEODE-9576 > URL: https://issues.apache.org/jira/browse/GEODE-9576 > Project: Geode > Issue Type: Bug > Components: native client > Reporter: Jakov Varenina > Assignee: Jakov Varenina > Priority: Major > Labels: pull-request-available > > *InternalFunctionInvocationTargetException: Multiple target nodes found for > single hop operation* occurs on native client when executing function in a > single hop manner for all buckets during the period when client bucket > metadata doesn't contain all buckets locations. > Java client in this case executes functions in non single hop manner until it > receives locations of all buckets on servers. The solution in native client > would be to implement the same handling as in java client. -- This message was sent by Atlassian Jira (v8.3.4#803005)