Skip to content

Commit 56fda94

Browse files
committed
expose get failed items in batch
1 parent e87db76 commit 56fda94

File tree

8 files changed

+128
-60
lines changed

8 files changed

+128
-60
lines changed

sdk/Aliyun/OTS/Handler/ProtoBufferDecoder.cs

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -264,20 +264,21 @@ private Response.OTSResponse DecodeDeleteRow(byte[] body, out IMessage _message)
264264
}
265265

266266
private IList<Response.BatchWriteRowResponseItem>
267-
ParseBatchWriteRowResponseItems(IList<PB.RowInBatchWriteRowResponse> responseItems)
267+
ParseBatchWriteRowResponseItems(string tableName, IList<PB.RowInBatchWriteRowResponse> responseItems)
268268
{
269-
var ret = new List<Response.BatchWriteRowResponseItem>();
269+
var ret = new List<Response.BatchWriteRowResponseItem>();
270+
int index = 0;
270271
foreach (var responseItem in responseItems)
271272
{
272273
if (responseItem.IsOk)
273-
{
274-
ret.Add(new Response.BatchWriteRowResponseItem(
275-
ParseCapacityUnit(responseItem.Consumed.CapacityUnit)));
274+
{
275+
ret.Add(new Response.BatchWriteRowResponseItem(
276+
ParseCapacityUnit(responseItem.Consumed.CapacityUnit), tableName, index++));
276277
}
277278
else
278-
{
279-
ret.Add(new Response.BatchWriteRowResponseItem(
280-
responseItem.Error.Code, responseItem.Error.Message
279+
{
280+
ret.Add(new Response.BatchWriteRowResponseItem(
281+
responseItem.Error.Code, responseItem.Error.Message, tableName, index++
281282
));
282283
}
283284
}
@@ -289,9 +290,9 @@ private Response.BatchWriteRowResponseForOneTable
289290
ParseTableInBatchWriteRowResponse(PB.TableInBatchWriteRowResponse table)
290291
{
291292
var ret = new Response.BatchWriteRowResponseForOneTable();
292-
ret.PutResponses = ParseBatchWriteRowResponseItems(table.PutRowsList);
293-
ret.DeleteResponses = ParseBatchWriteRowResponseItems(table.DeleteRowsList);
294-
ret.UpdateResponses = ParseBatchWriteRowResponseItems(table.UpdateRowsList);
293+
ret.PutResponses = ParseBatchWriteRowResponseItems(table.TableName, table.PutRowsList);
294+
ret.DeleteResponses = ParseBatchWriteRowResponseItems(table.TableName, table.DeleteRowsList);
295+
ret.UpdateResponses = ParseBatchWriteRowResponseItems(table.TableName, table.UpdateRowsList);
295296
return ret;
296297
}
297298

sdk/Aliyun/OTS/Response/BatchGetRowResponse.cs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
*
1010
*/
1111

12-
using System.Collections.Generic;
12+
using System.Collections.Generic;
13+
using System.Linq;
1314

1415
namespace Aliyun.OTS.Response
1516
{
@@ -32,6 +33,21 @@ public BatchGetRowResponse()
3233
public void Add(string tableName, IList<BatchGetRowResponseItem> rowDataInTable)
3334
{
3435
RowDataGroupByTable.Add(tableName, rowDataInTable);
36+
}
37+
38+
public bool IsAllSucceed
39+
{
40+
get { return !GetFailedRows().Any(); }
41+
}
42+
43+
public IEnumerable<BatchGetRowResponseItem> GetFailedRows()
44+
{
45+
var result = new List<BatchGetRowResponseItem>();
46+
foreach (var tableResult in RowDataGroupByTable)
47+
{
48+
result.AddRange(tableResult.Value.Where(_ => !_.IsOK));
49+
}
50+
return result;
3551
}
3652
}
3753
}

sdk/Aliyun/OTS/Response/BatchWriteRowErrorResponseItem.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@
1313
namespace Aliyun.OTS.Response
1414
{
1515
public class BatchWriteRowErrorResponseItem : BatchWriteRowResponseItem
16-
{
17-
public BatchWriteRowErrorResponseItem(string errorCode, string errorMessage)
18-
: base(errorCode, errorMessage)
16+
{
17+
public BatchWriteRowErrorResponseItem(string errorCode, string errorMessage, string tableName, int index)
18+
: base(errorCode, errorMessage, tableName, index)
1919
{
2020
}
2121
}

sdk/Aliyun/OTS/Response/BatchWriteRowResponse.cs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
*
1010
*/
1111

12-
using System.Collections.Generic;
12+
using System.Collections.Generic;
13+
using System.Linq;
1314

1415
namespace Aliyun.OTS.Response
1516
{
@@ -30,6 +31,22 @@ public class BatchWriteRowResponse : OTSResponse
3031
/// </summary>
3132
public IDictionary<string, BatchWriteRowResponseForOneTable> TableRespones { get; private set; }
3233

34+
public bool IsAllSucceed {
35+
get { return !GetFailedRows().Any(); }
36+
}
37+
38+
public IEnumerable<BatchWriteRowResponseItem> GetFailedRows()
39+
{
40+
var result = new List<BatchWriteRowResponseItem>();
41+
foreach (var tableResult in TableRespones)
42+
{
43+
result.AddRange(tableResult.Value.PutResponses.Where(_ => !_.IsOK));
44+
result.AddRange(tableResult.Value.UpdateResponses.Where(_ => !_.IsOK));
45+
result.AddRange(tableResult.Value.DeleteResponses.Where(_ => !_.IsOK));
46+
}
47+
return result;
48+
}
49+
3350
public BatchWriteRowResponse()
3451
{
3552
TableRespones = new Dictionary<string, BatchWriteRowResponseForOneTable>();

sdk/Aliyun/OTS/Response/BatchWriteRowResponseItem.cs

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,24 +32,38 @@ public class BatchWriteRowResponseItem
3232
/// <summary>
3333
/// 错误消息
3434
/// </summary>
35-
public string ErrorMessage = null;
36-
35+
public string ErrorMessage = null;
36+
37+
/// <summary>
38+
/// 表名
39+
/// </summary>
40+
public string TableName;
41+
42+
/// <summary>
43+
/// 更新编号
44+
/// </summary>
45+
public int Index = 0;
46+
3747
/// <summary>
3848
/// 本次操作消耗的读写能力单元
3949
/// </summary>
4050
public CapacityUnit Consumed { get; set; }
4151

42-
public BatchWriteRowResponseItem(string errorCode, string errorMessage)
52+
public BatchWriteRowResponseItem(string errorCode, string errorMessage, string tableName, int index)
4353
{
4454
IsOK = false;
4555
ErrorCode = errorCode;
46-
ErrorMessage = errorMessage;
56+
ErrorMessage = errorMessage;
57+
TableName = tableName;
58+
Index = index;
4759
}
4860

49-
public BatchWriteRowResponseItem(CapacityUnit consumed)
61+
public BatchWriteRowResponseItem(CapacityUnit consumed, string tableName, int index)
5062
{
5163
IsOK = true;
52-
Consumed = consumed;
64+
Consumed = consumed;
65+
TableName = tableName;
66+
Index = index;
5367
}
5468
}
5569
}

sdk/Aliyun/OTS/Response/BatchWriteRowSuccessResponseItem.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@
1515
namespace Aliyun.OTS.Response
1616
{
1717
public class BatchWriteRowSuccessResponseItem : BatchWriteRowResponseItem
18-
{
19-
public BatchWriteRowSuccessResponseItem(CapacityUnit consumedCapacityUnit)
20-
: base(consumedCapacityUnit)
18+
{
19+
public BatchWriteRowSuccessResponseItem(CapacityUnit consumedCapacityUnit, string tableName, int index)
20+
: base(consumedCapacityUnit, tableName, index)
2121
{
2222
}
2323
}

test/UnitTest/InterfaceTest/MultiRowOperationTest.cs

Lines changed: 52 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,8 @@ public void TestPutOnlyInBatchWriteRow()
9191
var expectResponse = new BatchWriteRowResponse();
9292
var item = GetNewBatchWriteRowResponseForOneTable();
9393

94-
for (int i = 0; i < 4; i ++) {
95-
item.PutResponses.Add(new BatchWriteRowResponseItem(new CapacityUnit(0, 1)));
94+
for (int i = 0; i < 4; i ++) {
95+
item.PutResponses.Add(new BatchWriteRowResponseItem(new CapacityUnit(0, 1), TestTableName, i));
9696
}
9797
expectResponse.TableRespones.Add(TestTableName, item);
9898

@@ -144,8 +144,8 @@ public void TestUpdateOnlyInBatchWriteRow()
144144
var expectResponse = new BatchWriteRowResponse();
145145
var item = GetNewBatchWriteRowResponseForOneTable();
146146

147-
for (int i = 0; i < 4; i ++) {
148-
item.UpdateResponses.Add(new BatchWriteRowResponseItem(new CapacityUnit(0, 1)));
147+
for (int i = 0; i < 4; i ++) {
148+
item.UpdateResponses.Add(new BatchWriteRowResponseItem(new CapacityUnit(0, 1), TestTableName, i));
149149
}
150150
expectResponse.TableRespones.Add(TestTableName, item);
151151

@@ -191,8 +191,8 @@ public void TestDeleteOnlyInBatchWriteRow()
191191
var expectResponse = new BatchWriteRowResponse();
192192
var item = GetNewBatchWriteRowResponseForOneTable();
193193

194-
for (int i = 0; i < 4; i ++) {
195-
item.DeleteResponses.Add(new BatchWriteRowResponseItem(new CapacityUnit(0, 1)));
194+
for (int i = 0; i < 4; i ++) {
195+
item.DeleteResponses.Add(new BatchWriteRowResponseItem(new CapacityUnit(0, 1), TestTableName, i));
196196
}
197197
expectResponse.TableRespones.Add(TestTableName, item);
198198

@@ -248,10 +248,10 @@ public void Test4PutUpdateDeleteInBatchWriteRow()
248248
var expectResponse = new BatchWriteRowResponse();
249249
var item = GetNewBatchWriteRowResponseForOneTable();
250250

251-
for (int i = 0; i < 4; i ++) {
252-
item.PutResponses.Add(new BatchWriteRowResponseItem(new CapacityUnit(0, 1)));
253-
item.UpdateResponses.Add(new BatchWriteRowResponseItem(new CapacityUnit(0, 1)));
254-
item.DeleteResponses.Add(new BatchWriteRowResponseItem(new CapacityUnit(0, 1)));
251+
for (int i = 0; i < 4; i ++) {
252+
item.PutResponses.Add(new BatchWriteRowResponseItem(new CapacityUnit(0, 1), TestTableName, i));
253+
item.UpdateResponses.Add(new BatchWriteRowResponseItem(new CapacityUnit(0, 1), TestTableName, i));
254+
item.DeleteResponses.Add(new BatchWriteRowResponseItem(new CapacityUnit(0, 1), TestTableName, i));
255255
}
256256
expectResponse.TableRespones.Add(TestTableName, item);
257257

@@ -374,15 +374,33 @@ public void Test4TablesInBatchWriteRow()
374374
var response = OTSClient.BatchWriteRow(request);
375375

376376
var expectResponse = new BatchWriteRowResponse();
377-
var item = GetNewBatchWriteRowResponseForOneTable();
378-
379-
for (int i = 0; i < 4; i ++) {
380-
item.PutResponses.Add(new BatchWriteRowResponseItem(new CapacityUnit(0, 1)));
377+
var item1 = GetNewBatchWriteRowResponseForOneTable();
378+
var item2 = GetNewBatchWriteRowResponseForOneTable();
379+
var item3 = GetNewBatchWriteRowResponseForOneTable();
380+
var item4 = GetNewBatchWriteRowResponseForOneTable();
381+
382+
for (int i = 0; i < 4; i ++) {
383+
item1.PutResponses.Add(new BatchWriteRowResponseItem(new CapacityUnit(0, 1), "Table1", i));
384+
}
385+
386+
for (int i = 0; i < 4; i++)
387+
{
388+
item2.PutResponses.Add(new BatchWriteRowResponseItem(new CapacityUnit(0, 1), "Table2", i));
389+
}
390+
391+
for (int i = 0; i < 4; i++)
392+
{
393+
item3.PutResponses.Add(new BatchWriteRowResponseItem(new CapacityUnit(0, 1), "Table3", i));
394+
}
395+
396+
for (int i = 0; i < 4; i++)
397+
{
398+
item4.PutResponses.Add(new BatchWriteRowResponseItem(new CapacityUnit(0, 1), "Table4", i));
381399
}
382-
expectResponse.TableRespones.Add("Table1", item);
383-
expectResponse.TableRespones.Add("Table2", item);
384-
expectResponse.TableRespones.Add("Table3", item);
385-
expectResponse.TableRespones.Add("Table4", item);
400+
expectResponse.TableRespones.Add("Table1", item1);
401+
expectResponse.TableRespones.Add("Table2", item2);
402+
expectResponse.TableRespones.Add("Table3", item3);
403+
expectResponse.TableRespones.Add("Table4", item4);
386404

387405
AssertBatchWriteRowResponse(expectResponse, response);
388406

@@ -467,14 +485,14 @@ public void TestOneTableOneFailInBatchWriteRow()
467485

468486
for (int t = 1; t < 5; t ++) {
469487
var item = GetNewBatchWriteRowResponseForOneTable();
470-
for (int i = 0; i < 4; i ++) {
471-
item.PutResponses.Add(new BatchWriteRowResponseItem(new CapacityUnit(0, 1)));
488+
for (int i = 0; i < 4; i ++) {
489+
item.PutResponses.Add(new BatchWriteRowResponseItem(new CapacityUnit(0, 1), "Table" + t, i));
472490
}
473491
expectResponse.TableRespones.Add("Table" + t, item);
474492
}
475493

476-
expectResponse.TableRespones["Table1"].PutResponses[0] =
477-
new BatchWriteRowResponseItem("OTSConditionCheckFail", "Condition check failed.");
494+
expectResponse.TableRespones["Table1"].PutResponses[0] =
495+
new BatchWriteRowResponseItem("OTSConditionCheckFail", "Condition check failed.", "Table1", 0);
478496

479497
AssertBatchWriteRowResponse(expectResponse, response);
480498

@@ -524,16 +542,16 @@ public void TestOneTableTwoFailInBatchWriteRow()
524542

525543
for (int t = 1; t < 5; t ++) {
526544
var item = GetNewBatchWriteRowResponseForOneTable();
527-
for (int i = 0; i < 4; i ++) {
528-
item.PutResponses.Add(new BatchWriteRowResponseItem(new CapacityUnit(0, 1)));
545+
for (int i = 0; i < 4; i ++) {
546+
item.PutResponses.Add(new BatchWriteRowResponseItem(new CapacityUnit(0, 1), "Table" + t, i));
529547
}
530548
expectResponse.TableRespones.Add("Table" + t, item);
531549
}
532550

533-
expectResponse.TableRespones["Table1"].PutResponses[0] =
534-
new BatchWriteRowResponseItem("OTSConditionCheckFail", "Condition check failed.");
535-
expectResponse.TableRespones["Table1"].PutResponses[3] =
536-
new BatchWriteRowResponseItem("OTSConditionCheckFail", "Condition check failed.");
551+
expectResponse.TableRespones["Table1"].PutResponses[0] =
552+
new BatchWriteRowResponseItem("OTSConditionCheckFail", "Condition check failed.", "Table1", 0);
553+
expectResponse.TableRespones["Table1"].PutResponses[3] =
554+
new BatchWriteRowResponseItem("OTSConditionCheckFail", "Condition check failed.", "Table1", 3);
537555
AssertBatchWriteRowResponse(expectResponse, response);
538556

539557
for (int i = 0; i < 4; i ++) {
@@ -581,16 +599,16 @@ public void TestTwoTableOneFailInBatchWriteRow() {
581599

582600
for (int t = 1; t < 5; t ++) {
583601
var item = GetNewBatchWriteRowResponseForOneTable();
584-
for (int i = 0; i < 4; i ++) {
585-
item.PutResponses.Add(new BatchWriteRowResponseItem(new CapacityUnit(0, 1)));
602+
for (int i = 0; i < 4; i ++) {
603+
item.PutResponses.Add(new BatchWriteRowResponseItem(new CapacityUnit(0, 1), "Table" + t, i));
586604
}
587605
expectResponse.TableRespones.Add("Table" + t, item);
588606
}
589607

590-
expectResponse.TableRespones["Table1"].PutResponses[0] =
591-
new BatchWriteRowResponseItem("OTSConditionCheckFail", "Condition check failed.");
592-
expectResponse.TableRespones["Table2"].PutResponses[3] =
593-
new BatchWriteRowResponseItem("OTSConditionCheckFail", "Condition check failed.");
608+
expectResponse.TableRespones["Table1"].PutResponses[0] =
609+
new BatchWriteRowResponseItem("OTSConditionCheckFail", "Condition check failed.", "Table1", 0);
610+
expectResponse.TableRespones["Table2"].PutResponses[3] =
611+
new BatchWriteRowResponseItem("OTSConditionCheckFail", "Condition check failed.", "Table1", 3);
594612
AssertBatchWriteRowResponse(expectResponse, response);
595613

596614
for (int i = 0; i < 4; i ++) {

test/UnitTest/OTSUnitTestBase.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -374,7 +374,9 @@ private void AssertOneOperationInBatchWriteRowResponse(
374374

375375
Assert.AreEqual(expectItem.IsOK, actualItem.IsOK);
376376
Assert.AreEqual(expectItem.ErrorCode, actualItem.ErrorCode);
377-
Assert.AreEqual(expectItem.ErrorMessage, actualItem.ErrorMessage);
377+
Assert.AreEqual(expectItem.ErrorMessage, actualItem.ErrorMessage);
378+
Assert.AreEqual(expectItem.TableName, actualItem.TableName);
379+
Assert.AreEqual(expectItem.Index, actualItem.Index);
378380
AssertCapacityUnit(expectItem.Consumed, expectItem.Consumed);
379381
}
380382
}

0 commit comments

Comments
 (0)