summaryrefslogtreecommitdiffstats
path: root/configserver
diff options
context:
space:
mode:
authorHarald Musum <musum@yahooinc.com>2023-08-21 18:17:17 +0200
committerHarald Musum <musum@yahooinc.com>2023-08-21 18:17:17 +0200
commit40f3df18a46fd3ed7c795064c2e26d3ca3839526 (patch)
tree325b7dc6aef1c830a1247f59e65325198dfce76e /configserver
parente23d2d7953ed8563db47af5bffd8c17293965863 (diff)
Make sure we use a free port when creating RpcServer
Diffstat (limited to 'configserver')
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/rpc/RpcTester.java68
1 files changed, 43 insertions, 25 deletions
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/RpcTester.java b/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/RpcTester.java
index 8770970308a..336dd6bf84c 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/RpcTester.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/RpcTester.java
@@ -22,12 +22,12 @@ import com.yahoo.vespa.config.server.filedistribution.FileServer;
import com.yahoo.vespa.config.server.host.HostRegistry;
import com.yahoo.vespa.config.server.monitoring.Metrics;
import com.yahoo.vespa.config.server.rpc.security.NoopRpcAuthorizer;
-import com.yahoo.vespa.config.server.tenant.Tenant;
import com.yahoo.vespa.config.server.tenant.TenantRepository;
import com.yahoo.vespa.config.server.tenant.TestTenantRepository;
import com.yahoo.vespa.flags.InMemoryFlagSource;
import org.junit.After;
import org.junit.rules.TemporaryFolder;
+
import java.io.IOException;
import java.time.Duration;
import java.time.Instant;
@@ -53,13 +53,11 @@ public class RpcTester implements AutoCloseable {
private Supervisor sup;
private final ApplicationId applicationId;
private final TenantName tenantName;
- private final TenantRepository tenantRepository;
final HostRegistry hostRegistry = new HostRegistry();
private final ApplicationRepository applicationRepository;
private final List<Integer> allocatedPorts = new ArrayList<>();
private final TemporaryFolder temporaryFolder;
- private final ConfigserverConfig configserverConfig;
RpcTester(ApplicationId applicationId, TemporaryFolder temporaryFolder) throws InterruptedException, IOException {
this(applicationId, temporaryFolder, new ConfigserverConfig.Builder());
@@ -69,20 +67,38 @@ public class RpcTester implements AutoCloseable {
this.temporaryFolder = temporaryFolder;
this.applicationId = applicationId;
this.tenantName = applicationId.tenant();
- int port = allocatePort();
- spec = createSpec(port);
- configBuilder.rpcport(port)
- .configServerDBDir(temporaryFolder.newFolder().getAbsolutePath())
- .configDefinitionsDir(temporaryFolder.newFolder().getAbsolutePath())
- .fileReferencesDir(temporaryFolder.newFolder().getAbsolutePath());
- configserverConfig = new ConfigserverConfig(configBuilder);
- rpcServer = createRpcServer(configserverConfig);
- tenantRepository = new TestTenantRepository.Builder()
- .withHostRegistry(hostRegistry)
- .withConfigserverConfig(configserverConfig)
- .build();
- tenantRepository.addTenant(tenantName);
- startRpcServer();
+
+ Spec tempSpec;
+ ConfigserverConfig tempConfig;
+ RpcServer tempRpcServer;
+ TenantRepository tempTenantRepository;
+
+ int iterations = 0;
+ // Need to loop because we might get a port that is in use
+ do {
+ int port = allocatePort();
+ tempSpec = createSpec(port);
+ configBuilder.rpcport(port)
+ .configServerDBDir(temporaryFolder.newFolder().getAbsolutePath())
+ .configDefinitionsDir(temporaryFolder.newFolder().getAbsolutePath())
+ .fileReferencesDir(temporaryFolder.newFolder().getAbsolutePath());
+ tempConfig = new ConfigserverConfig(configBuilder);
+ tempRpcServer = createRpcServer(tempConfig);
+ tempTenantRepository = new TestTenantRepository.Builder()
+ .withHostRegistry(hostRegistry)
+ .withConfigserverConfig(tempConfig)
+ .build();
+ tempTenantRepository.addTenant(tenantName);
+ startRpcServer(tempRpcServer, tempTenantRepository, tempSpec);
+ iterations++;
+ Thread.sleep(1);
+ } while (!tempRpcServer.isRunning() && iterations < 10);
+
+ spec = tempSpec;
+ ConfigserverConfig configserverConfig = tempConfig;
+ rpcServer = tempRpcServer;
+ TenantRepository tenantRepository = tempTenantRepository;
+
applicationRepository = new ApplicationRepository.Builder()
.withTenantRepository(tenantRepository)
.withConfigserverConfig(configserverConfig)
@@ -107,7 +123,7 @@ public class RpcTester implements AutoCloseable {
InMemoryFlagSource flagSource = new InMemoryFlagSource();
RpcServer rpcServer = new RpcServer(config,
new SuperModelRequestHandler(new TestConfigDefinitionRepo(),
- configserverConfig,
+ config,
new SuperModelManager(
config,
Zone.defaultZone(),
@@ -115,20 +131,20 @@ public class RpcTester implements AutoCloseable {
flagSource)),
Metrics.createTestMetrics(),
hostRegistry,
- new FileServer(configserverConfig, new FileDirectory(temporaryFolder.newFolder())),
+ new FileServer(config, new FileDirectory(temporaryFolder.newFolder())),
new NoopRpcAuthorizer(),
new RpcRequestHandlerProvider());
rpcServer.setUpGetConfigHandlers();
return rpcServer;
}
- void startRpcServer() {
+ void startRpcServer(RpcServer rpcServer, TenantRepository tenantRepository, Spec spec) {
hostRegistry.update(applicationId, List.of("localhost"));
rpcServer.onTenantCreate(tenantRepository.getTenant(tenantName));
t = new Thread(rpcServer);
t.start();
sup = new Supervisor(new Transport());
- pingServer();
+ pingServer(spec);
}
@After
@@ -141,11 +157,11 @@ public class RpcTester implements AutoCloseable {
return new Spec("tcp/localhost:" + port);
}
- private void pingServer() {
+ private void pingServer(Spec spec) {
long endTime = System.currentTimeMillis() + 60_000;
Request req = new Request("ping");
while (System.currentTimeMillis() < endTime) {
- performRequest(req);
+ performRequest(req, spec);
if (!req.isError() && req.returnValues().size() > 0 && req.returnValues().get(0).asInt32() == 0) {
break;
}
@@ -157,6 +173,10 @@ public class RpcTester implements AutoCloseable {
}
void performRequest(Request req) {
+ performRequest(req, spec);
+ }
+
+ void performRequest(Request req, Spec spec) {
clock.advance(Duration.ofMillis(10));
sup.connect(spec).invokeSync(req, Duration.ofSeconds(10));
}
@@ -165,8 +185,6 @@ public class RpcTester implements AutoCloseable {
return rpcServer;
}
- Tenant tenant() { return tenantRepository.getTenant(tenantName); }
-
public ApplicationRepository applicationRepository() { return applicationRepository; }
}