[ 
https://issues.apache.org/jira/browse/TRAFODION-2946?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16497687#comment-16497687
 ] 

ASF GitHub Bot commented on TRAFODION-2946:
-------------------------------------------

Github user sandhyasun commented on a diff in the pull request:

    https://github.com/apache/trafodion/pull/1586#discussion_r192318454
  
    --- Diff: core/sql/runtimestats/sscpipc.cpp ---
    @@ -907,3 +910,53 @@ void 
SscpNewIncomingConnectionStream::processSecInvReq()
       request->decrRefCount();
     }
     
    +void SscpNewIncomingConnectionStream::processLobLockReq()
    +{
    +  IpcMessageObjVersion msgVer = getNextObjVersion();
    +
    +  ex_assert(msgVer <= currRtsStatsReqVersionNumber, "Up-rev message 
received.");
    +  NAHeap *statsHeap = NULL;
    +  LobLockRequest *request = new(getHeap())
    +    LobLockRequest(getHeap());
    +
    +  *this >> *request;
    +  ex_assert( !moreObjects(), "unknown object follows LobLockRequest.");
    +  SscpGlobals *sscpGlobals = getSscpGlobals();
    +  StatsGlobals *statsGlobals = sscpGlobals->getStatsGlobals();
    +  int error = statsGlobals->getStatsSemaphore(sscpGlobals->getSemId(),
    +                  sscpGlobals->myPin());
    +  statsHeap = statsGlobals->getStatsHeap();
    +  char *ll = new (statsHeap) char [LOB_LOCK_ID_SIZE];
    +  memcpy(ll,request->getLobLockId(),LOB_LOCK_ID_SIZE+1);
    +  SyncHashQueue *lobLockList = statsGlobals->getLobLocks();
    +  if (ll[0] == '+') // If it's a positive value, we are supposed to insert 
it.
    --- End diff --
    
    To address the scenario where 2 clients on different nodes check for a lock 
and being the process of setting it, instead of simply setting/inserting into 
the HashQueue, we should do an extra check for existence here before setting . 
If it's already there, some other process on another node may have propagated 
the same lockLockId first . So we should send a diagsArea back here to indicate 
the set  for this client/process failed. 


> LOB : Locking/transaction  support needed for LOB files for DDL and IUD 
> operations
> ----------------------------------------------------------------------------------
>
>                 Key: TRAFODION-2946
>                 URL: https://issues.apache.org/jira/browse/TRAFODION-2946
>             Project: Apache Trafodion
>          Issue Type: New Feature
>          Components: dtm, sql-general
>    Affects Versions: any
>            Reporter: Sandhya Sundaresan
>            Assignee: Sandhya Sundaresan
>            Priority: Major
>         Attachments: Locking issue for concurrent access of LOBs.docx
>
>
> Trafodion DTM needs to recognize LOB HDFS data files that contain the actual 
> critical data for a LOB column and treat them as part of the Trafodion object 
> that contains the LOB column. The Trafodion table itself contains the LOB 
> handle that can be used to derive the LOB data file name/location. 
> DDL operations performed on LOB tables today only work on the Trafodion 
> table. The dependent HDFS data files are not treated as part of the DDL 
> transaction. ANy parallel operations or errors during create/drop will leave 
> the table in an inconsistent state. 
>  
> DML operations on any LOB table only work on the LOB table and it's dependent 
> descriptor tables that are also Trafodion tables (contain offset/length 
> information in the HDFS data file  for each LOB column). But the HDFS data 
> file operation is not covered as part of the  transaction. So any IUD error 
> will leave the LOB table in  an inconsistent state . 



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to