Skip to content

Commit 9ccf80e

Browse files
committed
fix memory leak & adding default connect timeout of 2s
1 parent 72541ce commit 9ccf80e

File tree

9 files changed

+57
-81
lines changed

9 files changed

+57
-81
lines changed

common/db/mongodb.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,10 @@ type MongoDBRepository struct {
3535
}
3636

3737
func NewMongoDBRepository(ctx context.Context, uri, database, username, password string) (Handler, error) {
38-
o := options.Client().ApplyURI(uri)
38+
o := options.Client()
39+
o.SetConnectTimeout(time.Duration(2) * time.Second)
40+
o.ApplyURI(uri)
41+
3942
o.SetAuth(options.Credential{
4043
Username: username,
4144
Password: password,

common/db/pool.go

Lines changed: 0 additions & 34 deletions
This file was deleted.

common/db/postgresql.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,25 @@ func NewPostgreSQLRepository(ctx context.Context, uri, database, username, passw
2727

2828
opt.User = url.UserPassword(username, password)
2929

30+
q, _ := url.ParseQuery(opt.RawQuery)
31+
hasConnectTimeout := false
32+
for k, _ := range q {
33+
if k == "connect_timeout" {
34+
hasConnectTimeout = true
35+
break
36+
}
37+
}
38+
39+
if hasConnectTimeout == false {
40+
q.Add("connect_timeout", "2")
41+
}
42+
43+
opt.RawQuery = q.Encode()
44+
3045
if database != "" {
3146
opt.Path = database
3247
}
48+
3349
dbpool, err := pgxpool.Connect(context.Background(), opt.String())
3450
if err != nil {
3551
return nil, err

controllers/handler.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ func extractRoles(roles *[]infrav1beta1.Role) []string {
8484
return rolesToReturn
8585
}
8686

87-
func reconcileDatabase(c client.Client, pool *db.ClientPool, invoke db.Invoke, database database, recorder record.EventRecorder) (database, ctrl.Result) {
87+
func reconcileDatabase(c client.Client, invoke db.Invoke, database database, recorder record.EventRecorder) (database, ctrl.Result) {
8888
// Fetch referencing root secret
8989
secret := &corev1.Secret{}
9090
secretName := types.NamespacedName{
@@ -110,7 +110,7 @@ func reconcileDatabase(c client.Client, pool *db.ClientPool, invoke db.Invoke, d
110110
return database, ctrl.Result{Requeue: true}
111111
}
112112

113-
rootDBHandler, err := pool.FromURI(context.TODO(), invoke, database.GetAddress(), database.GetRootDatabaseName(), usr, pw)
113+
rootDBHandler, err := invoke(context.TODO(), database.GetAddress(), database.GetRootDatabaseName(), usr, pw)
114114
if err != nil {
115115
msg := fmt.Sprintf("Failed to setup connection to database server: %s", err.Error())
116116
recorder.Event(database, "Normal", "error", msg)
@@ -126,7 +126,7 @@ func reconcileDatabase(c client.Client, pool *db.ClientPool, invoke db.Invoke, d
126126
return database, ctrl.Result{Requeue: true}
127127
}
128128

129-
targetDBHandler, err := pool.FromURI(context.TODO(), invoke, database.GetAddress(), database.GetDatabaseName(), usr, pw)
129+
targetDBHandler, err := invoke(context.TODO(), database.GetAddress(), database.GetDatabaseName(), usr, pw)
130130
if err != nil {
131131
msg := fmt.Sprintf("Failed to setup connection to database server: %s", err.Error())
132132
recorder.Event(database, "Normal", "error", msg)
@@ -148,7 +148,7 @@ func reconcileDatabase(c client.Client, pool *db.ClientPool, invoke db.Invoke, d
148148
return database, ctrl.Result{}
149149
}
150150

151-
func reconcileUser(database database, c client.Client, pool *db.ClientPool, invoke db.Invoke, user user, recorder record.EventRecorder) (user, ctrl.Result) {
151+
func reconcileUser(database database, c client.Client, invoke db.Invoke, user user, recorder record.EventRecorder) (user, ctrl.Result) {
152152
// Fetch referencing database
153153
databaseName := types.NamespacedName{
154154
Namespace: user.GetNamespace(),
@@ -189,7 +189,7 @@ func reconcileUser(database database, c client.Client, pool *db.ClientPool, invo
189189
return user, ctrl.Result{Requeue: true}
190190
}
191191

192-
dbHandler, err := pool.FromURI(context.TODO(), invoke, database.GetAddress(), database.GetRootDatabaseName(), usr, pw)
192+
dbHandler, err := invoke(context.TODO(), database.GetAddress(), database.GetRootDatabaseName(), usr, pw)
193193

194194
if err != nil {
195195
msg := fmt.Sprintf("Failed to setup connection to database server: %s", err.Error())

controllers/mongodbdatabase_controller.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,9 @@ import (
3939
// MongoDBDatabaseReconciler reconciles a MongoDBDatabase object
4040
type MongoDBDatabaseReconciler struct {
4141
client.Client
42-
Log logr.Logger
43-
Scheme *runtime.Scheme
44-
Recorder record.EventRecorder
45-
ClientPool *db.ClientPool
42+
Log logr.Logger
43+
Scheme *runtime.Scheme
44+
Recorder record.EventRecorder
4645
}
4746

4847
func (r *MongoDBDatabaseReconciler) SetupWithManager(mgr ctrl.Manager, maxConcurrentReconciles int) error {
@@ -130,7 +129,7 @@ func (r *MongoDBDatabaseReconciler) Reconcile(ctx context.Context, req ctrl.Requ
130129
return reconcile.Result{}, nil
131130
}
132131

133-
_, result := reconcileDatabase(r.Client, r.ClientPool, db.NewMongoDBRepository, &database, r.Recorder)
132+
_, result := reconcileDatabase(r.Client, db.NewMongoDBRepository, &database, r.Recorder)
134133

135134
// Update status after reconciliation.
136135
if err := r.patchStatus(ctx, &database); err != nil {

controllers/mongodbuser_controller.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,9 @@ import (
3939
// MongoDBUserReconciler reconciles a MongoDBUser object
4040
type MongoDBUserReconciler struct {
4141
client.Client
42-
Log logr.Logger
43-
Scheme *runtime.Scheme
44-
Recorder record.EventRecorder
45-
ClientPool *db.ClientPool
42+
Log logr.Logger
43+
Scheme *runtime.Scheme
44+
Recorder record.EventRecorder
4645
}
4746

4847
func (r *MongoDBUserReconciler) SetupWithManager(mgr ctrl.Manager, maxConcurrentReconciles int) error {
@@ -177,7 +176,7 @@ func (r *MongoDBUserReconciler) Reconcile(ctx context.Context, req ctrl.Request)
177176
}*/
178177

179178
var database infrav1beta1.MongoDBDatabase
180-
_, result := reconcileUser(&database, r.Client, r.ClientPool, db.NewMongoDBRepository, &user, r.Recorder)
179+
_, result := reconcileUser(&database, r.Client, db.NewMongoDBRepository, &user, r.Recorder)
181180

182181
// Update status after reconciliation.
183182
if err := r.patchStatus(ctx, &user); err != nil {

controllers/postgresqldatabase_controller.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,9 @@ import (
3939
// PostgreSQLDatabaseReconciler reconciles a PostgreSQLDatabase object
4040
type PostgreSQLDatabaseReconciler struct {
4141
client.Client
42-
Log logr.Logger
43-
Scheme *runtime.Scheme
44-
Recorder record.EventRecorder
45-
ClientPool *db.ClientPool
42+
Log logr.Logger
43+
Scheme *runtime.Scheme
44+
Recorder record.EventRecorder
4645
}
4746

4847
func (r *PostgreSQLDatabaseReconciler) SetupWithManager(mgr ctrl.Manager, maxConcurrentReconciles int) error {
@@ -130,7 +129,7 @@ func (r *PostgreSQLDatabaseReconciler) Reconcile(ctx context.Context, req ctrl.R
130129
return reconcile.Result{}, nil
131130
}
132131

133-
_, result := reconcileDatabase(r.Client, r.ClientPool, db.NewPostgreSQLRepository, &database, r.Recorder)
132+
_, result := reconcileDatabase(r.Client, db.NewPostgreSQLRepository, &database, r.Recorder)
134133

135134
// Update status after reconciliation.
136135
if err := r.patchStatus(ctx, &database); err != nil {

controllers/postgresqluser_controller.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,9 @@ import (
3939
// PostgreSQLUserReconciler reconciles a PostgreSQLUser object
4040
type PostgreSQLUserReconciler struct {
4141
client.Client
42-
Log logr.Logger
43-
Scheme *runtime.Scheme
44-
Recorder record.EventRecorder
45-
ClientPool *db.ClientPool
42+
Log logr.Logger
43+
Scheme *runtime.Scheme
44+
Recorder record.EventRecorder
4645
}
4746

4847
func (r *PostgreSQLUserReconciler) SetupWithManager(mgr ctrl.Manager, maxConcurrentReconciles int) error {
@@ -177,7 +176,7 @@ func (r *PostgreSQLUserReconciler) Reconcile(ctx context.Context, req ctrl.Reque
177176
}*/
178177

179178
var database infrav1beta1.PostgreSQLDatabase
180-
_, result := reconcileUser(&database, r.Client, r.ClientPool, db.NewPostgreSQLRepository, &user, r.Recorder)
179+
_, result := reconcileUser(&database, r.Client, db.NewPostgreSQLRepository, &user, r.Recorder)
181180

182181
// Update status after reconciliation.
183182
if err := r.patchStatus(ctx, &user); err != nil {

main.go

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ import (
3737
"sigs.k8s.io/controller-runtime/pkg/log/zap"
3838

3939
infrav1beta1 "github.com/doodlescheduling/k8sdb-controller/api/v1beta1"
40-
"github.com/doodlescheduling/k8sdb-controller/common/db"
4140
"github.com/doodlescheduling/k8sdb-controller/controllers"
4241
// +kubebuilder:scaffold:imports
4342
)
@@ -155,47 +154,43 @@ func main() {
155154

156155
// MongoDBDatabase setup
157156
if err = (&controllers.MongoDBDatabaseReconciler{
158-
Client: mgr.GetClient(),
159-
Log: ctrl.Log.WithName("controllers").WithName("MongoDBDatabase"),
160-
Scheme: mgr.GetScheme(),
161-
ClientPool: db.NewClientPool(),
162-
Recorder: mgr.GetEventRecorderFor("MongoDBDatabase"),
157+
Client: mgr.GetClient(),
158+
Log: ctrl.Log.WithName("controllers").WithName("MongoDBDatabase"),
159+
Scheme: mgr.GetScheme(),
160+
Recorder: mgr.GetEventRecorderFor("MongoDBDatabase"),
163161
}).SetupWithManager(mgr, maxConcurrentReconciles); err != nil {
164162
setupLog.Error(err, "unable to create controller", "controller", "MongoDBDatabase")
165163
os.Exit(1)
166164
}
167165

168166
// MongoDBUser setup
169167
if err = (&controllers.MongoDBUserReconciler{
170-
Client: mgr.GetClient(),
171-
Log: ctrl.Log.WithName("controllers").WithName("MongoDBUser"),
172-
Scheme: mgr.GetScheme(),
173-
ClientPool: db.NewClientPool(),
174-
Recorder: mgr.GetEventRecorderFor("MongoDBUser"),
168+
Client: mgr.GetClient(),
169+
Log: ctrl.Log.WithName("controllers").WithName("MongoDBUser"),
170+
Scheme: mgr.GetScheme(),
171+
Recorder: mgr.GetEventRecorderFor("MongoDBUser"),
175172
}).SetupWithManager(mgr, maxConcurrentReconciles); err != nil {
176173
setupLog.Error(err, "unable to create controller", "controller", "MongoDBUser")
177174
os.Exit(1)
178175
}
179176

180177
// PostgreSQLDatabase setup
181178
if err = (&controllers.PostgreSQLDatabaseReconciler{
182-
Client: mgr.GetClient(),
183-
Log: ctrl.Log.WithName("controllers").WithName("PostgreSQLDatabase"),
184-
Scheme: mgr.GetScheme(),
185-
ClientPool: db.NewClientPool(),
186-
Recorder: mgr.GetEventRecorderFor("PostgreSQLDatabase"),
179+
Client: mgr.GetClient(),
180+
Log: ctrl.Log.WithName("controllers").WithName("PostgreSQLDatabase"),
181+
Scheme: mgr.GetScheme(),
182+
Recorder: mgr.GetEventRecorderFor("PostgreSQLDatabase"),
187183
}).SetupWithManager(mgr, maxConcurrentReconciles); err != nil {
188184
setupLog.Error(err, "unable to create controller", "controller", "PostgreSQLDatabase")
189185
os.Exit(1)
190186
}
191187

192188
// PostgreSQLUser setup
193189
if err = (&controllers.PostgreSQLUserReconciler{
194-
Client: mgr.GetClient(),
195-
Log: ctrl.Log.WithName("controllers").WithName("PostgreSQLUser"),
196-
Scheme: mgr.GetScheme(),
197-
ClientPool: db.NewClientPool(),
198-
Recorder: mgr.GetEventRecorderFor("PostgreSQLUser"),
190+
Client: mgr.GetClient(),
191+
Log: ctrl.Log.WithName("controllers").WithName("PostgreSQLUser"),
192+
Scheme: mgr.GetScheme(),
193+
Recorder: mgr.GetEventRecorderFor("PostgreSQLUser"),
199194
}).SetupWithManager(mgr, maxConcurrentReconciles); err != nil {
200195
setupLog.Error(err, "unable to create controller", "controller", "PostgreSQLUser")
201196
os.Exit(1)

0 commit comments

Comments
 (0)