Search in sources :

Example 51 with Version

use of com.yahoo.component.Version in project vespa by vespa-engine.

the class MinimalQueryInserterTestCase method testStringReprBasicSanity.

@Test
public void testStringReprBasicSanity() {
    String yql = "select%20ignoredfield%20from%20ignoredsource%20where%20title%20contains%20%22madonna%22%20order%20by%20something%2C%20shoesize%20desc%20limit%20300%20timeout%203%3B";
    Query query = new Query("search/?yql=" + yql);
    execution.search(query);
    assertEquals("select ignoredfield from ignoredsource where [{\"segmenter\": {\"version\": \"1.9\", \"backend\": \"YqlUnitTest\"}}](title contains \"madonna\") order by something, shoesize desc limit 300 timeout 3;", query.yqlRepresentation(new Tuple2<>("YqlUnitTest", new Version(1, 9)), true));
}
Also used : Query(com.yahoo.search.Query) Version(com.yahoo.component.Version) Tuple2(com.yahoo.collections.Tuple2) Test(org.junit.Test)

Example 52 with Version

use of com.yahoo.component.Version in project vespa by vespa-engine.

the class DeploymentTriggerTest method testBlockRevisionChange.

@Test
public void testBlockRevisionChange() {
    // Tuesday, 17:30
    ManualClock clock = new ManualClock(Instant.parse("2017-09-26T17:30:00.00Z"));
    DeploymentTester tester = new DeploymentTester(new ControllerTester(clock));
    ReadyJobsTrigger readyJobsTrigger = new ReadyJobsTrigger(tester.controller(), Duration.ofHours(1), new JobControl(tester.controllerTester().curator()));
    Version version = Version.fromString("5.0");
    tester.updateVersionStatus(version);
    ApplicationPackageBuilder applicationPackageBuilder = new ApplicationPackageBuilder().upgradePolicy("canary").blockChange(true, false, "tue", "18-19", "UTC").region("us-west-1").region("us-central-1").region("us-east-3");
    Application app = tester.createAndDeploy("app1", 1, applicationPackageBuilder.build());
    // --------------- Enter block window: 18:30
    tester.clock().advance(Duration.ofHours(1));
    readyJobsTrigger.run();
    assertEquals(0, tester.deploymentQueue().jobs().size());
    String searchDefinition = "search test {\n" + "  document test {\n" + "    field test type string {\n" + "    }\n" + "  }\n" + "}\n";
    ApplicationPackage changedApplication = applicationPackageBuilder.searchDefinition(searchDefinition).build();
    tester.jobCompletion(component).application(app).nextBuildNumber().sourceRevision(new SourceRevision("repository1", "master", "cafed00d")).uploadArtifact(changedApplication).submit();
    assertTrue(tester.applications().require(app.id()).change().isPresent());
    tester.deployAndNotify(app, changedApplication, true, systemTest);
    tester.deployAndNotify(app, changedApplication, true, stagingTest);
    readyJobsTrigger.run();
    assertEquals(0, tester.deploymentQueue().jobs().size());
    // ---------------- Exit block window: 20:30
    tester.clock().advance(Duration.ofHours(2));
    // Schedules the blocked production job(s)
    tester.deploymentTrigger().triggerReadyJobs();
    assertEquals(1, tester.deploymentQueue().jobs().size());
    BuildService.BuildJob productionJob = tester.deploymentQueue().takeJobsToRun().get(0);
    assertEquals("production-us-west-1", productionJob.jobName());
}
Also used : SourceRevision(com.yahoo.vespa.hosted.controller.application.SourceRevision) BuildService(com.yahoo.vespa.hosted.controller.api.integration.BuildService) JobControl(com.yahoo.vespa.hosted.controller.maintenance.JobControl) ReadyJobsTrigger(com.yahoo.vespa.hosted.controller.maintenance.ReadyJobsTrigger) ApplicationPackage(com.yahoo.vespa.hosted.controller.application.ApplicationPackage) ControllerTester(com.yahoo.vespa.hosted.controller.ControllerTester) ManualClock(com.yahoo.test.ManualClock) Version(com.yahoo.component.Version) ApplicationVersion(com.yahoo.vespa.hosted.controller.application.ApplicationVersion) Application(com.yahoo.vespa.hosted.controller.Application) LockedApplication(com.yahoo.vespa.hosted.controller.LockedApplication) JobType.systemTest(com.yahoo.vespa.hosted.controller.application.DeploymentJobs.JobType.systemTest) Test(org.junit.Test) JobType.stagingTest(com.yahoo.vespa.hosted.controller.application.DeploymentJobs.JobType.stagingTest)

Example 53 with Version

use of com.yahoo.component.Version in project vespa by vespa-engine.

the class DeploymentTriggerTest method applicationVersionIsNotDowngraded.

@Test
public void applicationVersionIsNotDowngraded() {
    DeploymentTester tester = new DeploymentTester();
    Application application = tester.createApplication("app1", "tenant1", 1, 1L);
    Supplier<Application> app = () -> tester.application(application.id());
    ApplicationPackage applicationPackage = new ApplicationPackageBuilder().environment(Environment.prod).region("us-central-1").region("eu-west-1").build();
    tester.deployCompletely(application, applicationPackage);
    // productionUsCentral1 fails after deployment, causing a mismatch between deployed and successful state.
    tester.completeDeploymentWithError(application, applicationPackage, BuildJob.defaultBuildNumber + 1, productionUsCentral1);
    // deployAndNotify doesn't actually deploy if the job fails, so we need to do that manually.
    tester.deployAndNotify(application, Optional.empty(), false, true, productionUsCentral1);
    tester.deploy(productionUsCentral1, application, Optional.empty(), false);
    ApplicationVersion appVersion1 = ApplicationVersion.from(BuildJob.defaultSourceRevision, BuildJob.defaultBuildNumber + 1);
    assertEquals(appVersion1, app.get().deployments().get(ZoneId.from("prod.us-central-1")).applicationVersion());
    // Verify the application change is not removed when change is cancelled.
    tester.deploymentTrigger().cancelChange(application.id(), true);
    assertEquals(Change.of(appVersion1), app.get().change());
    // Now cancel the change as is done through the web API.
    tester.deploymentTrigger().cancelChange(application.id(), false);
    assertEquals(Change.empty(), app.get().change());
    // A new version is released, which should now deploy the currently deployed application version to avoid downgrades.
    Version version1 = new Version("6.2");
    tester.upgradeSystem(version1);
    tester.jobCompletion(productionUsCentral1).application(application).unsuccessful().submit();
    tester.completeUpgrade(application, version1, applicationPackage);
    assertEquals(appVersion1, app.get().deployments().get(ZoneId.from("prod.us-central-1")).applicationVersion());
}
Also used : ApplicationVersion(com.yahoo.vespa.hosted.controller.application.ApplicationVersion) Version(com.yahoo.component.Version) ApplicationVersion(com.yahoo.vespa.hosted.controller.application.ApplicationVersion) Application(com.yahoo.vespa.hosted.controller.Application) LockedApplication(com.yahoo.vespa.hosted.controller.LockedApplication) ApplicationPackage(com.yahoo.vespa.hosted.controller.application.ApplicationPackage) JobType.systemTest(com.yahoo.vespa.hosted.controller.application.DeploymentJobs.JobType.systemTest) Test(org.junit.Test) JobType.stagingTest(com.yahoo.vespa.hosted.controller.application.DeploymentJobs.JobType.stagingTest)

Example 54 with Version

use of com.yahoo.component.Version in project vespa by vespa-engine.

the class ConfigServerClientMock method prepare.

@Override
public PreparedApplication prepare(DeploymentId deployment, DeployOptions deployOptions, Set<String> rotationCnames, Set<String> rotationNames, byte[] content) {
    lastPrepareVersion = deployOptions.vespaVersion.map(Version::new).orElse(null);
    if (prepareException != null) {
        RuntimeException prepareException = this.prepareException;
        this.prepareException = null;
        throw prepareException;
    }
    applicationActivated.put(deployment.applicationId(), false);
    applicationInstances.put(deployment.applicationId(), UUID.randomUUID() + ":4080");
    return new PreparedApplication() {

        @Override
        public void activate() {
            applicationActivated.put(deployment.applicationId(), true);
        }

        @Override
        public List<Log> messages() {
            Log warning = new Log();
            warning.level = "WARNING";
            warning.time = 1;
            warning.message = "The warning";
            Log info = new Log();
            info.level = "INFO";
            info.time = 2;
            info.message = "The info";
            return Arrays.asList(warning, info);
        }

        @Override
        public PrepareResponse prepareResponse() {
            PrepareResponse prepareResponse = new PrepareResponse();
            prepareResponse.message = "foo";
            prepareResponse.configChangeActions = new ConfigChangeActions(Collections.emptyList(), Collections.emptyList());
            prepareResponse.tenant = new TenantId("tenant");
            return prepareResponse;
        }
    };
}
Also used : TenantId(com.yahoo.vespa.hosted.controller.api.identifiers.TenantId) PrepareResponse(com.yahoo.vespa.hosted.controller.api.integration.configserver.PrepareResponse) Version(com.yahoo.component.Version) Log(com.yahoo.vespa.hosted.controller.api.integration.configserver.Log) ConfigChangeActions(com.yahoo.vespa.hosted.controller.api.application.v4.model.configserverbindings.ConfigChangeActions)

Example 55 with Version

use of com.yahoo.component.Version in project vespa by vespa-engine.

the class ControllerTest method testDeployment.

@Test
public void testDeployment() {
    // Setup system
    DeploymentTester tester = new DeploymentTester();
    ApplicationController applications = tester.controller().applications();
    ApplicationPackage applicationPackage = new ApplicationPackageBuilder().environment(Environment.prod).region("corp-us-east-1").region("us-east-3").build();
    // staging job - succeeding
    Version version1 = tester.defaultVespaVersion();
    Application app1 = tester.createApplication("app1", "tenant1", 1, 11L);
    tester.jobCompletion(component).application(app1).uploadArtifact(applicationPackage).submit();
    assertEquals("Application version is known from completion of initial job", ApplicationVersion.from(BuildJob.defaultSourceRevision, BuildJob.defaultBuildNumber), tester.controller().applications().require(app1.id()).change().application().get());
    tester.deployAndNotify(app1, applicationPackage, true, systemTest);
    tester.deployAndNotify(app1, applicationPackage, true, stagingTest);
    assertEquals(4, applications.require(app1.id()).deploymentJobs().jobStatus().size());
    ApplicationVersion applicationVersion = tester.controller().applications().require(app1.id()).change().application().get();
    assertTrue("Application version has been set during deployment", applicationVersion != ApplicationVersion.unknown);
    assertStatus(JobStatus.initial(stagingTest).withTriggering(version1, applicationVersion, "", tester.clock().instant().minus(Duration.ofMillis(1))).withCompletion(42, Optional.empty(), tester.clock().instant(), tester.controller()), app1.id(), tester.controller());
    // Causes first deployment job to be triggered
    assertStatus(JobStatus.initial(productionCorpUsEast1).withTriggering(version1, applicationVersion, "", tester.clock().instant()), app1.id(), tester.controller());
    tester.clock().advance(Duration.ofSeconds(1));
    // production job (failing)
    tester.deployAndNotify(app1, applicationPackage, false, productionCorpUsEast1);
    assertEquals(4, applications.require(app1.id()).deploymentJobs().jobStatus().size());
    JobStatus expectedJobStatus = JobStatus.initial(productionCorpUsEast1).withTriggering(version1, applicationVersion, "", // Triggered first without application version info
    tester.clock().instant()).withCompletion(42, Optional.of(JobError.unknown), tester.clock().instant(), tester.controller()).withTriggering(version1, applicationVersion, "", // Re-triggering (due to failure) has application version info
    tester.clock().instant());
    assertStatus(expectedJobStatus, app1.id(), tester.controller());
    // Simulate restart
    tester.restartController();
    applications = tester.controller().applications();
    assertNotNull(tester.controller().tenants().tenant(new TenantId("tenant1")));
    assertNotNull(applications.get(ApplicationId.from(TenantName.from("tenant1"), ApplicationName.from("application1"), InstanceName.from("default"))));
    assertEquals(4, applications.require(app1.id()).deploymentJobs().jobStatus().size());
    tester.clock().advance(Duration.ofHours(1));
    // system and staging test job - succeeding
    tester.jobCompletion(component).application(app1).nextBuildNumber().uploadArtifact(applicationPackage).submit();
    applicationVersion = tester.application("app1").change().application().get();
    tester.deployAndNotify(app1, applicationPackage, true, false, systemTest);
    assertStatus(JobStatus.initial(systemTest).withTriggering(version1, applicationVersion, "", tester.clock().instant().minus(Duration.ofMillis(1))).withCompletion(42, Optional.empty(), tester.clock().instant(), tester.controller()), app1.id(), tester.controller());
    tester.deployAndNotify(app1, applicationPackage, true, stagingTest);
    // production job succeeding now
    tester.jobCompletion(productionCorpUsEast1).application(app1).unsuccessful().submit();
    tester.deployAndNotify(app1, applicationPackage, true, productionCorpUsEast1);
    expectedJobStatus = expectedJobStatus.withTriggering(version1, applicationVersion, "", tester.clock().instant().minus(Duration.ofMillis(1))).withCompletion(42, Optional.empty(), tester.clock().instant(), tester.controller());
    assertStatus(expectedJobStatus, app1.id(), tester.controller());
    // causes triggering of next production job
    assertStatus(JobStatus.initial(productionUsEast3).withTriggering(version1, applicationVersion, "", tester.clock().instant()), app1.id(), tester.controller());
    tester.deployAndNotify(app1, applicationPackage, true, productionUsEast3);
    assertEquals(5, applications.get(app1.id()).get().deploymentJobs().jobStatus().size());
    // prod zone removal is not allowed
    applicationPackage = new ApplicationPackageBuilder().environment(Environment.prod).region("us-east-3").build();
    tester.jobCompletion(component).application(app1).nextBuildNumber().uploadArtifact(applicationPackage).submit();
    try {
        tester.deploy(systemTest, app1, applicationPackage);
        fail("Expected exception due to unallowed production deployment removal");
    } catch (IllegalArgumentException e) {
        assertEquals("deployment-removal: application 'tenant1.app1' is deployed in corp-us-east-1, but does not include this zone in deployment.xml", e.getMessage());
    }
    assertNotNull("Zone was not removed", applications.require(app1.id()).deployments().get(productionCorpUsEast1.zone(SystemName.main).get()));
    JobStatus jobStatus = applications.require(app1.id()).deploymentJobs().jobStatus().get(productionCorpUsEast1);
    assertNotNull("Deployment job was not removed", jobStatus);
    assertEquals(42, jobStatus.lastCompleted().get().id());
    assertEquals("Available change in staging-test", jobStatus.lastCompleted().get().reason());
    // prod zone removal is allowed with override
    applicationPackage = new ApplicationPackageBuilder().allow(ValidationId.deploymentRemoval).upgradePolicy("default").environment(Environment.prod).region("us-east-3").build();
    tester.jobCompletion(component).application(app1).nextBuildNumber(2).uploadArtifact(applicationPackage).submit();
    tester.deployAndNotify(app1, applicationPackage, true, systemTest);
    assertNull("Zone was removed", applications.require(app1.id()).deployments().get(productionCorpUsEast1.zone(SystemName.main).get()));
    assertNull("Deployment job was removed", applications.require(app1.id()).deploymentJobs().jobStatus().get(productionCorpUsEast1));
}
Also used : JobStatus(com.yahoo.vespa.hosted.controller.application.JobStatus) TenantId(com.yahoo.vespa.hosted.controller.api.identifiers.TenantId) ApplicationVersion(com.yahoo.vespa.hosted.controller.application.ApplicationVersion) ApplicationVersion(com.yahoo.vespa.hosted.controller.application.ApplicationVersion) VespaVersion(com.yahoo.vespa.hosted.controller.versions.VespaVersion) Version(com.yahoo.component.Version) DeploymentTester(com.yahoo.vespa.hosted.controller.deployment.DeploymentTester) ApplicationPackageBuilder(com.yahoo.vespa.hosted.controller.deployment.ApplicationPackageBuilder) ApplicationPackage(com.yahoo.vespa.hosted.controller.application.ApplicationPackage) JobType.stagingTest(com.yahoo.vespa.hosted.controller.application.DeploymentJobs.JobType.stagingTest) JobType.systemTest(com.yahoo.vespa.hosted.controller.application.DeploymentJobs.JobType.systemTest) Test(org.junit.Test)

Aggregations

Version (com.yahoo.component.Version)83 Test (org.junit.Test)46 Application (com.yahoo.vespa.hosted.controller.Application)32 JobType.systemTest (com.yahoo.vespa.hosted.controller.application.DeploymentJobs.JobType.systemTest)30 ApplicationPackage (com.yahoo.vespa.hosted.controller.application.ApplicationPackage)25 JobType.stagingTest (com.yahoo.vespa.hosted.controller.application.DeploymentJobs.JobType.stagingTest)25 DeploymentTester (com.yahoo.vespa.hosted.controller.deployment.DeploymentTester)24 VespaVersion (com.yahoo.vespa.hosted.controller.versions.VespaVersion)22 ApplicationPackageBuilder (com.yahoo.vespa.hosted.controller.deployment.ApplicationPackageBuilder)17 ApplicationVersion (com.yahoo.vespa.hosted.controller.application.ApplicationVersion)15 ApplicationId (com.yahoo.config.provision.ApplicationId)11 Collections (java.util.Collections)11 List (java.util.List)11 Deployment (com.yahoo.vespa.hosted.controller.application.Deployment)10 Optional (java.util.Optional)10 Slime (com.yahoo.slime.Slime)9 Map (java.util.Map)9 ControllerTester (com.yahoo.vespa.hosted.controller.ControllerTester)7 ZoneId (com.yahoo.vespa.hosted.controller.api.integration.zone.ZoneId)7 URI (java.net.URI)7