public DescTable4InformationSchemaResp descTable4InformationSchema() {
    databaseReadWriteLock.readLock().lock();
    try {
      return new DescTable4InformationSchemaResp(
          StatusUtils.OK,
          tableModelMTree.getAllDatabasePaths(true).stream()
              .collect(
                  Collectors.toMap(
                      databasePath -> PathUtils.unQualifyDatabaseName(databasePath.getFullPath()),
                      databasePath -> {
                        try {
                          return tableModelMTree
                              .getAllTablesUnderSpecificDatabase(databasePath)
                              .stream()
                              .map(
                                  pair -> {
                                    try {
                                      return tableModelMTree.getTableSchemaDetails(
                                          databasePath, pair.getLeft().getTableName());
                                    } catch (final MetadataException ignore) {
                                      // Table path must exist because the "getTableSchemaDetails()"
                                      // is called in databaseReadWriteLock.readLock().
                                    }
                                    return new Pair<TsTable, Set<String>>(null, null);
                                  })
                              .collect(
                                  Collectors.toMap(
                                      pair -> pair.getLeft().getTableName(),
                                      pair ->
                                          new TTableColumnInfo()
                                              .setTableInfo(
                                                  TsTableInternalRPCUtil.serializeSingleTsTable(
                                                      pair.getLeft()))
                                              .setPreDeletedColumns(pair.getRight())));
                        } catch (final MetadataException ignore) {
                          // Database path must exist because the "getAllDatabasePaths()" is called
                          // in databaseReadWriteLock.readLock().
                        }
                        return Collections.emptyMap();
                      })));
    } finally {
      databaseReadWriteLock.readLock().unlock();
    }
  }
Get the templateId set on paths covered by input path pattern. Resolve the input path patterns
into specified path pattern start with template set path. The result set is organized as
specified path pattern -> template id
iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfo.java