Skip to content

Commit cabc774

Browse files
committed
fix-lock
1 parent 64c07f8 commit cabc774

3 files changed

Lines changed: 14 additions & 9 deletions

File tree

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/load/LoadTsFileAnalyzer.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,6 @@
5252
import org.apache.iotdb.db.queryengine.plan.Coordinator;
5353
import org.apache.iotdb.db.queryengine.plan.analyze.Analysis;
5454
import org.apache.iotdb.db.queryengine.plan.analyze.IPartitionFetcher;
55-
import org.apache.iotdb.db.queryengine.plan.analyze.lock.DataNodeSchemaLockManager;
56-
import org.apache.iotdb.db.queryengine.plan.analyze.lock.SchemaLockType;
5755
import org.apache.iotdb.db.queryengine.plan.analyze.schema.ISchemaFetcher;
5856
import org.apache.iotdb.db.queryengine.plan.analyze.schema.SchemaValidator;
5957
import org.apache.iotdb.db.queryengine.plan.execution.ExecutionResult;
@@ -406,7 +404,7 @@ private boolean handleSingleMiniFile(final int i) throws FileNotFoundException {
406404
final long startTime = System.nanoTime();
407405
try {
408406
final LoadTsFileDataTypeConverter loadTsFileDataTypeConverter =
409-
new LoadTsFileDataTypeConverter(isGeneratedByPipe);
407+
new LoadTsFileDataTypeConverter(context, isGeneratedByPipe);
410408

411409
final TSStatus status =
412410
loadTsFileDataTypeConverter
@@ -531,14 +529,11 @@ private Analysis executeTabletConversionOnException(
531529
}
532530

533531
final LoadTsFileDataTypeConverter loadTsFileDataTypeConverter =
534-
new LoadTsFileDataTypeConverter(isGeneratedByPipe);
535-
DataNodeSchemaLockManager.getInstance().releaseReadLock(context);
532+
new LoadTsFileDataTypeConverter(context, isGeneratedByPipe);
536533
final TSStatus status =
537534
loadTsFileStatement.isConvertOnTypeMismatch()
538535
? loadTsFileDataTypeConverter.convertForTreeModel(loadTsFileStatement).orElse(null)
539536
: null;
540-
DataNodeSchemaLockManager.getInstance()
541-
.takeReadLock(context, SchemaLockType.VALIDATE_VS_DELETION);
542537

543538
if (status == null) {
544539
LOGGER.warn(

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/scheduler/load/LoadTsFileScheduler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -536,7 +536,7 @@ private boolean loadLocally(LoadSingleTsFileNode node) throws IoTDBException {
536536

537537
private void convertFailedTsFilesToTabletsAndRetry() {
538538
final LoadTsFileDataTypeConverter loadTsFileDataTypeConverter =
539-
new LoadTsFileDataTypeConverter(isGeneratedByPipe);
539+
new LoadTsFileDataTypeConverter(queryContext, isGeneratedByPipe);
540540

541541
final Iterator<Integer> iterator = failedTsFileNodeIndexes.listIterator();
542542
while (iterator.hasNext()) {

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadTsFileDataTypeConverter.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,11 @@
2222
import org.apache.iotdb.common.rpc.thrift.TSStatus;
2323
import org.apache.iotdb.db.conf.IoTDBDescriptor;
2424
import org.apache.iotdb.db.protocol.session.SessionManager;
25+
import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
2526
import org.apache.iotdb.db.queryengine.plan.Coordinator;
2627
import org.apache.iotdb.db.queryengine.plan.analyze.ClusterPartitionFetcher;
28+
import org.apache.iotdb.db.queryengine.plan.analyze.lock.DataNodeSchemaLockManager;
29+
import org.apache.iotdb.db.queryengine.plan.analyze.lock.SchemaLockType;
2730
import org.apache.iotdb.db.queryengine.plan.analyze.schema.ClusterSchemaFetcher;
2831
import org.apache.iotdb.db.queryengine.plan.statement.Statement;
2932
import org.apache.iotdb.db.queryengine.plan.statement.crud.LoadTsFileStatement;
@@ -47,23 +50,30 @@ public class LoadTsFileDataTypeConverter {
4750
STATEMENT_EXCEPTION_VISITOR = new LoadConvertedInsertTabletStatementExceptionVisitor();
4851

4952
private final boolean isGeneratedByPipe;
53+
private final MPPQueryContext context;
5054

5155
private final LoadTreeStatementDataTypeConvertExecutionVisitor
5256
treeStatementDataTypeConvertExecutionVisitor =
5357
new LoadTreeStatementDataTypeConvertExecutionVisitor(this::executeForTreeModel);
5458

55-
public LoadTsFileDataTypeConverter(final boolean isGeneratedByPipe) {
59+
public LoadTsFileDataTypeConverter(
60+
final MPPQueryContext context, final boolean isGeneratedByPipe) {
61+
this.context = context;
5662
this.isGeneratedByPipe = isGeneratedByPipe;
5763
}
5864

5965
public Optional<TSStatus> convertForTreeModel(final LoadTsFileStatement loadTsFileTreeStatement) {
66+
DataNodeSchemaLockManager.getInstance().releaseReadLock(context);
6067
try {
6168
return loadTsFileTreeStatement.accept(treeStatementDataTypeConvertExecutionVisitor, null);
6269
} catch (Exception e) {
6370
LOGGER.warn(
6471
"Failed to convert data types for tree model statement {}.", loadTsFileTreeStatement, e);
6572
return Optional.of(
6673
new TSStatus(TSStatusCode.LOAD_FILE_ERROR.getStatusCode()).setMessage(e.getMessage()));
74+
} finally {
75+
DataNodeSchemaLockManager.getInstance()
76+
.takeReadLock(context, SchemaLockType.VALIDATE_VS_DELETION);
6777
}
6878
}
6979

0 commit comments

Comments
 (0)