12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- package themis
-
- import (
- "bytes"
- "encoding/binary"
-
- "github.com/juju/errors"
- "github.com/ngaut/log"
- "github.com/pingcap/go-hbase"
- "github.com/pingcap/go-hbase/iohelper"
- )
-
- type themisSecondaryLock struct {
- *themisLock
- primaryCoordinate *hbase.ColumnCoordinate
- }
-
- func newThemisSecondaryLock() *themisSecondaryLock {
- return &themisSecondaryLock{
- themisLock: &themisLock{
- clientAddr: "null",
- },
- primaryCoordinate: &hbase.ColumnCoordinate{},
- }
- }
-
- func (l *themisSecondaryLock) Primary() Lock {
- pl := newThemisPrimaryLock()
- pl.coordinate = l.primaryCoordinate
- pl.ts = l.ts
- pl.clientAddr = l.clientAddr
- pl.addSecondary(l.coordinate, l.typ)
- return pl
- }
-
- func (l *themisSecondaryLock) Secondaries() []Lock {
- return nil
- }
-
- func (l *themisSecondaryLock) Role() LockRole {
- return RoleSecondary
- }
-
- func (l *themisSecondaryLock) Encode() []byte {
- buf := bytes.NewBuffer(nil)
- binary.Write(buf, binary.BigEndian, uint8(0))
- l.themisLock.write(buf)
- // TODO: handle error, now just log
- if err := l.primaryCoordinate.Write(buf); err != nil {
- log.Warnf("write error, primary coordinate: %s, buf: %s, err: %v", l, buf, err)
- }
- return buf.Bytes()
- }
-
- func (l *themisSecondaryLock) parse(r iohelper.ByteMultiReader) error {
- l.themisLock.parse(r)
- primary := &hbase.ColumnCoordinate{}
- err := primary.ParseField(r)
- if err != nil {
- return errors.Trace(err)
- }
- l.primaryCoordinate = primary
- return nil
- }
|