Github user photogamerun commented on the issue:

    https://github.com/apache/carbondata/pull/2178
  
    第二个问题 change 是这样的
    parseCarbonMetadata 这个方法我们发现存在多线程去调用
    
    当时抛了一个这样的异常信息
    tableCacheModel.carbonTable should not be null 
    后来通过分析代码发现并发模式下,tableCacheModel.carbonTable 
中的carbonTable 对象在没有获取前 
就已经被另外的线程获取并且读取了。 
所以存在读不到表信息的bug
    
    所以在之前实现中有这样一个问题parseCarbonMetadata 中
    
    carbonCache.get().put(table, cache);先调用,
    
    然后走了一个堆逻辑再对cache中的属性做赋值
    
    cache.tableInfo = wrapperTableInfo;
    cache.carbonTable = CarbonMetadata.getInstance()
                  
.getCarbonTable(cache.carbonTableIdentifier.getTableUniqueName());
    
    这样存在一个严重问题,在放入cache 
和属性赋值的这个时间段内。
    一旦有方法调用carbonCache.get().get(table); 
    比如这个方法
    
     public List<CarbonLocalInputSplit> getInputSplits2(CarbonTableCacheModel 
tableCacheModel,
                                                         Expression filters, 
Expression partitionFilters,
                                                         ConnectorSession 
session)  {
    private void removeTableFromCache(SchemaTableName table) {
    
    他们在同时时间都会调用 
carbonCache.get().get(table);继而拿取内部属性carbonTable 并调用å…
¶api 这个时间其实carbonTable 这个属性是null 调用å…
¶api一定会出问题
    
    
    
    
    
    



---

Reply via email to