123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- package dao
- import (
- "context"
- "encoding/json"
- "fmt"
- "time"
- "go-common/app/tool/saga/conf"
- "go-common/library/log"
- "github.com/pkg/errors"
- "github.com/tsuna/gohbase/hrpc"
- )
- const (
- _sagaTable = "ep:saga"
- _ColFamily = "saga_auth"
- _cSagaPathOwner = "path_owner"
- _cSagaPathReviewer = "path_reviewer"
- )
- // sagaAuthKey ...
- func sagaAuthKey(projID int, branch string, path string) string {
- return fmt.Sprintf("saga_auth_%d_%s_%s", projID, branch, path)
- }
- // SetPathAuthH ...
- func (d *Dao) SetPathAuthH(c context.Context, projID int, branch string, path string, owners []string, reviewers []string) (err error) {
- var (
- key = sagaAuthKey(projID, branch, path)
- auth = make(map[string][]byte)
- bOwner []byte
- bReviewer []byte
- )
- if bOwner, err = json.Marshal(owners); err != nil {
- return errors.WithStack(err)
- }
- if bReviewer, err = json.Marshal(reviewers); err != nil {
- return errors.WithStack(err)
- }
- auth[_cSagaPathOwner] = bOwner
- auth[_cSagaPathReviewer] = bReviewer
- values := map[string]map[string][]byte{_ColFamily: auth}
- ctx, cancel := context.WithTimeout(c, time.Duration(conf.Conf.HBase.WriteTimeout))
- defer cancel()
- if _, err = d.hbase.PutStr(ctx, _sagaTable, key, values); err != nil {
- return errors.Wrapf(err, "hbase PutStr error (key: %s values: %v)", key, values)
- }
- return
- }
- // PathAuthH ...
- func (d *Dao) PathAuthH(ctx context.Context, projID int, branch string, path string) (owners []string, reviewers []string, err error) {
- var (
- key = sagaAuthKey(projID, branch, path)
- result *hrpc.Result
- )
- ctx, cancel := context.WithTimeout(ctx, time.Duration(conf.Conf.HBase.ReadTimeout))
- defer cancel()
- if result, err = d.hbase.GetStr(ctx, _sagaTable, key); err != nil {
- err = errors.Wrapf(err, "hbase GetStr error (key: %s)", key)
- return
- }
- for _, c := range result.Cells {
- switch string(c.Qualifier) {
- case _cSagaPathOwner:
- if err = json.Unmarshal(c.Value, &owners); err != nil {
- err = errors.WithStack(err)
- return
- }
- log.Info("Get key: (%s), owners Info: (%+v)", key, owners)
- case _cSagaPathReviewer:
- if err = json.Unmarshal(c.Value, &reviewers); err != nil {
- err = errors.WithStack(err)
- return
- }
- log.Info("Get key: (%s), reviewers Info: (%+v)", key, reviewers)
- }
- }
- return
- }
- // DeletePathAuthH ...
- func (d *Dao) DeletePathAuthH(c context.Context, projID int, branch string, path string) (err error) {
- key := sagaAuthKey(projID, branch, path)
- ctx, cancel := context.WithTimeout(c, time.Duration(conf.Conf.HBase.WriteTimeout))
- defer cancel()
- auth := make(map[string][]byte)
- auth[_cSagaPathOwner] = nil
- auth[_cSagaPathReviewer] = nil
- values := map[string]map[string][]byte{_ColFamily: auth}
- if _, err = d.hbase.Delete(ctx, _sagaTable, key, values); err != nil {
- err = errors.Wrapf(err, "hbase delete error (key: %s)", key)
- }
- return
- }
|