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:
@@ -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):
|
||||||
|
@@ -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
|
||||||
|
@@ -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);
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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);
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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,
|
||||||
|
Reference in New Issue
Block a user