Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remote/plugin support #353

Merged
merged 27 commits into from
Jun 26, 2019
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
1171e9d
wip: engine2 passing test with updates service
umputun Jun 8, 2019
29ffa57
restore all service coverage with new engine
umputun Jun 8, 2019
fa15fb1
make new engine primary, rename package
umputun Jun 9, 2019
1013b5d
Merge branch 'master' into remote
umputun Jun 9, 2019
a6a7448
remote client adjusted to new engine flavour
umputun Jun 9, 2019
625dbff
split remote to common protocol package and engine implemetation
umputun Jun 9, 2019
fa83c00
initial ver of remote server
umputun Jun 9, 2019
3f73a01
implement DeleteUser soft mode to allow mapping for blocked users #341
umputun Jun 10, 2019
05a3871
remote server covered with tests
umputun Jun 10, 2019
465571a
fix remote client tests with id
umputun Jun 10, 2019
0722e64
switch list flag to struct param
umputun Jun 11, 2019
a098d17
Merge remote-tracking branch 'remotes/origin/master' into remote
umputun Jun 18, 2019
2ed7068
error responses of json api with json, time out on remote server close
umputun Jun 18, 2019
000e19a
Merge remote-tracking branch 'remotes/origin/master' into remote
umputun Jun 19, 2019
ab73d82
change remote interface to struct requests
umputun Jun 20, 2019
21cd81e
add remote implementation of admin store
umputun Jun 21, 2019
247e1e2
fix empty (no args) remote calls
umputun Jun 21, 2019
e83a4a2
support remote server group handler
umputun Jun 24, 2019
2b7ddcb
adjust remote tests, remove legacy mongo tests
umputun Jun 25, 2019
db59773
add remote selection to store and admin
umputun Jun 25, 2019
41e95f9
fix recreation of bdb in delete
umputun Jun 25, 2019
4810b01
larger limit for remote srv throttler
umputun Jun 25, 2019
8309dd8
clear mongo leftovers
umputun Jun 25, 2019
dc5e27a
clean drone build
umputun Jun 25, 2019
4727e37
lint: test warnings
umputun Jun 26, 2019
be86a72
lint: more test warns
umputun Jun 26, 2019
ea5fbca
add test for app with remote plugins
umputun Jun 26, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
switch list flag to struct param
  • Loading branch information
umputun committed Jun 11, 2019
commit 0722e64cd27442d327074ba684b3746b6342a88d
10 changes: 5 additions & 5 deletions backend/app/store/engine/bolt.go
Original file line number Diff line number Diff line change
Expand Up @@ -322,14 +322,14 @@ func (b *BoltDB) Info(req InfoRequest) ([]store.PostInfo, error) {

// ListFlags get list of flagged keys, like blocked & verified user
// works for full locator (post flags) or with userID
func (b *BoltDB) ListFlags(siteID string, flag Flag) (res []interface{}, err error) {
func (b *BoltDB) ListFlags(req FlagRequest) (res []interface{}, err error) {

bdb, e := b.db(siteID)
bdb, e := b.db(req.Locator.SiteID)
if e != nil {
return nil, e
}

switch flag {
switch req.Flag {
case Verified:
err = bdb.View(func(tx *bolt.Tx) error {
usersBkt := tx.Bucket([]byte(verifiedBucketName))
Expand All @@ -351,7 +351,7 @@ func (b *BoltDB) ListFlags(siteID string, flag Flag) (res []interface{}, err err
if time.Now().Before(ts) {
// get user name from comment user section
userName := ""
req := FindRequest{Locator: store.Locator{SiteID: siteID}, UserID: string(k), Limit: 1}
req := FindRequest{Locator: store.Locator{SiteID: req.Locator.SiteID}, UserID: string(k), Limit: 1}
userComments, errUser := b.Find(req)
if errUser == nil && len(userComments) > 0 {
userName = userComments[0].User.Name
Expand All @@ -363,7 +363,7 @@ func (b *BoltDB) ListFlags(siteID string, flag Flag) (res []interface{}, err err
})
return res, err
}
return nil, errors.Errorf("flag %s not listable", flag)
return nil, errors.Errorf("flag %s not listable", req.Flag)
}

// Delete post(s) by id or by userID
Expand Down
12 changes: 6 additions & 6 deletions backend/app/store/engine/bolt_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -530,17 +530,17 @@ func TestBolt_FlagListVerified(t *testing.T) {
return err
}

ids, err := b.ListFlags("radio-t", Verified)
ids, err := b.ListFlags(FlagRequest{Flag: Verified, Locator: store.Locator{SiteID: "radio-t"}})
assert.NoError(t, err)
assert.Equal(t, []string{}, toIDs(ids), "verified list empty")

assert.NoError(t, setVerified("radio-t", "u1", FlagTrue))
assert.NoError(t, setVerified("radio-t", "u2", FlagTrue))
ids, err = b.ListFlags("radio-t", Verified)
ids, err = b.ListFlags(FlagRequest{Flag: Verified, Locator: store.Locator{SiteID: "radio-t"}})
assert.NoError(t, err)
assert.Equal(t, []string{"u1", "u2"}, toIDs(ids), "verified 2 ids")

_, err = b.ListFlags("radio-t-bad", Verified)
_, err = b.ListFlags(FlagRequest{Flag: Verified, Locator: store.Locator{SiteID: "radio-t-bad"}})
assert.Error(t, err, "site \"radio-t-bad\" not found", "fail on wrong site")
}

Expand Down Expand Up @@ -568,7 +568,7 @@ func TestBolt_FlagListBlocked(t *testing.T) {
assert.NoError(t, setBlocked("radio-t", "user2", FlagTrue, 50*time.Millisecond))
assert.NoError(t, setBlocked("radio-t", "user3", FlagFalse, 0))

vv, err := b.ListFlags("radio-t", Blocked)
vv, err := b.ListFlags(FlagRequest{Flag: Blocked, Locator: store.Locator{SiteID: "radio-t"}})
assert.NoError(t, err)

blockedList := toBlocked(vv)
Expand All @@ -579,13 +579,13 @@ func TestBolt_FlagListBlocked(t *testing.T) {

// check block expiration
time.Sleep(50 * time.Millisecond)
vv, err = b.ListFlags("radio-t", Blocked)
vv, err = b.ListFlags(FlagRequest{Flag: Blocked, Locator: store.Locator{SiteID: "radio-t"}})
assert.NoError(t, err)
blockedList = toBlocked(vv)
assert.Equal(t, 1, len(blockedList))
assert.Equal(t, "user1", blockedList[0].ID)

_, err = b.ListFlags("bad", Blocked)
_, err = b.ListFlags(FlagRequest{Flag: Blocked, Locator: store.Locator{SiteID: "bad"}})
assert.EqualError(t, err, `site "bad" not found`)

}
Expand Down
2 changes: 1 addition & 1 deletion backend/app/store/engine/engine.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ type Interface interface {
Count(req FindRequest) (int, error) // get count for post or user
Delete(req DeleteRequest) error // delete post(s) by id or by userID
Flag(req FlagRequest) (bool, error) // set and get flags
ListFlags(siteID string, flag Flag) ([]interface{}, error) // get list of flagged keys, like blocked & verified user
ListFlags(req FlagRequest) ([]interface{}, error) // get list of flagged keys, like blocked & verified user
Close() error // close storage engine
}

Expand Down
14 changes: 7 additions & 7 deletions backend/app/store/engine/engine_mock.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions backend/app/store/engine/remote.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,8 @@ func (r *Remote) Flag(req FlagRequest) (status bool, err error) {
}

// ListFlags get list of flagged keys, like blocked & verified user
func (r *Remote) ListFlags(siteID string, flag Flag) (list []interface{}, err error) {
resp, err := r.Call("list_flags", siteID, flag)
func (r *Remote) ListFlags(req FlagRequest) (list []interface{}, err error) {
resp, err := r.Call("list_flags", req)
if err != nil {
return nil, err
}
Expand Down
4 changes: 2 additions & 2 deletions backend/app/store/engine/remote_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -125,11 +125,11 @@ func TestClient_Flag(t *testing.T) {
}

func TestClient_ListFlag(t *testing.T) {
ts := testServer(t, `{"method":"list_flags","params":["site_id","blocked"],"id":1}`,
ts := testServer(t, `{"method":"list_flags","params":{"flag":"blocked","locator":{"site":"site_id","url":""}},"id":1}`,
`{"result":[{"ID":"id1"},{"ID":"id2"}]}`)
defer ts.Close()
c := Remote{Client: remote.Client{API: ts.URL, Client: http.Client{}}}
res, err := c.ListFlags("site_id", Blocked)
res, err := c.ListFlags(FlagRequest{Locator: store.Locator{SiteID: "site_id"}, Flag: Blocked})
assert.NoError(t, err)
assert.Equal(t, []interface{}{map[string]interface{}{"ID": "id1"}, map[string]interface{}{"ID": "id2"}}, res)
}
Expand Down
4 changes: 2 additions & 2 deletions backend/app/store/service/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -523,7 +523,7 @@ func (s *DataStore) SetBlock(siteID string, userID string, status bool, ttl time

// Blocked returns list with all blocked users
func (s *DataStore) Blocked(siteID string) (res []store.BlockedUser, err error) {
blocked, e := s.Engine.ListFlags(siteID, engine.Blocked)
blocked, e := s.Engine.ListFlags(engine.FlagRequest{Locator: store.Locator{SiteID: siteID}, Flag: engine.Blocked})
if e != nil {
return nil, errors.Wrapf(err, "can't get list of blocked users for %s", siteID)
}
Expand Down Expand Up @@ -606,7 +606,7 @@ func (s *DataStore) Metas(siteID string) (umetas []UserMetaData, pmetas []PostMe
}

// process verified users
verified, err := s.Engine.ListFlags(siteID, engine.Verified)
verified, err := s.Engine.ListFlags(engine.FlagRequest{Locator: store.Locator{SiteID: siteID}, Flag: engine.Verified})
if err != nil {
return nil, nil, errors.Wrapf(err, "can't get list of verified users for %s", siteID)
}
Expand Down