From 12bba1e9531d8237e103a8850969baf99da950df Mon Sep 17 00:00:00 2001 From: Harald Musum Date: Mon, 28 Aug 2023 12:46:45 +0200 Subject: Support reading and writing application data as json Controlled by feature flags. Also write last deployed session when preparing a session --- .../ApplicationCuratorDatabaseTest.java | 74 +++++++++++++++++++++- 1 file changed, 73 insertions(+), 1 deletion(-) (limited to 'configserver/src/test/java/com') diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/application/ApplicationCuratorDatabaseTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/application/ApplicationCuratorDatabaseTest.java index cbdb462c35e..8d1b22c94c5 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/application/ApplicationCuratorDatabaseTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/application/ApplicationCuratorDatabaseTest.java @@ -3,13 +3,17 @@ package com.yahoo.vespa.config.server.application; import com.yahoo.config.provision.ApplicationId; import com.yahoo.vespa.curator.mock.MockCurator; +import com.yahoo.vespa.curator.transaction.CuratorTransaction; import org.junit.Test; import java.time.Instant; import java.util.Optional; +import java.util.OptionalLong; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.fail; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; /** * @author jonmv @@ -35,4 +39,72 @@ public class ApplicationCuratorDatabaseTest { assertEquals(reindexing, db.readReindexingStatus(id).orElseThrow()); } + @Test + public void testReadingAndWritingApplicationData() { + ApplicationId id = ApplicationId.defaultId(); + MockCurator curator = new MockCurator(); + ApplicationCuratorDatabase db = new ApplicationCuratorDatabase(id.tenant(), curator); + + assertEquals(Optional.empty(), db.applicationData(id)); + + db.createApplication(id, false); + assertEquals(Optional.empty(), db.applicationData(id)); // still empty, as no data has been written to node + + db.createApplication(id, true); + try { + Optional applicationData = db.applicationData(id); + fail("Expected exception, got " + applicationData); + } catch (NumberFormatException e) { + // expected + } + + // Can be read as json, but no active session or last deployed session + Optional applicationData = db.applicationData(id, true); + assertTrue(applicationData.isPresent()); + assertEquals(id, applicationData.get().applicationId()); + assertFalse(applicationData.get().activeSession().isPresent()); + assertFalse(applicationData.get().lastDeployedSession().isPresent()); + + // Prepare session 2, no active session + try (var t = db.createWritePrepareTransaction(new CuratorTransaction(curator), id, 2, OptionalLong.empty(), false)) { + t.commit(); + } + // Activate session 2, last deployed session not present (not writing json) + try (var t = db.createWriteActiveTransaction(new CuratorTransaction(curator), id, 2, false)) { + t.commit(); + } + // Can be read as session id only + applicationData = db.applicationData(id, false); + assertTrue(applicationData.isPresent()); + assertEquals(id, applicationData.get().applicationId()); + assertTrue(applicationData.get().activeSession().isPresent()); + assertEquals(2, applicationData.get().activeSession().getAsLong()); + assertFalse(applicationData.get().lastDeployedSession().isPresent()); + + // Prepare session 3, last deployed session is still 2 + try (var t = db.createWritePrepareTransaction(new CuratorTransaction(curator), id, 3, OptionalLong.of(2), true)) { + t.commit(); + } + // Can be read as json, active session is still 2 and last deployed session is 3 + applicationData = db.applicationData(id, true); + assertTrue(applicationData.isPresent()); + assertEquals(id, applicationData.get().applicationId()); + assertTrue(applicationData.get().activeSession().isPresent()); + assertEquals(2, applicationData.get().activeSession().getAsLong()); + assertTrue(applicationData.get().lastDeployedSession().isPresent()); + assertEquals(3, applicationData.get().lastDeployedSession().getAsLong()); + + try (var t = db.createWriteActiveTransaction(new CuratorTransaction(curator), id, 3, true)) { + t.commit(); + } + // Can be read as json, active session and last deployed session present + applicationData = db.applicationData(id, true); + assertTrue(applicationData.isPresent()); + assertEquals(id, applicationData.get().applicationId()); + assertTrue(applicationData.get().activeSession().isPresent()); + assertEquals(3, applicationData.get().activeSession().getAsLong()); + assertTrue(applicationData.get().lastDeployedSession().isPresent()); + assertEquals(3, applicationData.get().lastDeployedSession().getAsLong()); + } + } -- cgit v1.2.3