1
0
mirror of https://github.com/haiwen/seafile-server.git synced 2025-09-24 20:48:01 +00:00

Get accessible repo list return 500 when db error exists (#423)

* Get accessible repo list return 500 when db error exists

* CI should use 7.1 branch
This commit is contained in:
feiniks
2020-11-28 14:40:27 +08:00
committed by GitHub
parent 063bf731c7
commit 4a0eb5431c
7 changed files with 53 additions and 14 deletions

View File

@@ -152,7 +152,7 @@ class CcnetServer(Project):
super(CcnetServer, self).__init__('ccnet-server') super(CcnetServer, self).__init__('ccnet-server')
def branch(self): def branch(self):
return 'master' return '7.1'
class SeafileServer(Project): class SeafileServer(Project):

View File

@@ -1190,7 +1190,7 @@ seafile_list_owned_repos (const char *email, int ret_corrupted,
GList *repos, *ptr; GList *repos, *ptr;
repos = seaf_repo_manager_get_repos_by_owner (seaf->repo_mgr, email, ret_corrupted, repos = seaf_repo_manager_get_repos_by_owner (seaf->repo_mgr, email, ret_corrupted,
start, limit); start, limit, NULL);
ret = convert_repo_list (repos); ret = convert_repo_list (repos);
/* for (ptr = ret; ptr; ptr = ptr->next) { */ /* for (ptr = ret; ptr; ptr = ptr->next) { */
@@ -1490,7 +1490,8 @@ seafile_list_share_repos (const char *email, const char *type,
return seaf_share_manager_list_share_repos (seaf->share_mgr, return seaf_share_manager_list_share_repos (seaf->share_mgr,
email, type, email, type,
start, limit); start, limit,
NULL);
} }
GList * GList *
@@ -2139,7 +2140,7 @@ seafile_unset_inner_pub_repo (const char *repo_id, GError **error)
GList * GList *
seafile_list_inner_pub_repos (GError **error) seafile_list_inner_pub_repos (GError **error)
{ {
return seaf_repo_manager_list_inner_pub_repos (seaf->repo_mgr); return seaf_repo_manager_list_inner_pub_repos (seaf->repo_mgr, NULL);
} }
gint64 gint64

View File

@@ -2204,13 +2204,17 @@ get_accessible_repo_list_cb (evhtp_request_t *req, void *arg)
json_t *obj; json_t *obj;
json_t *repo_array = json_array (); json_t *repo_array = json_array ();
gboolean db_err = FALSE;
GHashTable *obtained_repos = NULL; GHashTable *obtained_repos = NULL;
char *repo_id_tmp = NULL; char *repo_id_tmp = NULL;
obtained_repos = g_hash_table_new_full (g_str_hash, g_str_equal, obtained_repos = g_hash_table_new_full (g_str_hash, g_str_equal,
g_free, g_free,
NULL); NULL);
//get personal repo list //get personal repo list
repos = seaf_repo_manager_get_repos_by_owner (seaf->repo_mgr, user, 0, -1, -1); repos = seaf_repo_manager_get_repos_by_owner (seaf->repo_mgr, user, 0, -1, -1, &db_err);
if (db_err)
goto out;
for (iter = repos; iter; iter = iter->next) { for (iter = repos; iter; iter = iter->next) {
repo = iter->data; repo = iter->data;
@@ -2238,7 +2242,10 @@ get_accessible_repo_list_cb (evhtp_request_t *req, void *arg)
GError *error = NULL; GError *error = NULL;
SeafileRepo *srepo = NULL; SeafileRepo *srepo = NULL;
//get shared repo list //get shared repo list
repos = seaf_share_manager_list_share_repos (seaf->share_mgr, user, "to_email", -1, -1); repos = seaf_share_manager_list_share_repos (seaf->share_mgr, user, "to_email", -1, -1, &db_err);
if (db_err)
goto out;
for (iter = repos; iter; iter = iter->next) { for (iter = repos; iter; iter = iter->next) {
srepo = iter->data; srepo = iter->data;
obj = fill_obj_from_seafilerepo (srepo, obtained_repos); obj = fill_obj_from_seafilerepo (srepo, obtained_repos);
@@ -2256,6 +2263,11 @@ get_accessible_repo_list_cb (evhtp_request_t *req, void *arg)
//get group repo list //get group repo list
GHashTable *group_repos = NULL; GHashTable *group_repos = NULL;
repos = seaf_get_group_repos_by_user (seaf->repo_mgr, user, org_id, &error); repos = seaf_get_group_repos_by_user (seaf->repo_mgr, user, org_id, &error);
if (error) {
g_clear_error (&error);
goto out;
}
if (repos) { if (repos) {
group_repos = filter_group_repos (repos); group_repos = filter_group_repos (repos);
group_repos_to_json (repo_array, group_repos, obtained_repos); group_repos_to_json (repo_array, group_repos, obtained_repos);
@@ -2264,7 +2276,10 @@ get_accessible_repo_list_cb (evhtp_request_t *req, void *arg)
} }
//get inner public repo list //get inner public repo list
repos = seaf_repo_manager_list_inner_pub_repos (seaf->repo_mgr); repos = seaf_repo_manager_list_inner_pub_repos (seaf->repo_mgr, &db_err);
if (db_err)
goto out;
for (iter = repos; iter; iter = iter->next) { for (iter = repos; iter; iter = iter->next) {
srepo = iter->data; srepo = iter->data;
obj = fill_obj_from_seafilerepo (srepo, obtained_repos); obj = fill_obj_from_seafilerepo (srepo, obtained_repos);
@@ -2280,8 +2295,16 @@ get_accessible_repo_list_cb (evhtp_request_t *req, void *arg)
} }
g_list_free (repos); g_list_free (repos);
out:
g_hash_table_destroy (obtained_repos); g_hash_table_destroy (obtained_repos);
if (db_err) {
json_decref (repo_array);
seaf_warning ("DB error when get accessible repo list.\n");
evhtp_send_reply (req, EVHTP_RES_SERVERR);
return;
}
char *json_str = json_dumps (repo_array, JSON_COMPACT); char *json_str = json_dumps (repo_array, JSON_COMPACT);
evbuffer_add (req->buffer_out, json_str, strlen(json_str)); evbuffer_add (req->buffer_out, json_str, strlen(json_str));
evhtp_send_reply (req, EVHTP_RES_OK); evhtp_send_reply (req, EVHTP_RES_OK);

View File

@@ -2255,7 +2255,8 @@ seaf_repo_manager_get_repos_by_owner (SeafRepoManager *mgr,
const char *email, const char *email,
int ret_corrupted, int ret_corrupted,
int start, int start,
int limit) int limit,
gboolean *db_err)
{ {
GList *repo_list = NULL, *ptr; GList *repo_list = NULL, *ptr;
GList *ret = NULL; GList *ret = NULL;
@@ -2285,8 +2286,11 @@ seaf_repo_manager_get_repos_by_owner (SeafRepoManager *mgr,
if (seaf_db_statement_foreach_row (mgr->seaf->db, sql, if (seaf_db_statement_foreach_row (mgr->seaf->db, sql,
collect_repos_fill_size_commit, &repo_list, collect_repos_fill_size_commit, &repo_list,
1, "string", email) < 0) 1, "string", email) < 0) {
if (db_err)
*db_err = TRUE;
return NULL; return NULL;
}
} else { } else {
if (db_type != SEAF_DB_TYPE_PGSQL) if (db_type != SEAF_DB_TYPE_PGSQL)
sql = "SELECT o.repo_id, s.size, b.commit_id, i.name, i.update_time, " sql = "SELECT o.repo_id, s.size, b.commit_id, i.name, i.update_time, "
@@ -2315,6 +2319,8 @@ seaf_repo_manager_get_repos_by_owner (SeafRepoManager *mgr,
3, "string", email, 3, "string", email,
"int", limit, "int", limit,
"int", start) < 0) { "int", start) < 0) {
if (db_err)
*db_err = TRUE;
return NULL; return NULL;
} }
} }
@@ -3469,7 +3475,7 @@ collect_public_repos (SeafDBRow *row, void *data)
} }
GList * GList *
seaf_repo_manager_list_inner_pub_repos (SeafRepoManager *mgr) seaf_repo_manager_list_inner_pub_repos (SeafRepoManager *mgr, gboolean *db_err)
{ {
GList *ret = NULL, *p; GList *ret = NULL, *p;
char *sql; char *sql;
@@ -3491,6 +3497,8 @@ seaf_repo_manager_list_inner_pub_repos (SeafRepoManager *mgr)
for (p = ret; p != NULL; p = p->next) for (p = ret; p != NULL; p = p->next)
g_object_unref (p->data); g_object_unref (p->data);
g_list_free (ret); g_list_free (ret);
if (db_err)
*db_err = TRUE;
return NULL; return NULL;
} }

View File

@@ -603,7 +603,8 @@ seaf_repo_manager_get_repos_by_owner (SeafRepoManager *mgr,
const char *email, const char *email,
int ret_corrupted, int ret_corrupted,
int start, int start,
int limit); int limit,
gboolean *db_err);
GList * GList *
seaf_repo_manager_search_repos_by_name (SeafRepoManager *mgr, const char *name); seaf_repo_manager_search_repos_by_name (SeafRepoManager *mgr, const char *name);
@@ -690,7 +691,7 @@ seaf_repo_manager_is_inner_pub_repo (SeafRepoManager *mgr,
const char *repo_id); const char *repo_id);
GList * GList *
seaf_repo_manager_list_inner_pub_repos (SeafRepoManager *mgr); seaf_repo_manager_list_inner_pub_repos (SeafRepoManager *mgr, gboolean *db_err);
gint64 gint64
seaf_repo_manager_count_inner_pub_repos (SeafRepoManager *mgr); seaf_repo_manager_count_inner_pub_repos (SeafRepoManager *mgr);

View File

@@ -293,7 +293,8 @@ seaf_fill_repo_commit_if_not_in_db (GList **repos)
GList* GList*
seaf_share_manager_list_share_repos (SeafShareManager *mgr, const char *email, seaf_share_manager_list_share_repos (SeafShareManager *mgr, const char *email,
const char *type, int start, int limit) const char *type, int start, int limit,
gboolean *db_err)
{ {
GList *ret = NULL, *p; GList *ret = NULL, *p;
char *sql; char *sql;
@@ -341,6 +342,8 @@ seaf_share_manager_list_share_repos (SeafShareManager *mgr, const char *email,
for (p = ret; p; p = p->next) for (p = ret; p; p = p->next)
g_object_unref (p->data); g_object_unref (p->data);
g_list_free (ret); g_list_free (ret);
if (db_err)
*db_err = TRUE;
return NULL; return NULL;
} }
} }
@@ -390,6 +393,8 @@ seaf_share_manager_list_share_repos (SeafShareManager *mgr, const char *email,
for (p = ret; p; p = p->next) for (p = ret; p; p = p->next)
g_object_unref (p->data); g_object_unref (p->data);
g_list_free (ret); g_list_free (ret);
if (db_err)
*db_err = TRUE;
return NULL; return NULL;
} }
} }

View File

@@ -39,7 +39,8 @@ seaf_share_manager_set_permission (SeafShareManager *mgr, const char *repo_id,
GList* GList*
seaf_share_manager_list_share_repos (SeafShareManager *mgr, const char *email, seaf_share_manager_list_share_repos (SeafShareManager *mgr, const char *email,
const char *type, int start, int limit); const char *type, int start, int limit,
gboolean *db_err);
GList * GList *
seaf_share_manager_list_shared_to (SeafShareManager *mgr, seaf_share_manager_list_shared_to (SeafShareManager *mgr,