func (items RDBItems) watch(ctx context.Context, sess *r.Session, lock sync.RWMutex, table r.Term) { go pkg.Retry(time.Second*15, time.Minute, func() error { changes, err := table.Changes().Run(sess) if err != nil { pkg.LogError(errors.New(err)) return errors.New(err) } defer changes.Close() var update = map[string]*RdbSchema{} for changes.Next(&update) { newVal := update["new_val"] oldVal := update["old_val"] lock.Lock() if newVal == nil && oldVal != nil { delete(items, oldVal.ID) } else if newVal != nil && oldVal != nil { delete(items, oldVal.ID) items[newVal.ID] = newVal } else { items[newVal.ID] = newVal } lock.Unlock() } if changes.Err() != nil { err = errors.New(changes.Err()) pkg.LogError(err) return err } return nil }) }
func (items RDBItems) coldStart(sess *r.Session, lock sync.RWMutex, table r.Term) error { rows, err := table.Run(sess) if err != nil { return errors.New(err) } var item RdbSchema lock.Lock() defer lock.Unlock() for rows.Next(&item) { items[item.ID] = &item } if rows.Err() != nil { return errors.New(rows.Err()) } return nil }
func (s *FositeRehinkDBStore) publishInsert(table r.Term, id string, requester fosite.Requester) error { sess, err := json.Marshal(requester.GetSession()) if err != nil { pkg.LogError(errors.New(err)) return errors.New(err) } if _, err := table.Insert(&RdbSchema{ ID: id, RequestedAt: requester.GetRequestedAt(), Client: requester.GetClient().(*fosite.DefaultClient), Scopes: requester.GetScopes(), GrantedScopes: requester.GetGrantedScopes(), Form: requester.GetRequestForm(), Session: sess, }).RunWrite(s.Session); err != nil { return errors.New(err) } return nil }
func (s *FositeRehinkDBStore) publishDelete(table r.Term, id string) error { if _, err := table.Get(id).Delete().RunWrite(s.Session); err != nil { return errors.New(err) } return nil }