From 68ca23821e553df4436e1454a4f3712efc9d3d31 Mon Sep 17 00:00:00 2001 From: Vargha Csongor Date: Thu, 17 Apr 2025 18:40:48 +0200 Subject: [PATCH] fix session closure --- apps/db-adapter/internal/api/admin.go | 10 +++--- apps/db-adapter/internal/api/closeSession.go | 7 ++-- apps/db-adapter/internal/api/person.go | 36 +++++++++---------- .../internal/api/person_and_relationship.go | 2 +- apps/db-adapter/internal/api/person_google.go | 16 +++++---- apps/db-adapter/internal/api/relationship.go | 8 ++--- 6 files changed, 42 insertions(+), 37 deletions(-) diff --git a/apps/db-adapter/internal/api/admin.go b/apps/db-adapter/internal/api/admin.go index d803405..273b852 100644 --- a/apps/db-adapter/internal/api/admin.go +++ b/apps/db-adapter/internal/api/admin.go @@ -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() diff --git a/apps/db-adapter/internal/api/closeSession.go b/apps/db-adapter/internal/api/closeSession.go index 848f2b3..17ec098 100644 --- a/apps/db-adapter/internal/api/closeSession.go +++ b/apps/db-adapter/internal/api/closeSession.go @@ -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() } diff --git a/apps/db-adapter/internal/api/person.go b/apps/db-adapter/internal/api/person.go index 54d0139..c78d25f 100644 --- a/apps/db-adapter/internal/api/person.go +++ b/apps/db-adapter/internal/api/person.go @@ -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 { diff --git a/apps/db-adapter/internal/api/person_and_relationship.go b/apps/db-adapter/internal/api/person_and_relationship.go index a42c602..58263b2 100644 --- a/apps/db-adapter/internal/api/person_and_relationship.go +++ b/apps/db-adapter/internal/api/person_and_relationship.go @@ -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 { diff --git a/apps/db-adapter/internal/api/person_google.go b/apps/db-adapter/internal/api/person_google.go index 22c0d2e..dd15bfe 100644 --- a/apps/db-adapter/internal/api/person_google.go +++ b/apps/db-adapter/internal/api/person_google.go @@ -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 { diff --git a/apps/db-adapter/internal/api/relationship.go b/apps/db-adapter/internal/api/relationship.go index 7dad592..99ce781 100644 --- a/apps/db-adapter/internal/api/relationship.go +++ b/apps/db-adapter/internal/api/relationship.go @@ -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()