diff options
author | Harald Musum <musum@yahooinc.com> | 2023-08-28 12:46:45 +0200 |
---|---|---|
committer | Harald Musum <musum@yahooinc.com> | 2023-08-28 12:46:45 +0200 |
commit | 12bba1e9531d8237e103a8850969baf99da950df (patch) | |
tree | f650614988367e99255f01f4463f24c646910ed6 /configserver/src/test/java/com | |
parent | fce91af952e5a5e2fe21c319bc259e0dd4ae5640 (diff) |
Support reading and writing application data as json
Controlled by feature flags.
Also write last deployed session when preparing a session
Diffstat (limited to 'configserver/src/test/java/com')
-rw-r--r-- | configserver/src/test/java/com/yahoo/vespa/config/server/application/ApplicationCuratorDatabaseTest.java | 74 |
1 files changed, 73 insertions, 1 deletions
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> 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> 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()); + } + } |