Browse Source

Merge branch 'fix-2054' of https://git.openi.org.cn/OpenI/aiforge into fix-2054

pull/2201/head
zhoupzh 3 years ago
parent
commit
9e7f65dbd0
6 changed files with 43 additions and 22 deletions
  1. +8
    -0
      models/cloudbrain.go
  2. +5
    -5
      modules/auth/wechat/access_token.go
  3. +9
    -8
      modules/redis/redis_lock/lock.go
  4. +1
    -0
      options/locale/locale_en-US.ini
  5. +1
    -0
      options/locale/locale_zh-CN.ini
  6. +19
    -9
      routers/repo/setting.go

+ 8
- 0
models/cloudbrain.go View File

@@ -1566,6 +1566,14 @@ func GetCloudbrainCountByUserID(userID int64, jobType string) (int, error) {
return int(count), err return int(count), err
} }


func GetCloudbrainRunCountByRepoID(repoID int64) (int, error) {
count, err := x.In("status", JobWaiting, JobRunning, ModelArtsCreateQueue, ModelArtsCreating, ModelArtsStarting,
ModelArtsReadyToStart, ModelArtsResizing, ModelArtsStartQueuing, ModelArtsRunning, ModelArtsRestarting, ModelArtsTrainJobInit,
ModelArtsTrainJobImageCreating, ModelArtsTrainJobSubmitTrying, ModelArtsTrainJobWaiting, ModelArtsTrainJobRunning,
ModelArtsTrainJobScaling, ModelArtsTrainJobCheckInit, ModelArtsTrainJobCheckRunning, ModelArtsTrainJobCheckRunningCompleted).And("repo_id = ?", repoID).Count(new(Cloudbrain))
return int(count), err
}

func GetBenchmarkCountByUserID(userID int64) (int, error) { func GetBenchmarkCountByUserID(userID int64) (int, error) {
count, err := x.In("status", JobWaiting, JobRunning).And("(job_type = ? or job_type = ? or job_type = ?) and user_id = ? and type = ?", string(JobTypeBenchmark), string(JobTypeBrainScore), string(JobTypeSnn4imagenet), userID, TypeCloudBrainOne).Count(new(Cloudbrain)) count, err := x.In("status", JobWaiting, JobRunning).And("(job_type = ? or job_type = ? or job_type = ?) and user_id = ? and type = ?", string(JobTypeBenchmark), string(JobTypeBrainScore), string(JobTypeSnn4imagenet), userID, TypeCloudBrainOne).Count(new(Cloudbrain))
return int(count), err return int(count), err


+ 5
- 5
modules/auth/wechat/access_token.go View File

@@ -9,7 +9,7 @@ import (


const EMPTY_REDIS_VAL = "Nil" const EMPTY_REDIS_VAL = "Nil"


var accessTokenLock = redis_lock.NewDistributeLock()
var accessTokenLock = redis_lock.NewDistributeLock(redis_key.AccessTokenLockKey())


func GetWechatAccessToken() string { func GetWechatAccessToken() string {
token, _ := redis_client.Get(redis_key.WechatAccessTokenKey()) token, _ := redis_client.Get(redis_key.WechatAccessTokenKey())
@@ -28,15 +28,15 @@ func GetWechatAccessToken() string {
} }


func refreshAccessToken() { func refreshAccessToken() {
if ok := accessTokenLock.Lock(redis_key.AccessTokenLockKey(), 3*time.Second); ok {
defer accessTokenLock.UnLock(redis_key.AccessTokenLockKey())
if ok := accessTokenLock.Lock(3 * time.Second); ok {
defer accessTokenLock.UnLock()
callAccessTokenAndUpdateCache() callAccessTokenAndUpdateCache()
} }
} }


func refreshAndGetAccessToken() string { func refreshAndGetAccessToken() string {
if ok := accessTokenLock.LockWithWait(redis_key.AccessTokenLockKey(), 3*time.Second, 3*time.Second); ok {
defer accessTokenLock.UnLock(redis_key.AccessTokenLockKey())
if ok := accessTokenLock.LockWithWait(3*time.Second, 3*time.Second); ok {
defer accessTokenLock.UnLock()
token, _ := redis_client.Get(redis_key.WechatAccessTokenKey()) token, _ := redis_client.Get(redis_key.WechatAccessTokenKey())
if token != "" { if token != "" {
if token == EMPTY_REDIS_VAL { if token == EMPTY_REDIS_VAL {


+ 9
- 8
modules/redis/redis_lock/lock.go View File

@@ -6,22 +6,23 @@ import (
) )


type DistributeLock struct { type DistributeLock struct {
lockKey string
} }


func NewDistributeLock() *DistributeLock {
return &DistributeLock{}
func NewDistributeLock(lockKey string) *DistributeLock {
return &DistributeLock{lockKey: lockKey}
} }


func (lock *DistributeLock) Lock(lockKey string, expireTime time.Duration) bool {
isOk, _ := redis_client.Setnx(lockKey, "", expireTime)
func (lock *DistributeLock) Lock(expireTime time.Duration) bool {
isOk, _ := redis_client.Setnx(lock.lockKey, "", expireTime)
return isOk return isOk
} }


func (lock *DistributeLock) LockWithWait(lockKey string, expireTime time.Duration, waitTime time.Duration) bool {
func (lock *DistributeLock) LockWithWait(expireTime time.Duration, waitTime time.Duration) bool {
start := time.Now().Unix() * 1000 start := time.Now().Unix() * 1000
duration := waitTime.Milliseconds() duration := waitTime.Milliseconds()
for { for {
isOk, _ := redis_client.Setnx(lockKey, "", expireTime)
isOk, _ := redis_client.Setnx(lock.lockKey, "", expireTime)
if isOk { if isOk {
return true return true
} }
@@ -34,7 +35,7 @@ func (lock *DistributeLock) LockWithWait(lockKey string, expireTime time.Duratio
return false return false
} }


func (lock *DistributeLock) UnLock(lockKey string) error {
_, err := redis_client.Del(lockKey)
func (lock *DistributeLock) UnLock() error {
_, err := redis_client.Del(lock.lockKey)
return err return err
} }

+ 1
- 0
options/locale/locale_en-US.ini View File

@@ -817,6 +817,7 @@ settings.delete_notices_1= - This operation <strong>CANNOT</strong> be undone.
settings.delete_notices_2= - This operation will permanently delete the <strong>%s</strong> dataset. settings.delete_notices_2= - This operation will permanently delete the <strong>%s</strong> dataset.
settings.delete_notices_fork_1= - Forks of this dataset will become independent after deletion. settings.delete_notices_fork_1= - Forks of this dataset will become independent after deletion.
settings.deletion_success= The dataset has been deleted. settings.deletion_success= The dataset has been deleted.
settings.deletion_notice_cloudbrain = you need to stop the cloudbrain task under the project before remove the project!
task.machine_translation= machine translation task.machine_translation= machine translation
task.question_answering_system= question answering system task.question_answering_system= question answering system
task.information_retrieval= information retrieval task.information_retrieval= information retrieval


+ 1
- 0
options/locale/locale_zh-CN.ini View File

@@ -1931,6 +1931,7 @@ settings.delete_notices_1=- 此操作 <strong>不可以</strong> 被回滚。
settings.delete_notices_2=- 此操作将永久删除项目 <strong>%s</strong>,包括 Git 数据、 任务、评论、百科和协作者的操作权限。 settings.delete_notices_2=- 此操作将永久删除项目 <strong>%s</strong>,包括 Git 数据、 任务、评论、百科和协作者的操作权限。
settings.delete_notices_fork_1=- 在此项目删除后,它的派生项目将变成独立项目。 settings.delete_notices_fork_1=- 在此项目删除后,它的派生项目将变成独立项目。
settings.deletion_success=项目已被删除。 settings.deletion_success=项目已被删除。
settings.deletion_notice_cloudbrain=请先停止项目内正在运行的云脑任务,然后再删除项目。
settings.update_settings_success=项目设置已更新。 settings.update_settings_success=项目设置已更新。
settings.transfer_owner=新拥有者 settings.transfer_owner=新拥有者
settings.make_transfer=开始转移 settings.make_transfer=开始转移


+ 19
- 9
routers/repo/setting.go View File

@@ -6,7 +6,6 @@
package repo package repo


import ( import (
"code.gitea.io/gitea/modules/notification"
"errors" "errors"
"fmt" "fmt"
"io/ioutil" "io/ioutil"
@@ -15,6 +14,8 @@ import (
"strings" "strings"
"time" "time"


"code.gitea.io/gitea/modules/notification"

"code.gitea.io/gitea/models" "code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/auth" "code.gitea.io/gitea/modules/auth"
"code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/base"
@@ -477,16 +478,25 @@ func SettingsPost(ctx *context.Context, form auth.RepoSettingForm) {
ctx.RenderWithErr(ctx.Tr("form.enterred_invalid_repo_name"), tplSettingsOptions, nil) ctx.RenderWithErr(ctx.Tr("form.enterred_invalid_repo_name"), tplSettingsOptions, nil)
return return
} }
if err := repo_service.DeleteRepository(ctx.User, ctx.Repo.Repository); err != nil {
ctx.ServerError("DeleteRepository", err)
count, err := models.GetCloudbrainRunCountByRepoID(repo.ID)
if err != nil {
ctx.ServerError("GetCloudbrainCountByRepoID failed", err)
return return
}
log.Trace("Repository deleted: %s/%s", ctx.Repo.Owner.Name, repo.Name)
go StopJobsByRepoID(repo.ID)
} else {
if count >= 1 {
ctx.RenderWithErr(ctx.Tr("repo.settings.deletion_notice_cloudbrain"), tplSettingsOptions, nil)
return
}
if err := repo_service.DeleteRepository(ctx.User, ctx.Repo.Repository); err != nil {
ctx.ServerError("DeleteRepository", err)
return
}
log.Trace("Repository deleted: %s/%s", ctx.Repo.Owner.Name, repo.Name)
go StopJobsByRepoID(repo.ID)


ctx.Flash.Success(ctx.Tr("repo.settings.deletion_success"))
ctx.Redirect(ctx.Repo.Owner.DashboardLink())
ctx.Flash.Success(ctx.Tr("repo.settings.deletion_success"))
ctx.Redirect(ctx.Repo.Owner.DashboardLink())
}


case "delete-wiki": case "delete-wiki":
if !ctx.Repo.IsOwner() { if !ctx.Repo.IsOwner() {


Loading…
Cancel
Save