fix(backup): restore db and tests

This commit is contained in:
henry.chen
2023-07-12 17:26:44 +08:00
parent 9a1b4db61a
commit f28d0e77e0
6 changed files with 64 additions and 55 deletions

View File

@@ -326,6 +326,11 @@ func (db *mongodb) LoadArticleList(ctx context.Context, search SearchArticles) (
return articles, int(count), nil
}
// DropDatabase drop eiblog database
func (db *mongodb) DropDatabase(ctx context.Context) error {
return db.Database(mongoDBName).Drop(ctx)
}
// counter counter
type counter struct {
Name string

View File

@@ -13,7 +13,7 @@ var (
store Store
acct *model.Account
blogger *model.Blogger
series *model.Series
series *model.Serie
article *model.Article
)
@@ -25,12 +25,12 @@ func init() {
}
// account
acct = &model.Account{
Username: "deepzz",
Password: "deepzz",
Email: "deepzz@example.com",
PhoneN: "12345678900",
Address: "address",
CreateTime: time.Now(),
Username: "deepzz",
Password: "deepzz",
Email: "deepzz@example.com",
PhoneN: "12345678900",
Address: "address",
CreatedAt: time.Now(),
}
// blogger
blogger = &model.Blogger{
@@ -41,11 +41,11 @@ func init() {
Copyright: "Copyright",
}
// series
series = &model.Series{
Slug: "slug",
Name: "series name",
Desc: "series desc",
CreateTime: time.Now(),
series = &model.Serie{
Slug: "slug",
Name: "series name",
Desc: "series desc",
CreatedAt: time.Now(),
}
// article
article = &model.Article{
@@ -55,21 +55,20 @@ func init() {
Count: 0,
Content: "### count",
SerieID: 0,
Tags: "",
Tags: nil,
IsDraft: false,
UpdateTime: time.Now(),
CreateTime: time.Now(),
UpdatedAt: time.Now(),
CreatedAt: time.Now(),
}
}
func TestLoadInsertAccount(t *testing.T) {
acct2, err := store.LoadInsertAccount(context.Background(), acct)
ok, err := store.LoadInsertAccount(context.Background(), acct)
if err != nil {
t.Fatal(err)
}
t.Log(acct2)
t.Log(acct == acct2)
t.Log(ok)
}
func TestUpdateAccount(t *testing.T) {
@@ -86,12 +85,11 @@ func TestUpdateAccount(t *testing.T) {
}
func TestLoadInsertBlogger(t *testing.T) {
blogger2, err := store.LoadInsertBlogger(context.Background(), blogger)
ok, err := store.LoadInsertBlogger(context.Background(), blogger)
if err != nil {
t.Fatal(err)
}
t.Log(blogger2)
t.Log(blogger == blogger2)
t.Log(ok)
}
func TestUpdateBlogger(t *testing.T) {
@@ -104,21 +102,21 @@ func TestUpdateBlogger(t *testing.T) {
}
func TestInsertSeries(t *testing.T) {
err := store.InsertSeries(context.Background(), series)
err := store.InsertSerie(context.Background(), series)
if err != nil {
t.Fatal(err)
}
}
func TestRemoveSeries(t *testing.T) {
err := store.RemoveSeries(context.Background(), 1)
err := store.RemoveSerie(context.Background(), 1)
if err != nil {
t.Fatal(err)
}
}
func TestUpdateSeries(t *testing.T) {
err := store.UpdateSeries(context.Background(), 2, map[string]interface{}{
err := store.UpdateSerie(context.Background(), 2, map[string]interface{}{
"desc": "update desc",
})
if err != nil {
@@ -127,7 +125,7 @@ func TestUpdateSeries(t *testing.T) {
}
func TestLoadAllSeries(t *testing.T) {
series, err := store.LoadAllSeries(context.Background())
series, err := store.LoadAllSerie(context.Background())
if err != nil {
t.Fatal(err)
}
@@ -136,7 +134,7 @@ func TestLoadAllSeries(t *testing.T) {
func TestInsertArticle(t *testing.T) {
article.ID = 12
err := store.InsertArticle(context.Background(), article)
err := store.InsertArticle(context.Background(), article, 10)
if err != nil {
t.Fatal(err)
}
@@ -150,14 +148,14 @@ func TestRemoveArticle(t *testing.T) {
}
func TestDeleteArticle(t *testing.T) {
err := store.DeleteArticle(context.Background(), 12)
err := store.RemoveArticle(context.Background(), 12)
if err != nil {
t.Fatal(err)
}
}
func TestCleanArticles(t *testing.T) {
err := store.CleanArticles(context.Background())
err := store.CleanArticles(context.Background(), time.Now())
if err != nil {
t.Fatal(err)
}
@@ -173,33 +171,13 @@ func TestUpdateArticle(t *testing.T) {
}
}
func TestRecoverArticle(t *testing.T) {
err := store.RecoverArticle(context.Background(), 12)
if err != nil {
t.Fatal(err)
}
}
func TestLoadAllArticle(t *testing.T) {
articles, err := store.LoadAllArticle(context.Background())
_, total, err := store.LoadArticleList(context.Background(), SearchArticles{
Page: 1,
Limit: 1000,
})
if err != nil {
t.Fatal(err)
}
t.Logf("load all articles: %d", len(articles))
}
func TestLoadTrashArticles(t *testing.T) {
articles, err := store.LoadTrashArticles(context.Background())
if err != nil {
t.Fatal(err)
}
t.Logf("load trash articles: %d", len(articles))
}
func TestLoadDraftArticles(t *testing.T) {
articles, err := store.LoadDraftArticles(context.Background())
if err != nil {
t.Fatal(err)
}
t.Logf("load draft articles: %d", len(articles))
t.Logf("load all articles: %d", total)
}

View File

@@ -3,6 +3,7 @@ package store
import (
"context"
"errors"
"time"
"github.com/eiblog/eiblog/pkg/model"
@@ -129,7 +130,7 @@ func (db *rdbms) InsertArticle(ctx context.Context, article *model.Article, star
if id < startID {
id = startID
} else {
id += 1
id++
}
article.ID = id
}
@@ -190,6 +191,11 @@ func (db *rdbms) LoadArticleList(ctx context.Context, search SearchArticles) (mo
return articles, int(count), err
}
// DropDatabase drop eiblog database
func (db *rdbms) DropDatabase(ctx context.Context) error {
return errors.New("can not drop eiblog database in rdbms")
}
// register store
func init() {
Register("mysql", &rdbms{})

View File

@@ -64,6 +64,9 @@ type Store interface {
LoadArticle(ctx context.Context, id int) (*model.Article, error)
// LoadArticleList 查找文章列表
LoadArticleList(ctx context.Context, search SearchArticles) (model.SortedArticles, int, error)
// 危险操作
DropDatabase(ctx context.Context) error
}
// Driver 存储驱动

View File

@@ -11,6 +11,7 @@ import (
"path/filepath"
"time"
"github.com/eiblog/eiblog/pkg/cache/store"
"github.com/eiblog/eiblog/pkg/config"
"github.com/eiblog/eiblog/pkg/internal"
)
@@ -97,6 +98,7 @@ func backupFromMongoDB(now time.Time) error {
}
func restoreToMongoDB() error {
// backup file
params := internal.ContentParams{
Prefix: "blog/",
@@ -115,6 +117,16 @@ func restoreToMongoDB() error {
ctx, cancel := context.WithTimeout(context.Background(), time.Minute*20)
defer cancel()
// drop database
store, err := store.NewStore(config.Conf.Database.Driver,
config.Conf.Database.Source)
if err != nil {
return err
}
err = store.DropDatabase(ctx)
if err != nil {
return err
}
// unarchive
arg := fmt.Sprintf("tar xzf /tmp/eiblog.tar.gz -C /tmp")
cmd := exec.CommandContext(ctx, "sh", "-c", arg)
@@ -123,7 +135,11 @@ func restoreToMongoDB() error {
return err
}
// restore
arg = fmt.Sprintf("mongorestore -h %s -d eiblog /tmp/eiblog", config.Conf.Database.Source)
u, err := url.Parse(config.Conf.Database.Source)
if err != nil {
return err
}
arg = fmt.Sprintf("mongorestore -h %s -d eiblog /tmp/eiblog", u.Host)
cmd = exec.CommandContext(ctx, "sh", "-c", arg)
return cmd.Run()
}

View File

@@ -29,6 +29,7 @@ func Start(restore bool) (err error) {
if err != nil {
return err
}
logrus.Info("timer: RestoreData success")
}
// parse duration
interval, err := ParseDuration(config.Conf.BackupApp.Interval)