[
https://issues.apache.org/jira/browse/HBASE-669?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Clint Morgan updated HBASE-669:
-------------------------------
Attachment: hbase-669-v3.patch
This patch includes an attempt at integrating with the HLog
We add log messages from transaction operations START, WRITE, COMMIT, and ABORT.
transactional writes are written to the HLog as they are received (before the
commit decision has been made). When we actually decide to commit, we just
write the COMMIT message to the log, and the apply all of the BatchUpdates
*without* logging them.
To restore from the log we scan though, keeping track of all the WRITES for a
given transactionId, and when we see the COMMIT message we go ahead and apply
the writes. If we don't see a COMMIT or ABORT message, the we have to go to the
transaction log to see what happened to the transaction.
So this means that in order to restore a transaction, we need to look at all of
the log entries for the transaction. To ensure this, we need to fiddle with the
commitSequenceId that is written as we flush to the HLog. When we flush, we
need to use the minimum sequence Id from the START messages from all
transactions that are currently pending. That way when we go to recover we will
have all those pending transaction's log messages...
Adding this behavior was kinda messy because:
- HLog recover takes place in each HStore, but I need to recover at the region
level (because transactions cross stores). This means the HLog is being scanned
once for each HStore which seems ineffecient. I added a hook for the region to
do it's log recovery that I use in TransactionalRegion.
- HLog/HLogEdit/HLogKey are not easily subclassable.
- Log writing concerns are in HLog, while reading is in HStore.
- Log recovery took place in the constructor of HRegion. I put this in an
initialize() method for the HRegion so that HRegion's subclass constructors can
run before they process a log.
- startSequence fiddling as described above
I have a test to make sure that reading/writing from the log works, but to have
any confidence in this I need to test in the broader context where hregion is
driving the writes. So I'd like to bring up a cluster, do some operations, be
sure that some stuff was not flushed, bring down a regionserver hard, and bring
it back up such that it recovers from log. I did not see any such tests of the
current WAL....
Would really appreciate a review of this approach from someone more familiar
with logging/flushing process than I.
> MultiRegion transactions with Optimistic Concurrency Control
> ------------------------------------------------------------
>
> Key: HBASE-669
> URL: https://issues.apache.org/jira/browse/HBASE-669
> Project: Hadoop HBase
> Issue Type: New Feature
> Components: client, ipc, regionserver
> Reporter: Clint Morgan
> Attachments: hbase-669-v2.patch, hbase-669-v3.patch, hbase-669.patch
>
>
> We have a need for ACID transactions across tables. This issue is about
> adding transactions which span multiple regions. We do not envision many
> competing writes, and will be read-dominated in general. This makes
> Optimistic Concurrency Control (OCC) seem like the way to go.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.