apache / apache/iotdb

[Bug] An error occurred when executing getDeviceToStorageGroup():root is not a legal path

Đang mở
#12,966 3 bình luận 0 reaction 0 người được giao Xem trên GitHub
Ngôn ngữ chính
Java
Star
6.4k
Fork
1.2k
Merge trung bình
1 ngày 23 giờ
Pull request đã merge (30 ngày)
115

Mô tả

### Search before asking

- [X] I searched in the [issues](https://github.com/apache/iotdb/issues) and found nothing similar.

### Version

1.3.2

### Describe the bug and provide the minimal reproduce step

Insert data via restful api, the request payload is as below:
```json
{
"time": "2024-07-18T11:14:37.669158+00:00",
"msg": "action_template_rendered",
"meta": {
"trace_tag": "QUERY_RENDER",
"rule_trigger_ts": [
1721301277619
],
"rule_ids": [
"rule_9f32_duplication"
],
"result": {
"url": "{http,{8,130,129,18},18080,\"/rest/v2/insertTablet\"}",
"timeout": 30000,
"port": 18080,
"path": "/rest/v2/insertTablet",
"method": "post",
"host": "8.130.129.18",
"headers": {
"Content-type": "application/json",
"Authorization": "******"
},
"body": "{\"is_aligned\":false,\"device\":\"mock_client_15\",\"data_types\":[\"FLOAT\",\"FLOAT\",\"FLOAT\",\"FLOAT\",\"FLOAT\",\"FLOAT\",\"FLOAT\",\"FLOAT\",\"TEXT\"],\"measurements\":[\"temperature\",\"humidity\",\"volume\",\"PM10\",\"pm25\",\"SO2\",\"NO2\",\"CO\",\"area\"],\"timestamps\":[1721301277657,1721301277657,1721301277657,1721301277657,1721301277657,1721301277657,1721301277657,1721301277657,1721301277657],\"values\":[[36.62,null,null,null,null,null,null,null,null],[null,78.38,null,null,null,null,null,null,null],[null,null,134.72,null,null,null,null,null,null],[null,null,null,203.57,null,null,null,null,null],[null,null,null,null,28.1,null,null,null,null],[null,null,null,null,null,16.15,null,null,null],[null,null,null,null,null,null,2.1,null,null],[null,null,null,null,null,null,null,29.68,null],[null,null,null,null,null,null,null,null,\"77\"]]}"
},
"client_ids": [
"mock_client_15"
],
"action_info": {
"type": "iotdb",
"name": "IoTDB"
}
},
"level": "debug"
}
```

response from restful api:
```json
{
"time": "2024-07-18T11:14:37.678849+00:00",
"msg": "action_failed",
"meta": {
"trace_tag": "ACTION",
"rule_trigger_ts": [
1721301277619
],
"rule_id": "rule_9f32_duplication",
"reason": {
"message": "An error occurred when executing getDeviceToStorageGroup():root is not a legal path",
"code": 507
},
"clientid": "mock_client_15",
"action_info": {
"type": "iotdb",
"name": "IoTDB"
}
},
"level": "debug"
}
```

Server logs
```
iotdb-service | org.apache.iotdb.db.exception.sql.StatementAnalyzeException: An error occurred when executing getDeviceToStorageGroup():root is not a legal path
iotdb-service | at org.apache.iotdb.db.queryengine.plan.analyze.cache.partition.PartitionCache.getStorageGroupCacheResult(PartitionCache.java:369)
iotdb-service | at org.apache.iotdb.db.queryengine.plan.analyze.cache.partition.PartitionCache.getStorageGroupToDevice(PartitionCache.java:143)
iotdb-service | at org.apache.iotdb.db.queryengine.plan.analyze.ClusterPartitionFetcher.getOrCreateSchemaPartition(ClusterPartitionFetcher.java:134)
iotdb-service | at org.apache.iotdb.db.queryengine.plan.analyze.AnalyzeVisitor.visitInternalCreateTimeseries(AnalyzeVisitor.java:2422)
iotdb-service | at org.apache.iotdb.db.queryengine.plan.analyze.AnalyzeVisitor.visitInternalCreateTimeseries(AnalyzeVisitor.java:198)
iotdb-service | at org.apache.iotdb.db.queryengine.plan.statement.internal.InternalCreateTimeSeriesStatement.accept(InternalCreateTimeSeriesStatement.java:110)
iotdb-service | at org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor.process(StatementVisitor.java:135)
iotdb-service | at org.apache.iotdb.db.queryengine.plan.analyze.Analyzer.analyze(Analyzer.java:47)
iotdb-service | at org.apache.iotdb.db.queryengine.plan.planner.TreeModelPlanner.analyze(TreeModelPlanner.java:94)
iotdb-service | at org.apache.iotdb.db.queryengine.plan.execution.QueryExecution.analyze(QueryExecution.java:253)
iotdb-service | at org.apache.iotdb.db.queryengine.plan.execution.QueryExecution.(QueryExecution.java:121)
iotdb-service | at org.apache.iotdb.db.queryengine.plan.Coordinator.createQueryExecutionForTreeModel(Coordinator.java:211)
iotdb-service | at org.apache.iotdb.db.queryengine.plan.Coordinator.lambda$executeForTreeModel$0(Coordinator.java:175)
iotdb-service | at org.apache.iotdb.db.queryengine.plan.Coordinator.execution(Coordinator.java:127)
iotdb-service | at org.apache.iotdb.db.queryengine.plan.Coordinator.executeForTreeModel(Coordinator.java:170)
iotdb-service | at org.apache.iotdb.db.queryengine.plan.analyze.schema.AutoCreateSchemaExecutor.executeStatement(AutoCreateSchemaExecutor.java:86)
iotdb-service | at org.apache.iotdb.db.queryengine.plan.analyze.schema.AutoCreateSchemaExecutor.executeInternalCreateTimeseriesStatement(AutoCreateSchemaExecutor.java:508)
iotdb-service | at org.apache.iotdb.db.queryengine.plan.analyze.schema.AutoCreateSchemaExecutor.internalCreateTimeSeries(AutoCreateSchemaExecutor.java:472)
iotdb-service | at org.apache.iotdb.db.queryengine.plan.analyze.schema.AutoCreateSchemaExecutor.autoCreateTimeSeries(AutoCreateSchemaExecutor.java:130)
iotdb-service | at org.apache.iotdb.db.queryengine.plan.analyze.schema.NormalSchemaFetcher.processNormalTimeSeries(NormalSchemaFetcher.java:179)
iotdb-service | at org.apache.iotdb.db.queryengine.plan.analyze.schema.ClusterSchemaFetcher.fetchAndComputeSchemaWithAutoCreate(ClusterSchemaFetcher.java:177)
iotdb-service | at org.apache.iotdb.db.queryengine.plan.analyze.schema.SchemaValidator.validate(SchemaValidator.java:48)
iotdb-service | at org.apache.iotdb.db.queryengine.plan.analyze.AnalyzeVisitor.validateSchema(AnalyzeVisitor.java:2694)
iotdb-service | at org.apache.iotdb.db.queryengine.plan.analyze.AnalyzeVisitor.visitInsertTablet(AnalyzeVisitor.java:2513)
iotdb-service | at org.apache.iotdb.db.queryengine.plan.analyze.AnalyzeVisitor.visitInsertTablet(AnalyzeVisitor.java:198)
iotdb-service | at org.apache.iotdb.db.queryengine.plan.statement.crud.InsertTabletStatement.accept(InsertTabletStatement.java:137)
iotdb-service | at org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor.process(StatementVisitor.java:135)
iotdb-service | at org.apache.iotdb.db.queryengine.plan.analyze.Analyzer.analyze(Analyzer.java:47)
iotdb-service | at org.apache.iotdb.db.queryengine.plan.planner.TreeModelPlanner.analyze(TreeModelPlanner.java:94)
iotdb-service | at org.apache.iotdb.db.queryengine.plan.execution.QueryExecution.analyze(QueryExecution.java:253)
iotdb-service | at org.apache.iotdb.db.queryengine.plan.execution.QueryExecution.(QueryExecution.java:121)
iotdb-service | at org.apache.iotdb.db.queryengine.plan.Coordinator.createQueryExecutionForTreeModel(Coordinator.java:211)
iotdb-service | at org.apache.iotdb.db.queryengine.plan.Coordinator.lambda$executeForTreeModel$0(Coordinator.java:175)
iotdb-service | at org.apache.iotdb.db.queryengine.plan.Coordinator.execution(Coordinator.java:127)
iotdb-service | at org.apache.iotdb.db.queryengine.plan.Coordinator.executeForTreeModel(Coordinator.java:170)
iotdb-service | at org.apache.iotdb.db.protocol.rest.v2.impl.RestApiServiceImpl.insertTablet(RestApiServiceImpl.java:244)
iotdb-service | at org.apache.iotdb.db.protocol.rest.v2.RestApi.insertTablet(RestApi.java:115)
iotdb-service | at jdk.internal.reflect.GeneratedMethodAccessor14.invoke(Unknown Source)
iotdb-service | at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
iotdb-service | at java.base/java.lang.reflect.Method.invoke(Unknown Source)
iotdb-service | at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:52)
iotdb-service | at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:146)
iotdb-service | at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:189)
iotdb-service | at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:176)
iotdb-service | at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:93)
iotdb-service | at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:478)
iotdb-service | at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:400)
iotdb-service | at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:81)
iotdb-service | at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:256)
iotdb-service | at org.glassfish.jersey.internal.Errors$1.call(Errors.java:248)
iotdb-service | at org.glassfish.jersey.internal.Errors$1.call(Errors.java:244)
iotdb-service | at org.glassfish.jersey.internal.Errors.process(Errors.java:292)
iotdb-service | at org.glassfish.jersey.internal.Errors.process(Errors.java:274)
iotdb-service | at org.glassfish.jersey.internal.Errors.process(Errors.java:244)
iotdb-service | at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:265)
iotdb-service | at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:235)
iotdb-service | at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:684)
iotdb-service | at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:394)
iotdb-service | at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:346)
iotdb-service | at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:358)
iotdb-service | at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:311)
iotdb-service | at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:205)
iotdb-service | at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799)
iotdb-service | at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1656)
iotdb-service | at org.apache.iotdb.db.protocol.rest.filter.ApiOriginFilter.doFilter(ApiOriginFilter.java:37)
iotdb-service | at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)
iotdb-service | at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
iotdb-service | at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:552)
iotdb-service | at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
iotdb-service | at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440)
iotdb-service | at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
iotdb-service | at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505)
iotdb-service | at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
iotdb-service | at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355)
iotdb-service | at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
iotdb-service | at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
iotdb-service | at org.eclipse.jetty.server.Server.handle(Server.java:516)
iotdb-service | at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487)
iotdb-service | at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732)
iotdb-service | at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479)
iotdb-service | at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
iotdb-service | at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
iotdb-service | at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
iotdb-service | at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
iotdb-service | at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)
iotdb-service | at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)
iotdb-service | at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)
iotdb-service | at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
iotdb-service | at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409)
iotdb-service | at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
iotdb-service | at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
iotdb-service | at java.base/java.lang.Thread.run(Unknown Source)
```

### What did you expect to see?

Data inserted successfully

### What did you see instead?

An error happended: 2024-07-18 10:59:47,463 [qtp1038651236-54] WARN o.a.i.d.p.r.v.h.ExceptionHandler:84 - An error occurred when executing getDeviceToStorageGroup():root is not a legal path

### Anything else?

_No response_

### Are you willing to submit a PR?

- [ ] I'm willing to submit a PR!

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Hướng nghiên cứu

Tái hiện yêu cầu REST v2 insertTablet từ issue, sau đó lần theo lỗi từ RestApiServiceImpl.insertTablet qua ClusterPartitionFetcher.getOrCreateSchemaPartition đến PartitionCache.getStorageGroupCacheResult. Xác định lý do đường dẫn thiết bị bị từ chối là không hợp lệ và xác minh rằng cùng yêu cầu đó hoàn tất mà không gặp lỗi getDeviceToStorageGroup.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
java
Lĩnh vực
api, databases
Loại issue
Lỗi
Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức độ hoạt động
Đình trệ
Độ rõ ràng
Cần làm rõ
Mức phù hợp với người mới
35/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.