当前位置: 首页>>代码示例>>Java>>正文


Java CRUDUpdateResponse类代码示例

本文整理汇总了Java中com.redhat.lightblue.crud.CRUDUpdateResponse的典型用法代码示例。如果您正苦于以下问题:Java CRUDUpdateResponse类的具体用法?Java CRUDUpdateResponse怎么用?Java CRUDUpdateResponse使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。


CRUDUpdateResponse类属于com.redhat.lightblue.crud包,在下文中一共展示了CRUDUpdateResponse类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。

示例1: updatingButNotModifyingReturnsProjection

import com.redhat.lightblue.crud.CRUDUpdateResponse; //导入依赖的package包/类
@Test
public void updatingButNotModifyingReturnsProjection() throws Exception {
    // issue #391
    EntityMetadata md = getMd("./testMetadata.json");
    TestCRUDOperationContext ctx = new TestCRUDOperationContext(CRUDOperation.INSERT);
    ctx.add(md);
    addDocument(ctx,new JsonDoc(loadJsonNode("./testdata1.json")));
    controller.insert(ctx, projection("{'field':'_id'}"));

    ctx = new TestCRUDOperationContext(CRUDOperation.UPDATE);
    ctx.add(md);
    // Updating an array field will force use of IterateAndupdate
    CRUDUpdateResponse upd = controller.update(ctx, query("{'field':'field3','op':'>','rvalue':0}"),
            update("{ '$set': { 'field7.0.elemf1' : 'value0_1' } }"), projection("{'field':'_id'}"));
    Assert.assertEquals(IterateAndUpdate.class, ctx.getProperty(MongoCRUDController.PROP_UPDATER).getClass());
    Assert.assertEquals(0, upd.getNumUpdated());
    Assert.assertEquals(1, upd.getNumMatched());
    Assert.assertEquals(0, upd.getNumFailed());
    Assert.assertTrue(ctx.getDocumentStream().hasNext());
}
 
开发者ID:lightblue-platform,项目名称:lightblue-mongo,代码行数:21,代码来源:MongoCRUDControllerTest.java

示例2: updateTest_nullReqField

import com.redhat.lightblue.crud.CRUDUpdateResponse; //导入依赖的package包/类
@Test
public void updateTest_nullReqField() throws Exception {
    EntityMetadata md = getMd("./testMetadata-requiredFields2.json");
    TestCRUDOperationContext ctx = new TestCRUDOperationContext(CRUDOperation.INSERT);
    ctx.add(md);

    JsonDoc doc = new JsonDoc(loadJsonNode("./testdata1.json"));
    doc.modify(new Path("field1"), JsonNodeFactory.instance.nullNode(), false);
    Projection projection = projection("{'field':'_id'}");
    addDocument(ctx,doc);
    CRUDInsertionResponse response = controller.insert(ctx, projection);

    ctx = new TestCRUDOperationContext(CRUDOperation.UPDATE);
    ctx.add(md);
    CRUDUpdateResponse upd = controller.update(ctx, query("{'field':'field2','op':'=','rvalue':'f2'}"),
            update(" {'$set' : {'field3':3 }}"),
            projection("{'field':'*','recursive':1}"));
    Assert.assertEquals(0, upd.getNumUpdated());
    Assert.assertEquals(1, upd.getNumFailed());

    Assert.assertEquals(1, getDataErrors(ctx).size());
    Assert.assertEquals(1, getDataErrors(ctx).get(0).getErrors().size());
    Error error = getDataErrors(ctx).get(0).getErrors().get(0);
    Assert.assertEquals("crud:Required", error.getErrorCode());
    Assert.assertEquals("field1", error.getMsg());
}
 
开发者ID:lightblue-platform,项目名称:lightblue-mongo,代码行数:27,代码来源:MongoCRUDControllerTest.java

示例3: testMigrationUpdate

import com.redhat.lightblue.crud.CRUDUpdateResponse; //导入依赖的package包/类
@Test
public void testMigrationUpdate() throws Exception {
    EntityMetadata md = getMd("./migrationJob.json");
    TestCRUDOperationContext ctx = new TestCRUDOperationContext("migrationJob", CRUDOperation.INSERT);
    ctx.add(md);
    JsonDoc doc = new JsonDoc(loadJsonNode("./job1.json"));
    Projection projection = projection("{'field':'_id'}");
    addDocument(ctx,doc);
    System.out.println("Write doc:" + doc);
    CRUDInsertionResponse insresponse = controller.insert(ctx, projection);

    ctx = new TestCRUDOperationContext("migrationJob", CRUDOperation.UPDATE);
    ctx.add(md);
    CRUDUpdateResponse upd = controller.update(ctx, query("{'field':'_id','op':'=','rvalue':'termsAcknowledgementJob_6264'}"),
            update("[{'$append':{'jobExecutions':{}}},{'$set':{'jobExecutions.-1.ownerName':'hystrix'}},{'$set':{'jobExecutions.-1.hostName':'$(hostname)'}},{'$set':{'jobExecutions.-1.pid':'[email protected]'}},{'$set':{'jobExecutions.-1.actualStartDate':'20150312T19:19:00.700+0000'}},{'$set':{'jobExecutions.-1.actualEndDate':'$null'}},{'$set':{'jobExecutions.-1.completedFlag':false}},{'$set':{'jobExecutions.-1.processedDocumentCount':0}},{'$set':{'jobExecutions.-1.consistentDocumentCount':0}},{'$set':{'jobExecutions.-1.inconsistentDocumentCount':0}},{'$set':{'jobExecutions.-1.overwrittenDocumentCount':0}}]"),
            projection("{'field':'*','recursive':1}"));
    List<DocCtx> documents=streamToList(ctx);
    Assert.assertEquals(1, documents.size());
    Assert.assertEquals(2, documents.get(0).getOutputDocument().get(new Path("jobExecutions")).size());
}
 
开发者ID:lightblue-platform,项目名称:lightblue-mongo,代码行数:21,代码来源:MongoCRUDControllerTest.java

示例4: updateQueryFieldRoleTest

import com.redhat.lightblue.crud.CRUDUpdateResponse; //导入依赖的package包/类
@Test
public void updateQueryFieldRoleTest() throws Exception {
    UpdateRequest req = new UpdateRequest();
    req.setEntityVersion(new EntityVersion("test", "1.0"));
    req.setReturnFields(null);
    req.setQuery(new ValueComparisonExpression(new Path("field1"), BinaryComparisonOperator._eq, new Value("x")));
    req.setClientId(new RestClientIdentification(Arrays.asList("test-update")));

    mockCrudController.updateResponse = new CRUDUpdateResponse();
    Response response = mediator.update(req);
    Assert.assertEquals(OperationStatus.ERROR, response.getStatus());

    req.setQuery(new ValueComparisonExpression(new Path("field2"), BinaryComparisonOperator._eq, new Value("x")));
    response = mediator.update(req);
    Assert.assertEquals(OperationStatus.COMPLETE, response.getStatus());
}
 
开发者ID:lightblue-platform,项目名称:lightblue-core,代码行数:17,代码来源:MediatorTest.java

示例5: updateTest_SingleFailure

import com.redhat.lightblue.crud.CRUDUpdateResponse; //导入依赖的package包/类
@Test
public void updateTest_SingleFailure() throws Exception {
    EntityMetadata md = getMd("./testMetadata.json");
    TestCRUDOperationContext ctx = new TestCRUDOperationContext(CRUDOperation.INSERT);
    coll.createIndex(new BasicDBObject("field1", 1),"unique_test_index", true);
    ctx.add(md);

    // Generate some docs
    List<JsonDoc> docs = new ArrayList<>();
    int numDocs = 20;
    for (int i = 0; i < numDocs; i++) {
        JsonDoc doc = new JsonDoc(loadJsonNode("./testdata1.json"));
        doc.modify(new Path("field1"), nodeFactory.textNode("doc" + i), false);
        doc.modify(new Path("field3"), nodeFactory.numberNode(i), false);
        docs.add(doc);
    }
    addDocuments(ctx,docs);
    CRUDInsertionResponse response = controller.insert(ctx, projection("{'field':'_id'}"));
    try (DBCursor c = coll.find(null)) {
        Assert.assertEquals(numDocs, c.count());
    }
    Assert.assertEquals(ctx.getInputDocumentsWithoutErrors().size(), response.getNumInserted());

    ctx = new TestCRUDOperationContext(CRUDOperation.UPDATE);
    ctx.add(md);

    CRUDUpdateResponse upd = controller.update(ctx, query("{'field':'field3','op':'>','rvalue':-1}"),
            update("{ '$set': { 'field1' : '100' } }"),
            projection("{'field':'_id'}"));
    assertEquals(1, upd.getNumUpdated());
    assertEquals(20, upd.getNumMatched());
    assertEquals(19, upd.getNumFailed());
    List<DocCtx> documents=streamToList(ctx);
    Assert.assertNotNull(documents.get(0).getResultMetadata());
    Assert.assertNotNull(documents.get(0).getResultMetadata().getDocumentVersion());
}
 
开发者ID:lightblue-platform,项目名称:lightblue-mongo,代码行数:37,代码来源:MongoCRUDControllerTest.java

示例6: update_MultiBatch

import com.redhat.lightblue.crud.CRUDUpdateResponse; //导入依赖的package包/类
@Test
public void update_MultiBatch() throws Exception {
    int batch = controller.getBatchSize() + 2;
    EntityMetadata md = getMd("./testMetadata.json");
    TestCRUDOperationContext ctx = new TestCRUDOperationContext(CRUDOperation.INSERT);
    ctx.add(md);

    // Generate some docs
    List<JsonDoc> docs = new ArrayList<>();
    for (int i = 0; i < batch; i++) {
        JsonDoc doc = new JsonDoc(loadJsonNode("./testdata1.json"));
        doc.modify(new Path("field1"), nodeFactory.textNode("doc" + i), false);
        doc.modify(new Path("field3"), nodeFactory.numberNode(i), false);
        docs.add(doc);
    }
    addDocuments(ctx,docs);
    CRUDInsertionResponse response = controller.insert(ctx, projection("{'field':'_id'}"));
    try (DBCursor c = coll.find(null)) {
        Assert.assertEquals(batch, c.count());
    }
    Assert.assertEquals(ctx.getInputDocumentsWithoutErrors().size(), response.getNumInserted());
    ctx = new TestCRUDOperationContext(CRUDOperation.UPDATE);
    ctx.add(md);
    CRUDUpdateResponse upd = controller.update(ctx, query("{'field':'field3','op':'>','rvalue':-1}"),
            update("{ '$set': { 'field1' : '100' } }"),
            projection("{'field':'_id'}"));
    // just make sure all get inserted when we're multi batching.  difficult to spy from here
    List<DocCtx> documents=streamToList(ctx);
    assertEquals(batch, upd.getNumUpdated());
    Assert.assertNotNull(documents.get(0).getResultMetadata());
    Assert.assertNotNull(documents.get(0).getResultMetadata().getDocumentVersion());

}
 
开发者ID:lightblue-platform,项目名称:lightblue-mongo,代码行数:34,代码来源:MongoCRUDControllerTest.java

示例7: updateDocuments_NoLimits

import com.redhat.lightblue.crud.CRUDUpdateResponse; //导入依赖的package包/类
/**
 * A baseline test, no limits on result set size.
 *
 * @throws Exception
 */
@Test
public void updateDocuments_NoLimits() throws Exception {
    setupTestDataAndMetadata();
    insertDocs(10);

    TestCRUDOperationContext ctx = new TestCRUDOperationContext("test", CRUDOperation.UPDATE);
    ctx.add(emd);

    ctx.getFactory().setMaxResultSetSizeForWritesB(-1);
    CRUDUpdateResponse response = controller.update(ctx,
            query("{'field':'field1','op':'$eq','rvalue':'f1'}"),
            update("{ '$set': { 'field2' : 'f2-updated' } }"),
            projection("{'field':'*'}"));

    Assert.assertEquals(10, response.getNumMatched());
    Assert.assertEquals(10, response.getNumUpdated());

    DBCursor cursor = db.getCollection("data").find();
    assertTrue(cursor.hasNext());
    cursor.forEach(obj -> {
        String field2value = ((DBObject) obj).get("field2").toString();
        assertEquals("f2-updated", field2value);
    });
    List<DocCtx> documents=streamToList(ctx);
    Assert.assertEquals(10, documents.size());

    Assert.assertTrue(ctx.getErrors().isEmpty());
}
 
开发者ID:lightblue-platform,项目名称:lightblue-mongo,代码行数:34,代码来源:MongoCRUDControllerMemoryLimitsTest.java

示例8: updateDocuments_LimitNotExceeded

import com.redhat.lightblue.crud.CRUDUpdateResponse; //导入依赖的package包/类
/**
 * Limit is above the needs of this update.
 *
 * @throws Exception
 */
@Test
public void updateDocuments_LimitNotExceeded() throws Exception {
    setupTestDataAndMetadata();
    insertDocs(10);

    TestCRUDOperationContext ctx = new TestCRUDOperationContext("test", CRUDOperation.UPDATE);
    ctx.add(emd);

    // 74 docs is 25798, 11 docs is ~3835B
    ctx.getFactory().setMaxResultSetSizeForWritesB(3835);
    CRUDUpdateResponse response = controller.update(ctx,
            query("{'field':'field1','op':'$eq','rvalue':'f1'}"),
            update("{ '$set': { 'field2' : 'f2-updated' } }"),
            projection("{'field':'*'}"));

    Assert.assertEquals(10, response.getNumMatched());
    Assert.assertEquals(10, response.getNumUpdated());

    DBCursor cursor = db.getCollection("data").find();
    assertTrue(cursor.hasNext());
    cursor.forEach(obj -> {
        String field2value = ((DBObject) obj).get("field2").toString();
        assertEquals("f2-updated", field2value);
    });
    List<DocCtx> documents=streamToList(ctx);
    Assert.assertEquals(10, documents.size());

    Assert.assertTrue(ctx.getErrors().isEmpty());
}
 
开发者ID:lightblue-platform,项目名称:lightblue-mongo,代码行数:35,代码来源:MongoCRUDControllerMemoryLimitsTest.java

示例9: updateDocuments_LimitExceededByHookManager

import com.redhat.lightblue.crud.CRUDUpdateResponse; //导入依赖的package包/类
/**
 * Hook processing exceeds threshold. The size of the list of docs accumulated for this update
 * does not.
 *
 * @throws Exception
 */
@Test
public void updateDocuments_LimitExceededByHookManager() throws Exception {

    int count = MongoCRUDController.DEFAULT_BATCH_SIZE+10;

    setupTestDataAndMetadataWithHook();
    insertDocs(count);

    TestCRUDOperationContext ctx = new TestCRUDOperationContext("test", CRUDOperation.UPDATE);
    ctx.add(emd);

    // 25798 B is the ctx.inputDocuments size after update, but before hooks
    ctx.getFactory().setMaxResultSetSizeForWritesB(25798+10);

    CRUDUpdateResponse response = controller.update(ctx,
            query("{'field':'field1','op':'$eq','rvalue':'f1'}"),
            update("{ '$set': { 'field2' : 'f2-updated' } }"),
            projection("{'field':'*'}"));

    // expecting memory limit to kick in during hook processing
    Assert.assertEquals(1, ctx.getErrors().size());
    Assert.assertEquals(Response.ERR_RESULT_SIZE_TOO_LARGE, ctx.getErrors().get(0).getErrorCode());

    // all updates applied successfully
    Assert.assertEquals(count, response.getNumMatched());
    Assert.assertEquals(count, response.getNumUpdated());
    Assert.assertEquals(0, response.getNumFailed());

    DBCursor cursor = db.getCollection("data").find();

    int i = 0;
    while (cursor.hasNext()) {
        String field2value = cursor.next().get("field2").toString();
        assertEquals("Expecting first batch to be updated successfully", "f2-updated", field2value);
        i++;
    }
    Assert.assertEquals(count, i);

}
 
开发者ID:lightblue-platform,项目名称:lightblue-mongo,代码行数:46,代码来源:MongoCRUDControllerMemoryLimitsTest.java

示例10: updateRoleTest

import com.redhat.lightblue.crud.CRUDUpdateResponse; //导入依赖的package包/类
@Test
public void updateRoleTest() throws Exception {
    UpdateRequest req = new UpdateRequest();
    req.setEntityVersion(new EntityVersion("test", "1.0"));
    req.setReturnFields(null);

    mdManager.md.getAccess().getUpdate().setRoles("role1");
    mockCrudController.updateResponse = new CRUDUpdateResponse();
    Response response = mediator.update(req);

    Assert.assertEquals(OperationStatus.ERROR, response.getStatus());
    Assert.assertEquals(0, response.getModifiedCount());
    Assert.assertEquals(0, response.getMatchCount());
    Assert.assertEquals(0, response.getDataErrors().size());
    Assert.assertEquals(1, response.getErrors().size());
    Assert.assertEquals(CrudConstants.ERR_NO_ACCESS, response.getErrors().get(0).getErrorCode());

    mdManager.md.getAccess().getUpdate().setRoles("anyone");
    mockCrudController.updateResponse.setNumUpdated(1);
    mockCrudController.updateResponse.setNumMatched(1);
    response = mediator.update(req);
    Assert.assertEquals(OperationStatus.COMPLETE, response.getStatus());
    Assert.assertEquals(1, response.getModifiedCount());
    Assert.assertEquals(1, response.getMatchCount());
    Assert.assertEquals(0, response.getDataErrors().size());
    Assert.assertEquals(0, response.getErrors().size());
}
 
开发者ID:lightblue-platform,项目名称:lightblue-core,代码行数:28,代码来源:MediatorTest.java

示例11: updateResultSetTooLargeTest

import com.redhat.lightblue.crud.CRUDUpdateResponse; //导入依赖的package包/类
@Test
public void updateResultSetTooLargeTest() throws Exception {

    final JsonNode sampleDoc = loadJsonNode("./sample1.json");

    UpdateRequest req = new UpdateRequest();
    req.setEntityVersion(new EntityVersion("test", "1.0"));

    mdManager.md.getAccess().getUpdate().setRoles("anyone");
    mockCrudController.updateResponse = new CRUDUpdateResponse();
    mockCrudController.updateCb=ctx->{
        ArrayList<DocCtx> docs=new ArrayList<>();
        for(int i=0;i<10;i++) {
            docs.add(new DocCtx(new JsonDoc(sampleDoc),getRmd(Integer.toString(i))));
        }
        ctx.setInputDocuments(docs);
    };


    mediator.factory.setMaxResultSetSizeForWritesB(11000);
    Response response = mediator.update(req); // max result set size exceeded
    Assert.assertEquals(OperationStatus.ERROR, response.getStatus());
    Assert.assertEquals("Expecting entity data size = 0", 0, JsonUtils.size(response.getEntityData()));
    Assert.assertEquals("Expecting one error in response", 1, response.getErrors().size());
    Assert.assertEquals("crud:ResultSizeTooLarge", response.getErrors().get(0).getErrorCode());
    Assert.assertEquals("11290B > 11000B", response.getErrors().get(0).getMsg());

}
 
开发者ID:lightblue-platform,项目名称:lightblue-core,代码行数:29,代码来源:MediatorTest.java

示例12: updateTest_PartialFailure

import com.redhat.lightblue.crud.CRUDUpdateResponse; //导入依赖的package包/类
@Test
public void updateTest_PartialFailure() throws Exception {
    EntityMetadata md = getMd("./testMetadata-requiredFields.json");
    TestCRUDOperationContext ctx = new TestCRUDOperationContext(CRUDOperation.INSERT);
    ctx.add(md);
    // Generate some docs
    List<JsonDoc> docs = new ArrayList<>();
    int numDocs = 20;
    for (int i = 0; i < numDocs; i++) {
        JsonDoc doc = new JsonDoc(loadJsonNode("./testdata1.json"));
        doc.modify(new Path("field1"), nodeFactory.textNode("doc" + i), false);
        doc.modify(new Path("field3"), nodeFactory.numberNode(i), false);
        docs.add(doc);
    }
    addDocuments(ctx,docs);
    CRUDInsertionResponse response = controller.insert(ctx, projection("{'field':'_id'}"));
    try (DBCursor c = coll.find(null)) {
        Assert.assertEquals(numDocs, c.count());
    }
    Assert.assertEquals(ctx.getInputDocumentsWithoutErrors().size(), response.getNumInserted());

    // Add element to array
    ctx = new TestCRUDOperationContext(CRUDOperation.UPDATE);
    ctx.add(md);
    CRUDUpdateResponse upd = controller.update(ctx, query("{'field':'field1','op':'=','rvalue':'doc1'}"),
            update("[ {'$append' : {'field7':{}} }, { '$set': { 'field7.-1.elemf1':'test'} } ]"),
            projection("{'field':'*','recursive':1}"));
    List<DocCtx> documents=streamToList(ctx);
    Assert.assertEquals(1, upd.getNumUpdated());
    Assert.assertEquals(0, upd.getNumFailed());
    Assert.assertEquals(1, documents.size());
    Assert.assertEquals(3, documents.get(0).getOutputDocument().get(new Path("field7")).size());

    // Add another element, with violated constraint
    ctx = new TestCRUDOperationContext(CRUDOperation.UPDATE);
    ctx.add(md);
    upd = controller.update(ctx, query("{'field':'field1','op':'=','rvalue':'doc1'}"),
            update("[ {'$append' : {'field7':{}} }, { '$set': { 'field7.-1.elemf2':'$null'} } ]"),
            projection("{'field':'*','recursive':1}"));
    Assert.assertEquals(0, upd.getNumUpdated());
    Assert.assertEquals(1, upd.getNumFailed());
}
 
开发者ID:lightblue-platform,项目名称:lightblue-mongo,代码行数:43,代码来源:MongoCRUDControllerTest.java

示例13: updateInaccessibleFieldReturnsError

import com.redhat.lightblue.crud.CRUDUpdateResponse; //导入依赖的package包/类
@Test
public void updateInaccessibleFieldReturnsError() throws Exception {
    // define metadata with a field that cannot be updated
    EntityMetadata entityMetadata = new EntityMetadata("test");
    entityMetadata.setVersion(new Version("1.0.0", null, null));
    entityMetadata.setStatus(MetadataStatus.ACTIVE);
    entityMetadata.setDataStore(new MongoDataStore(null, null, "test"));
    SimpleField idField = new SimpleField("_id", StringType.TYPE);
    List<FieldConstraint> clist = new ArrayList<>();
    clist.add(new IdentityConstraint());
    idField.setConstraints(clist);
    entityMetadata.getFields().put(idField);

    Field inaccessibleField = new SimpleField("inaccessibleField", StringType.TYPE);
    inaccessibleField.getAccess().getUpdate().setRoles(Collections.singletonList("noone"));
    entityMetadata.getFields().put(inaccessibleField);
    entityMetadata.getFields().put(new SimpleField("objectType", StringType.TYPE));

    entityMetadata.getEntityInfo().setDefaultVersion("1.0.0");
    entityMetadata.getEntitySchema().getAccess().getUpdate().setRoles("anyone");

    // create test document directly in mongo
    DBObject testDoc = new BasicDBObject("inaccessibleField", "foo").append("objectType", "test");
    db.getCollection("test").insert(testDoc);

    // try to update inaccessibleField
    TestCRUDOperationContext ctx = new TestCRUDOperationContext("test", CRUDOperation.UPDATE);
    ctx.add(entityMetadata);

    CRUDUpdateResponse response = controller.update(ctx,
            QueryExpression.fromJson(JsonUtils.json("{'field': 'objectType', 'op': '=', 'rvalue': 'test'}".replaceAll("'", "\""))),
            UpdateExpression.fromJson(JsonUtils.json("{'$set': { 'inaccessibleField': 'changed'}}".replaceAll("'", "\""))),
            projection("{'field':'_id'}"));

    Assert.assertEquals(1, response.getNumMatched());
    Assert.assertEquals(0, response.getNumUpdated());
    Assert.assertEquals(1, response.getNumFailed());

    Assert.assertTrue("Expecting a document in the results, so the data error can be associated with it", ctx.getDocumentStream().hasNext());
    DocCtx docCtx = ctx.getDocumentStream().next();
    ctx.getDocumentStream().close();
    Assert.assertEquals("crud:update:NoFieldAccess", docCtx.getErrors().get(0).getErrorCode());
    Assert.assertEquals("[inaccessibleField]", docCtx.getErrors().get(0).getMsg());
}
 
开发者ID:lightblue-platform,项目名称:lightblue-mongo,代码行数:45,代码来源:MongoCRUDControllerTest.java

示例14: updateDocuments_LimitExceeded

import com.redhat.lightblue.crud.CRUDUpdateResponse; //导入依赖的package包/类
/**
 * Update accumulates a list of docs which exceeds the threshold.
 *
 * @throws Exception
 */
@Test
public void updateDocuments_LimitExceeded() throws Exception {

    // 2 batches. One batch + 10 would be updated in full, because the memory limit is enforced after commit.
    int count = 2*MongoCRUDController.DEFAULT_BATCH_SIZE+10;

    setupTestDataAndMetadata();
    insertDocs(count);

    TestCRUDOperationContext ctx = new TestCRUDOperationContext("test", CRUDOperation.UPDATE);
    ctx.add(emd);

    // 74 docs is 25798, 66 docs is ~22310
    ctx.getFactory().setMaxResultSetSizeForWritesB(22310);
    CRUDUpdateResponse response = controller.update(ctx,
            query("{'field':'field1','op':'$eq','rvalue':'f1'}"),
            update("{ '$set': { 'field2' : 'f2-updated' } }"),
            projection("{'field':'*'}"));

    Assert.assertEquals(1, ctx.getErrors().size());
    Assert.assertEquals(MongoCrudConstants.ERROR_RESULT_SIZE_TOO_LARGE, ctx.getErrors().get(0).getErrorCode());

    // this is misleading - 2 batches was updated successfully
    // see IterateAndUpdate#enforceMemoryLimit for more info
    Assert.assertEquals(0, response.getNumMatched());
    Assert.assertEquals(0, response.getNumUpdated());
    Assert.assertEquals(0, response.getNumFailed());

    DBCursor cursor = db.getCollection("data").find();

    int i = 0;
    while (cursor.hasNext()) {
        String field2value = cursor.next().get("field2").toString();
        if (i < 2*MongoCRUDController.DEFAULT_BATCH_SIZE) {
            assertEquals("Expecting first batch to be updated successfully", "f2-updated", field2value);
        } else {
            assertEquals("Expecting 2nd batch not to be updated, because this is where memory limit was reached", "f2", field2value);
        }
        i++;
    }
    Assert.assertEquals(count, i);

}
 
开发者ID:lightblue-platform,项目名称:lightblue-mongo,代码行数:49,代码来源:MongoCRUDControllerMemoryLimitsTest.java

示例15: update

import com.redhat.lightblue.crud.CRUDUpdateResponse; //导入依赖的package包/类
/**
 * Updates the documents in the resultset of a query
 *
 * @param ctx Operation context
 * @param collection The collection in which the documents will be updated
 * @param md Entity metadata
 * @param response Update response
 * @param query The query to search
 *
 * It is expected that how the documents will be updated is to be passed in
 * the constructor. The implementation should run the query, update the
 * documents, compute the projections of the updated documents, and update
 * the operation context accordingly.1
 */
void update(CRUDOperationContext ctx,
            DBCollection collection,
            EntityMetadata md,
            CRUDUpdateResponse response,
            DBObject query);
 
开发者ID:lightblue-platform,项目名称:lightblue-mongo,代码行数:20,代码来源:DocUpdater.java


注:本文中的com.redhat.lightblue.crud.CRUDUpdateResponse类示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。