Skip to content

Commit 181a96f

Browse files
committed
fix: properly mark batch for retrying even without retrying strategy
1 parent dec064d commit 181a96f

File tree

4 files changed

+79
-1
lines changed

4 files changed

+79
-1
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
## 3.5.1 [in progress]
33
### Fixes
44
- [#114](https://github.com/tobiasschuerg/InfluxDB-Client-for-Arduino/pull/114) - Renamed `getRemaingRetryTime()`->`getRemainingRetryTime()`
5+
- [#115](https://github.com/tobiasschuerg/InfluxDB-Client-for-Arduino/pull/115) - Restored writing capability after a connection failure
56

67
## 3.5.0 [2020-10-30]
78
### Features

src/InfluxDbClient.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -468,8 +468,8 @@ bool InfluxDBClient::flushBufferInternal(bool flashOnlyFull) {
468468
_lastFlushed = millis()/1000;
469469
dropCurrentBatch();
470470
} else if(retry) {
471+
_writeBuffer[_batchPointer]->retryCount++;
471472
if(statusCode > 0) { //apply retry strategy only in case of HTTP errors
472-
_writeBuffer[_batchPointer]->retryCount++;
473473
if(_writeBuffer[_batchPointer]->retryCount > _writeOptions._maxRetryAttempts) {
474474
INFLUXDB_CLIENT_DEBUG("[D] Reached max retry count, dropping batch\n");
475475
dropCurrentBatch();

test/Test.cpp

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ void Test::run() {
9494
testFailedWrites();
9595
testTimestamp();
9696
testRetryOnFailedConnection();
97+
testRetryOnFailedConnectionWithFlush();
9798
testBufferOverwriteBatchsize1();
9899
testBufferOverwriteBatchsize5();
99100
testServerTempDownBatchsize5();
@@ -503,6 +504,81 @@ void Test::testRetryOnFailedConnection() {
503504
deleteAll(Test::apiUrl);
504505
}
505506

507+
void Test::testRetryOnFailedConnectionWithFlush() {
508+
TEST_INIT("testRetryOnFailedConnectionWithFlush");
509+
510+
InfluxDBClient clientOk(Test::apiUrl, Test::orgName, Test::bucketName, Test::token);
511+
clientOk.setWriteOptions(WriteOptions().batchSize(2).bufferSize(2).retryInterval(4));
512+
waitServer(Test::managementUrl, true);
513+
TEST_ASSERT(clientOk.validateConnection());
514+
Point *p = createPoint("test1");
515+
TEST_ASSERT(clientOk.writePoint(*p));
516+
delete p;
517+
TEST_ASSERT(clientOk.flushBuffer());
518+
TEST_ASSERT(clientOk.isBufferEmpty());
519+
520+
clientOk.setHTTPOptions(HTTPOptions().httpReadTimeout(500));
521+
522+
Serial.println("Stop server!");
523+
waitServer(Test::managementUrl, false);
524+
// test dropping batch on max retry count
525+
TEST_ASSERT(!clientOk.validateConnection());
526+
p = createPoint("test1");
527+
TEST_ASSERT(clientOk.writePoint(*p));
528+
delete p;
529+
530+
Serial.print(millis()/1000.0f,3);
531+
Serial.println(" Write 1");
532+
533+
TEST_ASSERT(!clientOk.flushBuffer());
534+
TEST_ASSERT(!clientOk.isBufferEmpty());
535+
Serial.println(clientOk.getLastErrorMessage());
536+
537+
Serial.print(millis()/1000.0f,3);
538+
Serial.println(" Write 2");
539+
540+
TEST_ASSERT(!clientOk.flushBuffer());
541+
TEST_ASSERT(!clientOk.isBufferEmpty());
542+
Serial.println(clientOk.getLastErrorMessage());
543+
544+
Serial.print(millis()/1000.0f,3);
545+
Serial.println(" Write 3");
546+
547+
TEST_ASSERT(!clientOk.flushBuffer());
548+
TEST_ASSERT(!clientOk.isBufferEmpty());
549+
Serial.println(clientOk.getLastErrorMessage());
550+
551+
552+
Serial.println("Start server!");
553+
waitServer(Test::managementUrl, true);
554+
clientOk.setHTTPOptions(HTTPOptions().httpReadTimeout(5000));
555+
TEST_ASSERT(clientOk.validateConnection());
556+
557+
Serial.print(millis()/1000.0f,3);
558+
Serial.println(" Write 4");
559+
p = createPoint("test1");
560+
TEST_ASSERT(clientOk.writePoint(*p));
561+
delete p;
562+
TEST_ASSERT(clientOk.flushBuffer());
563+
TEST_ASSERT(clientOk.isBufferEmpty());
564+
565+
Serial.print(millis()/1000.0f,3);
566+
Serial.println(" Write 5");
567+
p = createPoint("test1");
568+
TEST_ASSERT(clientOk.writePoint(*p));
569+
delete p;
570+
TEST_ASSERT(clientOk.flushBuffer());
571+
TEST_ASSERT(clientOk.isBufferEmpty());
572+
573+
String query = "select";
574+
FluxQueryResult q = clientOk.query(query);
575+
TEST_ASSERT(countLines(q) == 3);
576+
577+
578+
TEST_END();
579+
deleteAll(Test::apiUrl);
580+
}
581+
506582
void Test::testBufferOverwriteBatchsize1() {
507583
TEST_INIT("testBufferOverwriteBatchsize1");
508584
InfluxDBClient client(INFLUXDB_CLIENT_TESTING_BAD_URL, Test::orgName, Test::bucketName, Test::token);

test/Test.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ class Test {
6868
static void testTimestamp();
6969
static void testHTTPReadTimeout();
7070
static void testRetryOnFailedConnection();
71+
static void testRetryOnFailedConnectionWithFlush();
7172
static void testBufferOverwriteBatchsize1();
7273
static void testBufferOverwriteBatchsize5();
7374
static void testServerTempDownBatchsize5();

0 commit comments

Comments
 (0)