Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

InfluxDB Client 6.8.0 with createV1 uses POST /api/v2/write instead of POST /write #566

Open
polarnik opened this issue May 23, 2023 · 1 comment

Comments

@polarnik
Copy link

polarnik commented May 23, 2023

Steps to reproduce:
List the minimal actions needed to reproduce the behavior.

  1. Install InfluxDB v2
  2. Create a bucket 28c2cbcbac4cf29f
  3. Create v1 auth token with a name UserName and password: Password
influx v1 auth create \
--read-bucket 28c2cbcbac4cf29f --write-bucket 28c2cbcbac4cf29f \
--username UserName
  1. Create v1 database with name DataBase and retention policy auto
influx v1 dbrp create \
--bucket-id 28c2cbcbac4cf29f --db DataBase --rp auto
  1. Try to write some metrics via V1 endpoint:
        try (InfluxDBClient client = InfluxDBClientFactory.createV1(
               "http://127.0.0.1:8086",
               "UserName",
               "Password".toCharArray(),
                "DataBase",
               "auto"
        )) {
            try (WriteApi writeApi = client.makeWriteApi()) {
                writeApi.writePoint(point);
                writeApi.flush();
            }
        }

Expected behavior:
HTTP request via
https://docs.influxdata.com/influxdb/v2.7/reference/api/influxdb-1x/write/
HTTP request:

POST /write?db=DataBase&rp=auto HTTP/1.1
Accept: application/json
User-Agent: influxdb-client-java/6.8.0
Authorization: Basic XXXXXXXX=
Accept-Encoding: identity
Content-Type: text/plain; charset=utf-8
Content-Length: 275
Host: 127.0.0.1:8086
Connection: Keep-Alive

iteration_duration,TEST_NAME=XXXXXXXX_HTTP_INFLUXDB_V1,scenario=default avg=542.131667,count=1i,max=542.131667,med=542.131667,min=542.131667,p(30)=542.131667,p(70)=542.131667,p(80)=542.131667,p(90)=542.131667,p(95)=542.131667,p(99)=542.131667,p(99.9)=542.131667 1684842304679

Actual behavior:
HTTP request:

POST /api/v2/write?org=-&bucket=DataBase%2Fauto&precision=ms HTTP/1.1
Accept: application/json
User-Agent: influxdb-client-java/6.8.0
Authorization: Token UserName:Password
Accept-Encoding: identity
Content-Type: text/plain; charset=utf-8
Content-Length: 275
Host: 127.0.0.1:8086
Connection: Keep-Alive

iteration_duration,TEST_NAME=XXXXXXXX_HTTP_INFLUXDB_V1,scenario=default avg=542.131667,count=1i,max=542.131667,med=542.131667,min=542.131667,p(30)=542.131667,p(70)=542.131667,p(80)=542.131667,p(90)=542.131667,p(95)=542.131667,p(99)=542.131667,p(99.9)=542.131667 1684842304679

It doesn't work. Only 401 Errors.

May 23, 2023 4:47:52 PM com.influxdb.client.write.events.WriteErrorEvent logEvent
SEVERE: The error occurred during writing of data
com.influxdb.exceptions.UnauthorizedException: HTTP status code: 401; Message: unauthorized access
	at com.influxdb.internal.AbstractRestClient.responseToError(AbstractRestClient.java:115)
	at com.influxdb.internal.AbstractRestClient.toInfluxException(AbstractRestClient.java:99)
	at com.influxdb.client.internal.AbstractWriteClient.lambda$new$8(AbstractWriteClient.java:174)
	at io.reactivex.rxjava3.internal.subscribers.LambdaSubscriber.onNext(LambdaSubscriber.java:65)
	at io.reactivex.rxjava3.internal.operators.flowable.FlowableDoFinally$DoFinallySubscriber.onNext(FlowableDoFinally.java:85)
	at io.reactivex.rxjava3.internal.operators.mixed.FlowableConcatMapMaybe$ConcatMapMaybeSubscriber.drain(FlowableConcatMapMaybe.java:238)
	at io.reactivex.rxjava3.internal.operators.mixed.ConcatMapXMainSubscriber.onNext(ConcatMapXMainSubscriber.java:106)
	at com.influxdb.client.internal.flowable.BackpressureBatchesBufferStrategy$OnBackpressureBufferStrategySubscriber.drain(BackpressureBatchesBufferStrategy.java:238)
	at com.influxdb.client.internal.flowable.BackpressureBatchesBufferStrategy$OnBackpressureBufferStrategySubscriber.onNext(BackpressureBatchesBufferStrategy.java:149)
	at com.influxdb.client.internal.flowable.BackpressureBatchesBufferStrategy$OnBackpressureBufferStrategySubscriber.onNext(BackpressureBatchesBufferStrategy.java:54)
	at io.reactivex.rxjava3.internal.operators.flowable.FlowableFlatMap$MergeSubscriber.tryEmitScalar(FlowableFlatMap.java:232)
	at io.reactivex.rxjava3.internal.operators.flowable.FlowableFlatMap$MergeSubscriber.onNext(FlowableFlatMap.java:150)
	at io.reactivex.rxjava3.internal.operators.flowable.FlowableFilter$FilterSubscriber.tryOnNext(FlowableFilter.java:75)
	at io.reactivex.rxjava3.internal.operators.flowable.FlowableFilter$FilterSubscriber.onNext(FlowableFilter.java:53)
	at io.reactivex.rxjava3.internal.operators.flowable.FlowableFlatMap$MergeSubscriber.tryEmit(FlowableFlatMap.java:270)
	at io.reactivex.rxjava3.internal.operators.flowable.FlowableFlatMap$InnerSubscriber.onNext(FlowableFlatMap.java:627)
	at io.reactivex.rxjava3.internal.operators.flowable.FlowableMap$MapSubscriber.onNext(FlowableMap.java:69)
	at io.reactivex.rxjava3.subscribers.SerializedSubscriber.onNext(SerializedSubscriber.java:103)
	at com.influxdb.client.internal.flowable.FlowableBufferTimedFlushable$BufferExactBoundedSubscriber.accept(FlowableBufferTimedFlushable.java:227)
	at com.influxdb.client.internal.flowable.FlowableBufferTimedFlushable$BufferExactBoundedSubscriber.accept(FlowableBufferTimedFlushable.java:85)
	at io.reactivex.rxjava3.internal.subscribers.QueueDrainSubscriber.fastPathOrderedEmitMax(QueueDrainSubscriber.java:107)
	at com.influxdb.client.internal.flowable.FlowableBufferTimedFlushable$BufferExactBoundedSubscriber.run(FlowableBufferTimedFlushable.java:281)
	at com.influxdb.client.internal.flowable.FlowableBufferTimedFlushable$BufferExactBoundedSubscriber.lambda$onSubscribe$0(FlowableBufferTimedFlushable.java:149)
	at io.reactivex.rxjava3.internal.subscribers.LambdaSubscriber.onNext(LambdaSubscriber.java:65)
	at io.reactivex.rxjava3.processors.PublishProcessor$PublishSubscription.onNext(PublishProcessor.java:361)
	at io.reactivex.rxjava3.processors.PublishProcessor.offer(PublishProcessor.java:298)
	at com.influxdb.client.internal.AbstractWriteClient.flush(AbstractWriteClient.java:190)

Specifications:

  • Client Version: 6.8.0
  • InfluxDB Version: 2.6.1
  • JDK Version: 17
  • Platform: MacOS

Workaround:
Use
https://github.com/influxdata/influxdb-java
instead of
https://github.com/influxdata/influxdb-client-java
for working with v1

@polarnik polarnik changed the title InfluxDB Client 6.8.0 uses POST /api/v2/write with strange params for InfluxDBClientFactory.createV1 InfluxDB Client 6.8.0 with createV1 uses POST /api/v2/write instead of POST /write May 23, 2023
@polarnik
Copy link
Author

polarnik commented May 23, 2023

Workaround with org.influxdb:influxdb-java:2.23

//Point from https://github.com/influxdata/influxdb-client-java
import com.influxdb.client.write.Point; 

// Client from https://github.com/influxdata/influxdb-java
import org.influxdb.InfluxDB;
import org.influxdb.InfluxDBFactory;

...

        final InfluxDB influxDB = InfluxDBFactory.connect(InfluxDBAddress, Username, Password);
        influxDB.setDatabase(DataBase);
        influxDB.setRetentionPolicy(RetentionPolicy);
        InfluxLineGenerator influxLineGenerator = new InfluxLineGenerator(); // Some generator
        ArrayList<Point> points = influxLineGenerator.getPointList();
        for(Point point: points) {
            influxDB.write(DataBase, RetentionPolicy, InfluxDB.ConsistencyLevel.ALL, TimeUnit.MILLISECONDS,
                    point.toLineProtocol());
        }
        influxDB.close();

Gradle config:

    implementation("org.influxdb:influxdb-java:2.23")
    implementation("com.influxdb:influxdb-client-java:6.8.0")

Some important case:

  1. Send a point with tags and values
  2. Send a point with the same tags and values but with a new time

InfluxDB 1.8 POST /write - we will see the 2nd point in the DB
InfluxDB 2.6.1 POST /write - we will see the all points in the DB

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant