Search in sources :

Example 96 with GetResponse

use of org.graylog.shaded.elasticsearch7.org.elasticsearch.action.get.GetResponse in project elasticsearch by elastic.

the class TasksIT method testTaskStoringSuccesfulResult.

public void testTaskStoringSuccesfulResult() throws Exception {
    // Randomly create an empty index to make sure the type is created automatically
    if (randomBoolean()) {
        logger.info("creating an empty results index with custom settings");
        assertAcked(client().admin().indices().prepareCreate(TaskResultsService.TASK_INDEX));
    }
    // we need this to get task id of the process
    registerTaskManageListeners(TestTaskPlugin.TestTaskAction.NAME);
    // Start non-blocking test task
    TestTaskPlugin.TestTaskAction.INSTANCE.newRequestBuilder(client()).setShouldStoreResult(true).setShouldBlock(false).get();
    List<TaskInfo> events = findEvents(TestTaskPlugin.TestTaskAction.NAME, Tuple::v1);
    assertEquals(1, events.size());
    TaskInfo taskInfo = events.get(0);
    TaskId taskId = taskInfo.getTaskId();
    GetResponse resultDoc = client().prepareGet(TaskResultsService.TASK_INDEX, TaskResultsService.TASK_TYPE, taskId.toString()).get();
    assertTrue(resultDoc.isExists());
    Map<String, Object> source = resultDoc.getSource();
    @SuppressWarnings("unchecked") Map<String, Object> task = (Map<String, Object>) source.get("task");
    assertEquals(taskInfo.getTaskId().getNodeId(), task.get("node"));
    assertEquals(taskInfo.getAction(), task.get("action"));
    assertEquals(Long.toString(taskInfo.getId()), task.get("id").toString());
    @SuppressWarnings("unchecked") Map<String, Object> result = (Map<String, Object>) source.get("response");
    assertEquals("0", result.get("failure_count").toString());
    assertNull(source.get("failure"));
    assertNoFailures(client().admin().indices().prepareRefresh(TaskResultsService.TASK_INDEX).get());
    SearchResponse searchResponse = client().prepareSearch(TaskResultsService.TASK_INDEX).setTypes(TaskResultsService.TASK_TYPE).setSource(SearchSourceBuilder.searchSource().query(QueryBuilders.termQuery("task.action", taskInfo.getAction()))).get();
    assertEquals(1L, searchResponse.getHits().getTotalHits());
    searchResponse = client().prepareSearch(TaskResultsService.TASK_INDEX).setTypes(TaskResultsService.TASK_TYPE).setSource(SearchSourceBuilder.searchSource().query(QueryBuilders.termQuery("task.node", taskInfo.getTaskId().getNodeId()))).get();
    assertEquals(1L, searchResponse.getHits().getTotalHits());
    GetTaskResponse getResponse = expectFinishedTask(taskId);
    assertEquals(result, getResponse.getTask().getResponseAsMap());
    assertNull(getResponse.getTask().getError());
}
Also used : TaskInfo(org.elasticsearch.tasks.TaskInfo) TaskId(org.elasticsearch.tasks.TaskId) GetTaskResponse(org.elasticsearch.action.admin.cluster.node.tasks.get.GetTaskResponse) Matchers.containsString(org.hamcrest.Matchers.containsString) GetResponse(org.elasticsearch.action.get.GetResponse) Map(java.util.Map) HashMap(java.util.HashMap) Tuple(org.elasticsearch.common.collect.Tuple) SearchResponse(org.elasticsearch.action.search.SearchResponse) ElasticsearchAssertions.assertSearchResponse(org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertSearchResponse)

Example 97 with GetResponse

use of org.graylog.shaded.elasticsearch7.org.elasticsearch.action.get.GetResponse in project elasticsearch by elastic.

the class BulkWithUpdatesIT method testBulkUpdateSimple.

public void testBulkUpdateSimple() throws Exception {
    assertAcked(prepareCreate("test").addAlias(new Alias("alias")));
    ensureGreen();
    BulkResponse bulkResponse = client().prepareBulk().add(client().prepareIndex().setIndex(indexOrAlias()).setType("type1").setId("1").setSource("field", 1)).add(client().prepareIndex().setIndex(indexOrAlias()).setType("type1").setId("2").setSource("field", 2).setCreate(true)).add(client().prepareIndex().setIndex(indexOrAlias()).setType("type1").setId("3").setSource("field", 3)).add(client().prepareIndex().setIndex(indexOrAlias()).setType("type1").setId("4").setSource("field", 4)).add(client().prepareIndex().setIndex(indexOrAlias()).setType("type1").setId("5").setSource("field", 5)).execute().actionGet();
    assertThat(bulkResponse.hasFailures(), equalTo(false));
    assertThat(bulkResponse.getItems().length, equalTo(5));
    for (BulkItemResponse bulkItemResponse : bulkResponse) {
        assertThat(bulkItemResponse.getIndex(), equalTo("test"));
    }
    final Script script = new Script(ScriptType.INLINE, CustomScriptPlugin.NAME, "ctx._source.field += 1", Collections.emptyMap());
    bulkResponse = client().prepareBulk().add(client().prepareUpdate().setIndex(indexOrAlias()).setType("type1").setId("1").setScript(script)).add(client().prepareUpdate().setIndex(indexOrAlias()).setType("type1").setId("2").setScript(script).setRetryOnConflict(3)).add(client().prepareUpdate().setIndex(indexOrAlias()).setType("type1").setId("3").setDoc(jsonBuilder().startObject().field("field1", "test").endObject())).get();
    assertThat(bulkResponse.hasFailures(), equalTo(false));
    assertThat(bulkResponse.getItems().length, equalTo(3));
    for (BulkItemResponse bulkItemResponse : bulkResponse) {
        assertThat(bulkItemResponse.getIndex(), equalTo("test"));
    }
    assertThat(bulkResponse.getItems()[0].getResponse().getId(), equalTo("1"));
    assertThat(bulkResponse.getItems()[0].getResponse().getVersion(), equalTo(2L));
    assertThat(bulkResponse.getItems()[1].getResponse().getId(), equalTo("2"));
    assertThat(bulkResponse.getItems()[1].getResponse().getVersion(), equalTo(2L));
    assertThat(bulkResponse.getItems()[2].getResponse().getId(), equalTo("3"));
    assertThat(bulkResponse.getItems()[2].getResponse().getVersion(), equalTo(2L));
    GetResponse getResponse = client().prepareGet().setIndex("test").setType("type1").setId("1").execute().actionGet();
    assertThat(getResponse.isExists(), equalTo(true));
    assertThat(getResponse.getVersion(), equalTo(2L));
    assertThat(((Number) getResponse.getSource().get("field")).longValue(), equalTo(2L));
    getResponse = client().prepareGet().setIndex("test").setType("type1").setId("2").execute().actionGet();
    assertThat(getResponse.isExists(), equalTo(true));
    assertThat(getResponse.getVersion(), equalTo(2L));
    assertThat(((Number) getResponse.getSource().get("field")).longValue(), equalTo(3L));
    getResponse = client().prepareGet().setIndex("test").setType("type1").setId("3").execute().actionGet();
    assertThat(getResponse.isExists(), equalTo(true));
    assertThat(getResponse.getVersion(), equalTo(2L));
    assertThat(getResponse.getSource().get("field1").toString(), equalTo("test"));
    bulkResponse = client().prepareBulk().add(client().prepareUpdate().setIndex(indexOrAlias()).setType("type1").setId("6").setScript(script).setUpsert(jsonBuilder().startObject().field("field", 0).endObject())).add(client().prepareUpdate().setIndex(indexOrAlias()).setType("type1").setId("7").setScript(script)).add(client().prepareUpdate().setIndex(indexOrAlias()).setType("type1").setId("2").setScript(script)).get();
    assertThat(bulkResponse.hasFailures(), equalTo(true));
    assertThat(bulkResponse.getItems().length, equalTo(3));
    assertThat(bulkResponse.getItems()[0].getResponse().getId(), equalTo("6"));
    assertThat(bulkResponse.getItems()[0].getResponse().getVersion(), equalTo(1L));
    assertThat(bulkResponse.getItems()[1].getResponse(), nullValue());
    assertThat(bulkResponse.getItems()[1].getFailure().getIndex(), equalTo("test"));
    assertThat(bulkResponse.getItems()[1].getFailure().getId(), equalTo("7"));
    assertThat(bulkResponse.getItems()[1].getFailure().getMessage(), containsString("document missing"));
    assertThat(bulkResponse.getItems()[2].getResponse().getId(), equalTo("2"));
    assertThat(bulkResponse.getItems()[2].getResponse().getIndex(), equalTo("test"));
    assertThat(bulkResponse.getItems()[2].getResponse().getVersion(), equalTo(3L));
    getResponse = client().prepareGet().setIndex("test").setType("type1").setId("6").execute().actionGet();
    assertThat(getResponse.isExists(), equalTo(true));
    assertThat(getResponse.getVersion(), equalTo(1L));
    assertThat(((Number) getResponse.getSource().get("field")).longValue(), equalTo(0L));
    getResponse = client().prepareGet().setIndex("test").setType("type1").setId("7").execute().actionGet();
    assertThat(getResponse.isExists(), equalTo(false));
    getResponse = client().prepareGet().setIndex("test").setType("type1").setId("2").execute().actionGet();
    assertThat(getResponse.isExists(), equalTo(true));
    assertThat(getResponse.getVersion(), equalTo(3L));
    assertThat(((Number) getResponse.getSource().get("field")).longValue(), equalTo(4L));
}
Also used : Script(org.elasticsearch.script.Script) Alias(org.elasticsearch.action.admin.indices.alias.Alias) GetResponse(org.elasticsearch.action.get.GetResponse)

Example 98 with GetResponse

use of org.graylog.shaded.elasticsearch7.org.elasticsearch.action.get.GetResponse in project elasticsearch by elastic.

the class BulkWithUpdatesIT method testBulkUpdateLargerVolume.

public void testBulkUpdateLargerVolume() throws Exception {
    createIndex("test");
    ensureGreen();
    int numDocs = scaledRandomIntBetween(100, 2000);
    if (numDocs % 2 == 1) {
        // this test needs an even num of docs
        numDocs++;
    }
    final Script script = new Script(ScriptType.INLINE, CustomScriptPlugin.NAME, "ctx._source.counter += 1", Collections.emptyMap());
    BulkRequestBuilder builder = client().prepareBulk();
    for (int i = 0; i < numDocs; i++) {
        builder.add(client().prepareUpdate().setIndex("test").setType("type1").setId(Integer.toString(i)).setFields("counter").setScript(script).setUpsert(jsonBuilder().startObject().field("counter", 1).endObject()));
    }
    BulkResponse response = builder.get();
    assertThat(response.hasFailures(), equalTo(false));
    assertThat(response.getItems().length, equalTo(numDocs));
    for (int i = 0; i < numDocs; i++) {
        assertThat(response.getItems()[i].getId(), equalTo(Integer.toString(i)));
        assertThat(response.getItems()[i].getVersion(), equalTo(1L));
        assertThat(response.getItems()[i].getIndex(), equalTo("test"));
        assertThat(response.getItems()[i].getType(), equalTo("type1"));
        assertThat(response.getItems()[i].getOpType(), equalTo(OpType.UPDATE));
        assertThat(response.getItems()[i].getResponse().getId(), equalTo(Integer.toString(i)));
        assertThat(response.getItems()[i].getResponse().getVersion(), equalTo(1L));
        assertThat(((UpdateResponse) response.getItems()[i].getResponse()).getGetResult().field("counter").getValue(), equalTo(1));
        for (int j = 0; j < 5; j++) {
            GetResponse getResponse = client().prepareGet("test", "type1", Integer.toString(i)).execute().actionGet();
            assertThat(getResponse.isExists(), equalTo(true));
            assertThat(getResponse.getVersion(), equalTo(1L));
            assertThat(((Number) getResponse.getSource().get("counter")).longValue(), equalTo(1L));
        }
    }
    builder = client().prepareBulk();
    for (int i = 0; i < numDocs; i++) {
        UpdateRequestBuilder updateBuilder = client().prepareUpdate().setIndex("test").setType("type1").setId(Integer.toString(i)).setFields("counter");
        if (i % 2 == 0) {
            updateBuilder.setScript(script);
        } else {
            updateBuilder.setDoc(jsonBuilder().startObject().field("counter", 2).endObject());
        }
        if (i % 3 == 0) {
            updateBuilder.setRetryOnConflict(3);
        }
        builder.add(updateBuilder);
    }
    response = builder.execute().actionGet();
    assertThat(response.hasFailures(), equalTo(false));
    assertThat(response.getItems().length, equalTo(numDocs));
    for (int i = 0; i < numDocs; i++) {
        assertThat(response.getItems()[i].getId(), equalTo(Integer.toString(i)));
        assertThat(response.getItems()[i].getVersion(), equalTo(2L));
        assertThat(response.getItems()[i].getIndex(), equalTo("test"));
        assertThat(response.getItems()[i].getType(), equalTo("type1"));
        assertThat(response.getItems()[i].getOpType(), equalTo(OpType.UPDATE));
        assertThat(response.getItems()[i].getResponse().getId(), equalTo(Integer.toString(i)));
        assertThat(response.getItems()[i].getResponse().getVersion(), equalTo(2L));
        assertThat(((UpdateResponse) response.getItems()[i].getResponse()).getGetResult().field("counter").getValue(), equalTo(2));
    }
    builder = client().prepareBulk();
    int maxDocs = numDocs / 2 + numDocs;
    for (int i = (numDocs / 2); i < maxDocs; i++) {
        builder.add(client().prepareUpdate().setIndex("test").setType("type1").setId(Integer.toString(i)).setScript(script));
    }
    response = builder.execute().actionGet();
    assertThat(response.hasFailures(), equalTo(true));
    assertThat(response.getItems().length, equalTo(numDocs));
    for (int i = 0; i < numDocs; i++) {
        int id = i + (numDocs / 2);
        if (i >= (numDocs / 2)) {
            assertThat(response.getItems()[i].getFailure().getId(), equalTo(Integer.toString(id)));
            assertThat(response.getItems()[i].getFailure().getMessage(), containsString("document missing"));
        } else {
            assertThat(response.getItems()[i].getId(), equalTo(Integer.toString(id)));
            assertThat(response.getItems()[i].getVersion(), equalTo(3L));
            assertThat(response.getItems()[i].getIndex(), equalTo("test"));
            assertThat(response.getItems()[i].getType(), equalTo("type1"));
            assertThat(response.getItems()[i].getOpType(), equalTo(OpType.UPDATE));
        }
    }
    builder = client().prepareBulk();
    for (int i = 0; i < numDocs; i++) {
        builder.add(client().prepareUpdate().setIndex("test").setType("type1").setId(Integer.toString(i)).setScript(new Script(ScriptType.INLINE, CustomScriptPlugin.NAME, "ctx.op = \"none\"", Collections.emptyMap())));
    }
    response = builder.execute().actionGet();
    assertThat(response.buildFailureMessage(), response.hasFailures(), equalTo(false));
    assertThat(response.getItems().length, equalTo(numDocs));
    for (int i = 0; i < numDocs; i++) {
        assertThat(response.getItems()[i].getItemId(), equalTo(i));
        assertThat(response.getItems()[i].getId(), equalTo(Integer.toString(i)));
        assertThat(response.getItems()[i].getIndex(), equalTo("test"));
        assertThat(response.getItems()[i].getType(), equalTo("type1"));
        assertThat(response.getItems()[i].getOpType(), equalTo(OpType.UPDATE));
    }
    builder = client().prepareBulk();
    for (int i = 0; i < numDocs; i++) {
        builder.add(client().prepareUpdate().setIndex("test").setType("type1").setId(Integer.toString(i)).setScript(new Script(ScriptType.INLINE, CustomScriptPlugin.NAME, "ctx.op = \"delete\"", Collections.emptyMap())));
    }
    response = builder.execute().actionGet();
    assertThat(response.hasFailures(), equalTo(false));
    assertThat(response.getItems().length, equalTo(numDocs));
    for (int i = 0; i < numDocs; i++) {
        assertThat(response.getItems()[i].getItemId(), equalTo(i));
        assertThat(response.getItems()[i].getId(), equalTo(Integer.toString(i)));
        assertThat(response.getItems()[i].getIndex(), equalTo("test"));
        assertThat(response.getItems()[i].getType(), equalTo("type1"));
        assertThat(response.getItems()[i].getOpType(), equalTo(OpType.UPDATE));
        for (int j = 0; j < 5; j++) {
            GetResponse getResponse = client().prepareGet("test", "type1", Integer.toString(i)).get();
            assertThat(getResponse.isExists(), equalTo(false));
        }
    }
}
Also used : Script(org.elasticsearch.script.Script) UpdateRequestBuilder(org.elasticsearch.action.update.UpdateRequestBuilder) GetResponse(org.elasticsearch.action.get.GetResponse)

Example 99 with GetResponse

use of org.graylog.shaded.elasticsearch7.org.elasticsearch.action.get.GetResponse in project elasticsearch by elastic.

the class GetActionIT method testGetFieldsMetaData.

public void testGetFieldsMetaData() throws Exception {
    assertAcked(prepareCreate("test").addMapping("parent").addMapping("my-type1", "_parent", "type=parent", "field1", "type=keyword,store=true").addAlias(new Alias("alias")).setSettings(Settings.builder().put("index.refresh_interval", -1)));
    client().prepareIndex("test", "my-type1", "1").setRouting("1").setParent("parent_1").setSource(jsonBuilder().startObject().field("field1", "value").endObject()).get();
    GetResponse getResponse = client().prepareGet(indexOrAlias(), "my-type1", "1").setRouting("1").setStoredFields("field1").get();
    assertThat(getResponse.isExists(), equalTo(true));
    assertThat(getResponse.getField("field1").isMetadataField(), equalTo(false));
    assertThat(getResponse.getField("field1").getValue().toString(), equalTo("value"));
    assertThat(getResponse.getField("_routing").isMetadataField(), equalTo(true));
    assertThat(getResponse.getField("_routing").getValue().toString(), equalTo("1"));
    assertThat(getResponse.getField("_parent").isMetadataField(), equalTo(true));
    assertThat(getResponse.getField("_parent").getValue().toString(), equalTo("parent_1"));
    flush();
    getResponse = client().prepareGet(indexOrAlias(), "my-type1", "1").setStoredFields("field1").setRouting("1").get();
    assertThat(getResponse.isExists(), equalTo(true));
    assertThat(getResponse.getField("field1").isMetadataField(), equalTo(false));
    assertThat(getResponse.getField("field1").getValue().toString(), equalTo("value"));
    assertThat(getResponse.getField("_routing").isMetadataField(), equalTo(true));
    assertThat(getResponse.getField("_routing").getValue().toString(), equalTo("1"));
    assertThat(getResponse.getField("_parent").isMetadataField(), equalTo(true));
    assertThat(getResponse.getField("_parent").getValue().toString(), equalTo("parent_1"));
}
Also used : Alias(org.elasticsearch.action.admin.indices.alias.Alias) GetResponse(org.elasticsearch.action.get.GetResponse) MultiGetResponse(org.elasticsearch.action.get.MultiGetResponse)

Example 100 with GetResponse

use of org.graylog.shaded.elasticsearch7.org.elasticsearch.action.get.GetResponse in project elasticsearch by elastic.

the class GetActionIT method testGetFieldsComplexField.

public void testGetFieldsComplexField() throws Exception {
    assertAcked(prepareCreate("my-index").setSettings(Settings.builder().put("index.refresh_interval", -1)).addMapping("my-type2", jsonBuilder().startObject().startObject("my-type2").startObject("properties").startObject("field1").field("type", "object").startObject("properties").startObject("field2").field("type", "object").startObject("properties").startObject("field3").field("type", "object").startObject("properties").startObject("field4").field("type", "text").field("store", true).endObject().endObject().endObject().endObject().endObject().endObject().endObject().endObject().endObject().endObject()));
    BytesReference source = jsonBuilder().startObject().startArray("field1").startObject().startObject("field2").startArray("field3").startObject().field("field4", "value1").endObject().endArray().endObject().endObject().startObject().startObject("field2").startArray("field3").startObject().field("field4", "value2").endObject().endArray().endObject().endObject().endArray().endObject().bytes();
    logger.info("indexing documents");
    client().prepareIndex("my-index", "my-type1", "1").setSource(source, XContentType.JSON).get();
    client().prepareIndex("my-index", "my-type2", "1").setSource(source, XContentType.JSON).get();
    logger.info("checking real time retrieval");
    String field = "field1.field2.field3.field4";
    GetResponse getResponse = client().prepareGet("my-index", "my-type1", "1").setStoredFields(field).get();
    assertThat(getResponse.isExists(), equalTo(true));
    assertThat(getResponse.getField(field).isMetadataField(), equalTo(false));
    assertThat(getResponse.getField(field).getValues().size(), equalTo(2));
    assertThat(getResponse.getField(field).getValues().get(0).toString(), equalTo("value1"));
    assertThat(getResponse.getField(field).getValues().get(1).toString(), equalTo("value2"));
    getResponse = client().prepareGet("my-index", "my-type2", "1").setStoredFields(field).get();
    assertThat(getResponse.isExists(), equalTo(true));
    assertThat(getResponse.getField(field).isMetadataField(), equalTo(false));
    assertThat(getResponse.getField(field).getValues().size(), equalTo(2));
    assertThat(getResponse.getField(field).getValues().get(0).toString(), equalTo("value1"));
    assertThat(getResponse.getField(field).getValues().get(1).toString(), equalTo("value2"));
    logger.info("waiting for recoveries to complete");
    // Flush fails if shard has ongoing recoveries, make sure the cluster is settled down
    ensureGreen();
    logger.info("flushing");
    FlushResponse flushResponse = client().admin().indices().prepareFlush("my-index").setForce(true).get();
    if (flushResponse.getSuccessfulShards() == 0) {
        StringBuilder sb = new StringBuilder("failed to flush at least one shard. total shards [").append(flushResponse.getTotalShards()).append("], failed shards: [").append(flushResponse.getFailedShards()).append("]");
        for (ShardOperationFailedException failure : flushResponse.getShardFailures()) {
            sb.append("\nShard failure: ").append(failure);
        }
        fail(sb.toString());
    }
    logger.info("checking post-flush retrieval");
    getResponse = client().prepareGet("my-index", "my-type1", "1").setStoredFields(field).get();
    assertThat(getResponse.isExists(), equalTo(true));
    assertThat(getResponse.getField(field).isMetadataField(), equalTo(false));
    assertThat(getResponse.getField(field).getValues().size(), equalTo(2));
    assertThat(getResponse.getField(field).getValues().get(0).toString(), equalTo("value1"));
    assertThat(getResponse.getField(field).getValues().get(1).toString(), equalTo("value2"));
    getResponse = client().prepareGet("my-index", "my-type2", "1").setStoredFields(field).get();
    assertThat(getResponse.isExists(), equalTo(true));
    assertThat(getResponse.getField(field).isMetadataField(), equalTo(false));
    assertThat(getResponse.getField(field).getValues().size(), equalTo(2));
    assertThat(getResponse.getField(field).getValues().get(0).toString(), equalTo("value1"));
    assertThat(getResponse.getField(field).getValues().get(1).toString(), equalTo("value2"));
}
Also used : BytesReference(org.elasticsearch.common.bytes.BytesReference) FlushResponse(org.elasticsearch.action.admin.indices.flush.FlushResponse) ShardOperationFailedException(org.elasticsearch.action.ShardOperationFailedException) GetResponse(org.elasticsearch.action.get.GetResponse) MultiGetResponse(org.elasticsearch.action.get.MultiGetResponse)

Aggregations

GetResponse (org.elasticsearch.action.get.GetResponse)167 Test (org.junit.Test)50 GetRequest (org.elasticsearch.action.get.GetRequest)28 Map (java.util.Map)27 MultiGetResponse (org.elasticsearch.action.get.MultiGetResponse)26 ArrayList (java.util.ArrayList)23 HashMap (java.util.HashMap)21 Date (java.util.Date)18 ESSyncConfig (com.alibaba.otter.canal.client.adapter.es.core.config.ESSyncConfig)17 Dml (com.alibaba.otter.canal.client.adapter.support.Dml)17 LinkedHashMap (java.util.LinkedHashMap)17 IOException (java.io.IOException)16 DataSource (javax.sql.DataSource)14 GetRequestBuilder (org.elasticsearch.action.get.GetRequestBuilder)14 SearchResponse (org.elasticsearch.action.search.SearchResponse)14 DeleteResponse (org.elasticsearch.action.delete.DeleteResponse)12 ElasticsearchException (org.elasticsearch.ElasticsearchException)10 Settings (org.elasticsearch.common.settings.Settings)10 Alias (org.elasticsearch.action.admin.indices.alias.Alias)7 IndexResponse (org.elasticsearch.action.index.IndexResponse)7