Details

    • Type: Bug Bug
    • Status: Resolved
    • Priority: Blocker Blocker
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 0.90.0
    • Component/s: None
    • Labels:
      None
    • Hadoop Flags:
      Reviewed

      Description

      The flow during a HRegionServer.put() seems to be the following. [For now, let's just consider single row Put containing edits to multiple column families/columns.

      HRegionServer.put() does a:

      HRegion.put();
      syncWal() (the HDFS sync call). /* this is assuming we have HDFS-200 */

      HRegion.put() does a:
      for each column family

      { HLog.append(all edits to the colum family); write all edits to Memstore; }

      HLog.append() does a :
      foreach edit in a single column family

      { doWrite() }

      doWrite() does a:
      this.writer.append().

      There seems to be two related issues here that could result in inconsistencies.

      Issue #1: A put() does a bunch of HLog.append() calls. These in turn do a bunch of "write" calls on the underlying DFS stream. If we crash after having written out some append's to DFS, recovery will run and apply a partial transaction to memstore.

      Issue #2: The updates to memstore should happen after the sync rather than before. Otherwise, there is the danger that the write to DFS (sync) fails for some reason & we return an error to the client, but we have already taken edits to the memstore. So subsequent reads will serve uncommitted data.

      1. rowLevelAtomicity_2283_v1.patch
        31 kB
        Kannan Muthukkaruppan
      2. rowLevelAtomicity_2283_v2.patch
        36 kB
        Kannan Muthukkaruppan
      3. rowLevelAtomicity_2283_v3.patch
        37 kB
        Kannan Muthukkaruppan

        Issue Links

          Activity

          No work has yet been logged on this issue.

            People

            • Assignee:
              Kannan Muthukkaruppan
              Reporter:
              Kannan Muthukkaruppan
            • Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development