fix session closure

This commit is contained in:
2025-04-17 18:40:48 +02:00
parent 9db46a759d
commit 68ca23821e
6 changed files with 42 additions and 37 deletions

View File

@@ -14,7 +14,7 @@ import (
func (srv *server) CreateAdminRelationship(c *gin.Context, id1 int, id2 int, params api.CreateAdminRelationshipParams) {
session := srv.db.NewSession(c.Request.Context(), neo4j.SessionConfig{})
defer closeSession(c.Request.Context(), session, srv.dbOpTimeout)
defer closeSession(c.Request.Context(), srv.logger, session, srv.dbOpTimeout)
actx, aCancel := context.WithTimeout(c.Request.Context(), srv.dbOpTimeout)
defer aCancel()
@@ -39,7 +39,7 @@ func (srv *server) CreateAdminRelationship(c *gin.Context, id1 int, id2 int, par
func (srv *server) DeleteAdminRelationship(c *gin.Context, id1 int, id2 int, params api.DeleteAdminRelationshipParams) {
session := srv.db.NewSession(c.Request.Context(), neo4j.SessionConfig{})
defer closeSession(c.Request.Context(), session, srv.dbOpTimeout)
defer closeSession(c.Request.Context(), srv.logger, session, srv.dbOpTimeout)
actx, aCancel := context.WithTimeout(c.Request.Context(), srv.dbOpTimeout)
defer aCancel()
@@ -64,7 +64,7 @@ func (srv *server) DeleteAdminRelationship(c *gin.Context, id1 int, id2 int, par
func (srv *server) GetAdminRelationship(c *gin.Context, id1 int, id2 int, params api.GetAdminRelationshipParams) {
session := srv.db.NewSession(c.Request.Context(), neo4j.SessionConfig{})
defer closeSession(c.Request.Context(), session, srv.dbOpTimeout)
defer closeSession(c.Request.Context(), srv.logger, session, srv.dbOpTimeout)
actx, aCancel := context.WithTimeout(c.Request.Context(), srv.dbOpTimeout)
defer aCancel()
@@ -89,7 +89,7 @@ func (srv *server) GetAdminRelationship(c *gin.Context, id1 int, id2 int, params
func (srv *server) GetProfileAdmins(c *gin.Context, id int, params api.GetProfileAdminsParams) {
session := srv.db.NewSession(c.Request.Context(), neo4j.SessionConfig{})
defer closeSession(c.Request.Context(), session, srv.dbOpTimeout)
defer closeSession(c.Request.Context(), srv.logger, session, srv.dbOpTimeout)
actx, aCancel := context.WithTimeout(c.Request.Context(), srv.dbOpTimeout)
defer aCancel()
@@ -114,7 +114,7 @@ func (srv *server) GetProfileAdmins(c *gin.Context, id int, params api.GetProfil
func (srv *server) GetManagedProfiles(c *gin.Context, params api.GetManagedProfilesParams) {
session := srv.db.NewSession(c.Request.Context(), neo4j.SessionConfig{})
defer closeSession(c.Request.Context(), session, srv.dbOpTimeout)
defer closeSession(c.Request.Context(), srv.logger, session, srv.dbOpTimeout)
qctx, qCancel := context.WithTimeout(c.Request.Context(), srv.dbOpTimeout)
defer qCancel()

View File

@@ -5,10 +5,13 @@ import (
"time"
"github.com/neo4j/neo4j-go-driver/v5/neo4j"
"go.uber.org/zap"
)
func closeSession(ctx context.Context, session neo4j.SessionWithContext, timeOut time.Duration) {
func closeSession(ctx context.Context, logger *zap.Logger, session neo4j.SessionWithContext, timeOut time.Duration) {
sctx, cancel := context.WithTimeout(ctx, timeOut)
session.Close(sctx)
if err := session.Close(sctx); err != nil {
logger.Error("Error closing session", zap.Error(err))
}
cancel()
}

View File

@@ -21,7 +21,7 @@ func (srv *server) CreatePerson(c *gin.Context, params api.CreatePersonParams) {
}
session := srv.db.NewSession(c.Request.Context(), neo4j.SessionConfig{})
defer closeSession(c.Request.Context(), session, srv.dbOpTimeout)
defer closeSession(c.Request.Context(), srv.logger, session, srv.dbOpTimeout)
trs, err := session.BeginTransaction(c.Request.Context())
if err != nil {
@@ -34,7 +34,7 @@ func (srv *server) CreatePerson(c *gin.Context, params api.CreatePersonParams) {
trs.Close(c.Request.Context())
}()
qctx, qCancel := context.WithTimeout(context.Background(), srv.dbOpTimeout)
qctx, qCancel := context.WithTimeout(c.Request.Context(), srv.dbOpTimeout)
defer qCancel()
res, err := trs.Run(qctx, memgraph.CreatePersonCypherQuery, map[string]any{
"Person": *person,
@@ -58,7 +58,7 @@ func (srv *server) CreatePerson(c *gin.Context, params api.CreatePersonParams) {
return
}
actx, acancel := context.WithTimeout(context.Background(), srv.dbOpTimeout)
actx, acancel := context.WithTimeout(c.Request.Context(), srv.dbOpTimeout)
defer acancel()
_, aErr := trs.Run(actx, memgraph.CreateAdminRelationshipCypherQuery, map[string]any{
"id2": personId.(int),
@@ -74,12 +74,12 @@ func (srv *server) CreatePerson(c *gin.Context, params api.CreatePersonParams) {
}
func (srv *server) GetPersonById(c *gin.Context, id int, params api.GetPersonByIdParams) {
ctx, cancel := context.WithTimeout(context.Background(), srv.dbOpTimeout)
ctx, cancel := context.WithTimeout(c.Request.Context(), srv.dbOpTimeout)
defer cancel()
session := srv.db.NewSession(ctx, neo4j.SessionConfig{})
defer closeSession(c.Request.Context(), session, srv.dbOpTimeout)
defer closeSession(c.Request.Context(), srv.logger, session, srv.dbOpTimeout)
actx, acancel := context.WithTimeout(context.Background(), srv.dbOpTimeout)
actx, acancel := context.WithTimeout(c.Request.Context(), srv.dbOpTimeout)
defer acancel()
if err := auth.CouldSeePersonsProfile(actx, session, id, params.XUserID); err != nil {
c.JSON(http.StatusUnauthorized, gin.H{"msg": fmt.Sprint("User does not have access to this person", err.Error())})
@@ -87,7 +87,7 @@ func (srv *server) GetPersonById(c *gin.Context, id int, params api.GetPersonByI
return
}
qctx, qCancel := context.WithTimeout(context.Background(), srv.dbOpTimeout)
qctx, qCancel := context.WithTimeout(c.Request.Context(), srv.dbOpTimeout)
defer qCancel()
res, err := session.ExecuteRead(qctx, memgraph.GetPersonById(qctx, id))
if err != nil {
@@ -100,12 +100,12 @@ func (srv *server) GetPersonById(c *gin.Context, id int, params api.GetPersonByI
}
func (srv *server) SoftDeletePerson(c *gin.Context, id int, params api.SoftDeletePersonParams) {
ctx, cancel := context.WithTimeout(context.Background(), srv.dbOpTimeout)
ctx, cancel := context.WithTimeout(c.Request.Context(), srv.dbOpTimeout)
defer cancel()
session := srv.db.NewSession(ctx, neo4j.SessionConfig{})
defer closeSession(c.Request.Context(), session, srv.dbOpTimeout)
defer closeSession(c.Request.Context(), srv.logger, session, srv.dbOpTimeout)
actx, acancel := context.WithTimeout(context.Background(), srv.dbOpTimeout)
actx, acancel := context.WithTimeout(c.Request.Context(), srv.dbOpTimeout)
defer acancel()
if err := auth.CouldManagePersonUnknownAdmin(actx, session, id, params.XUserID); err != nil {
c.JSON(http.StatusUnauthorized, gin.H{"msg": fmt.Sprint("User does not have access to this person", err.Error())})
@@ -113,7 +113,7 @@ func (srv *server) SoftDeletePerson(c *gin.Context, id int, params api.SoftDelet
return
}
qctx, qCancel := context.WithTimeout(context.Background(), srv.dbOpTimeout)
qctx, qCancel := context.WithTimeout(c.Request.Context(), srv.dbOpTimeout)
defer qCancel()
res, err := session.ExecuteWrite(qctx, memgraph.SoftDeletePerson(qctx, id))
if err != nil {
@@ -133,10 +133,10 @@ func (srv *server) UpdatePerson(c *gin.Context, id int, params api.UpdatePersonP
return
}
actx, acancel := context.WithTimeout(context.Background(), srv.dbOpTimeout)
actx, acancel := context.WithTimeout(c.Request.Context(), srv.dbOpTimeout)
defer acancel()
session := srv.db.NewSession(actx, neo4j.SessionConfig{})
defer closeSession(c.Request.Context(), session, srv.dbOpTimeout)
defer closeSession(c.Request.Context(), srv.logger, session, srv.dbOpTimeout)
if err := auth.CouldManagePersonUnknownAdmin(actx, session, id, params.XUserID); err != nil {
c.JSON(http.StatusUnauthorized, gin.H{"msg": fmt.Sprint("User does not have access to this person", err.Error())})
@@ -144,7 +144,7 @@ func (srv *server) UpdatePerson(c *gin.Context, id int, params api.UpdatePersonP
return
}
qctx, qCancel := context.WithTimeout(context.Background(), srv.dbOpTimeout)
qctx, qCancel := context.WithTimeout(c.Request.Context(), srv.dbOpTimeout)
defer qCancel()
res, err := session.ExecuteWrite(qctx, memgraph.UpdatePerson(qctx, id, person))
if err != nil {
@@ -157,12 +157,12 @@ func (srv *server) UpdatePerson(c *gin.Context, id int, params api.UpdatePersonP
}
func (srv *server) HardDeletePerson(c *gin.Context, id int, params api.HardDeletePersonParams) {
ctx, cancel := context.WithTimeout(context.Background(), srv.dbOpTimeout)
ctx, cancel := context.WithTimeout(c.Request.Context(), srv.dbOpTimeout)
defer cancel()
session := srv.db.NewSession(ctx, neo4j.SessionConfig{})
defer closeSession(c.Request.Context(), session, srv.dbOpTimeout)
defer closeSession(c.Request.Context(), srv.logger, session, srv.dbOpTimeout)
actx, acancel := context.WithTimeout(context.Background(), srv.dbOpTimeout)
actx, acancel := context.WithTimeout(c.Request.Context(), srv.dbOpTimeout)
defer acancel()
if err := auth.CouldManagePersonUnknownAdmin(actx, session, id, params.XUserID); err != nil {
c.JSON(http.StatusUnauthorized, gin.H{"msg": fmt.Sprint("User does not have access to this person", err.Error())})
@@ -170,7 +170,7 @@ func (srv *server) HardDeletePerson(c *gin.Context, id int, params api.HardDelet
return
}
qctx, qCancel := context.WithTimeout(context.Background(), srv.dbOpTimeout)
qctx, qCancel := context.WithTimeout(c.Request.Context(), srv.dbOpTimeout)
defer qCancel()
res, err := session.ExecuteWrite(qctx, memgraph.HardDeletePerson(qctx, id))
if err != nil {

View File

@@ -19,7 +19,7 @@ func (srv *server) CreatePersonAndRelationship(c *gin.Context, id int, params ap
}
session := srv.db.NewSession(c.Request.Context(), neo4j.SessionConfig{})
defer closeSession(c.Request.Context(), session, srv.dbOpTimeout)
defer closeSession(c.Request.Context(), srv.logger, session, srv.dbOpTimeout)
trs, err := session.BeginTransaction(c.Request.Context())
if err != nil {

View File

@@ -11,11 +11,12 @@ import (
)
func (srv *server) GetPersonByGoogleId(c *gin.Context, googleId string) {
ctx, cancel := context.WithTimeout(context.Background(), srv.dbOpTimeout)
ctx, cancel := context.WithTimeout(c.Request.Context(), srv.dbOpTimeout)
defer cancel()
session := srv.db.NewSession(ctx, neo4j.SessionConfig{})
defer closeSession(c.Request.Context(), srv.logger, session, srv.dbOpTimeout)
qctx, qCancel := context.WithTimeout(context.Background(), srv.dbOpTimeout)
qctx, qCancel := context.WithTimeout(c.Request.Context(), srv.dbOpTimeout)
defer qCancel()
res, err := session.ExecuteRead(qctx, memgraph.GetPersonByGoogleId(qctx, googleId))
if err != nil {
@@ -40,12 +41,12 @@ func (srv *server) CreatePersonByGoogleIdAndInviteCode(c *gin.Context, googleId
emptyString := ""
person.Props.InviteCode = &emptyString
ctx, cancel := context.WithTimeout(context.Background(), srv.dbOpTimeout)
ctx, cancel := context.WithTimeout(c.Request.Context(), srv.dbOpTimeout)
defer cancel()
session := srv.db.NewSession(ctx, neo4j.SessionConfig{})
defer closeSession(c.Request.Context(), session, srv.dbOpTimeout)
defer closeSession(c.Request.Context(), srv.logger, session, srv.dbOpTimeout)
qctx, qCancel := context.WithTimeout(context.Background(), srv.dbOpTimeout)
qctx, qCancel := context.WithTimeout(c.Request.Context(), srv.dbOpTimeout)
defer qCancel()
res, err := session.ExecuteWrite(qctx, memgraph.UpdatePersonByInviteCode(qctx, person.InviteCode, person.Props))
if err != nil {
@@ -66,11 +67,12 @@ func (srv *server) CreatePersonByGoogleId(c *gin.Context, googleId string) {
}
person.GoogleId = &googleId // just making sure :)
ctx, cancel := context.WithTimeout(context.Background(), srv.dbOpTimeout)
ctx, cancel := context.WithTimeout(c.Request.Context(), srv.dbOpTimeout)
defer cancel()
session := srv.db.NewSession(ctx, neo4j.SessionConfig{})
defer closeSession(c.Request.Context(), srv.logger, session, srv.dbOpTimeout)
qctx, qCancel := context.WithTimeout(context.Background(), srv.dbOpTimeout)
qctx, qCancel := context.WithTimeout(c.Request.Context(), srv.dbOpTimeout)
defer qCancel()
res, err := session.ExecuteWrite(qctx, memgraph.CreatePerson(qctx, person))
if err != nil {

View File

@@ -21,7 +21,7 @@ func (srv *server) CreateRelationship(c *gin.Context, params api.CreateRelations
}
session := srv.db.NewSession(c.Request.Context(), neo4j.SessionConfig{})
defer closeSession(c.Request.Context(), session, srv.dbOpTimeout)
defer closeSession(c.Request.Context(), srv.logger, session, srv.dbOpTimeout)
actx, aCancel := context.WithTimeout(c.Request.Context(), srv.dbOpTimeout)
defer aCancel()
@@ -69,7 +69,7 @@ func (srv *server) UpdateRelationship(c *gin.Context, id1, id2 int, params api.U
}
session := srv.db.NewSession(c.Request.Context(), neo4j.SessionConfig{})
defer closeSession(c.Request.Context(), session, srv.dbOpTimeout)
defer closeSession(c.Request.Context(), srv.logger, session, srv.dbOpTimeout)
actx, aCancel := context.WithTimeout(c.Request.Context(), srv.dbOpTimeout)
defer aCancel()
@@ -96,7 +96,7 @@ func (srv *server) UpdateRelationship(c *gin.Context, id1, id2 int, params api.U
func (srv *server) GetRelationship(c *gin.Context, id1 int, id2 int, params api.GetRelationshipParams) {
session := srv.db.NewSession(c.Request.Context(), neo4j.SessionConfig{})
defer closeSession(c.Request.Context(), session, srv.dbOpTimeout)
defer closeSession(c.Request.Context(), srv.logger, session, srv.dbOpTimeout)
actx, aCancel := context.WithTimeout(c.Request.Context(), srv.dbOpTimeout)
defer aCancel()
@@ -124,7 +124,7 @@ func (srv *server) GetRelationship(c *gin.Context, id1 int, id2 int, params api.
func (srv *server) DeleteRelationship(c *gin.Context, id1 int, id2 int, params api.DeleteRelationshipParams) {
session := srv.db.NewSession(c.Request.Context(), neo4j.SessionConfig{})
defer closeSession(c.Request.Context(), session, srv.dbOpTimeout)
defer closeSession(c.Request.Context(), srv.logger, session, srv.dbOpTimeout)
actx, aCancel := context.WithTimeout(c.Request.Context(), srv.dbOpTimeout)
defer aCancel()