1
0
mirror of https://github.com/kataras/iris.git synced 2025-12-18 02:17:05 +00:00

version 12.1.5

Former-commit-id: cda69f08955cb0d594e98bf26197ee573cbba4b2
This commit is contained in:
Gerasimos (Makis) Maropoulos
2020-02-02 16:29:06 +02:00
parent e04ea83c04
commit 3093d65363
76 changed files with 9647 additions and 366 deletions

View File

@@ -42,7 +42,7 @@ func New(path string, fileMode os.FileMode) (*Database, error) {
return nil, errPathMissing
}
if fileMode <= 0 {
if fileMode == 0 {
fileMode = os.FileMode(DefaultFileMode)
}
@@ -67,11 +67,15 @@ func New(path string, fileMode os.FileMode) (*Database, error) {
func NewFromDB(service *bolt.DB, bucketName string) (*Database, error) {
bucket := []byte(bucketName)
service.Update(func(tx *bolt.Tx) (err error) {
err := service.Update(func(tx *bolt.Tx) (err error) {
_, err = tx.CreateBucketIfNotExists(bucket)
return
})
if err != nil {
return nil, err
}
db := &Database{table: bucket, Service: service}
runtime.SetFinalizer(db, closeDB)
@@ -292,7 +296,7 @@ func (db *Database) Get(sid string, key string) (value interface{}) {
// Visit loops through all session keys and values.
func (db *Database) Visit(sid string, cb func(key string, value interface{})) {
db.Service.View(func(tx *bolt.Tx) error {
err := db.Service.View(func(tx *bolt.Tx) error {
b := db.getBucketForSession(tx, sid)
if b == nil {
return nil
@@ -309,11 +313,15 @@ func (db *Database) Visit(sid string, cb func(key string, value interface{})) {
return nil
})
})
if err != nil {
golog.Debugf("Database.Visit: %s: %v", sid, err)
}
}
// Len returns the length of the session's entries (keys).
func (db *Database) Len(sid string) (n int) {
db.Service.View(func(tx *bolt.Tx) error {
err := db.Service.View(func(tx *bolt.Tx) error {
b := db.getBucketForSession(tx, sid)
if b == nil {
return nil
@@ -323,6 +331,10 @@ func (db *Database) Len(sid string) (n int) {
return nil
})
if err != nil {
golog.Debugf("Database.Len: %s: %v", sid, err)
}
return
}
@@ -342,7 +354,7 @@ func (db *Database) Delete(sid string, key string) (deleted bool) {
// Clear removes all session key values but it keeps the session entry.
func (db *Database) Clear(sid string) {
db.Service.Update(func(tx *bolt.Tx) error {
err := db.Service.Update(func(tx *bolt.Tx) error {
b := db.getBucketForSession(tx, sid)
if b == nil {
return nil
@@ -352,20 +364,28 @@ func (db *Database) Clear(sid string) {
return b.Delete(k)
})
})
if err != nil {
golog.Debugf("Database.Clear: %s: %v", sid, err)
}
}
// Release destroys the session, it clears and removes the session entry,
// session manager will create a new session ID on the next request after this call.
func (db *Database) Release(sid string) {
db.Service.Update(func(tx *bolt.Tx) error {
err := db.Service.Update(func(tx *bolt.Tx) error {
// delete the session bucket.
b := db.getBucket(tx)
bsid := []byte(sid)
// try to delete the associated expiration bucket, if exists, ignore error.
b.DeleteBucket(getExpirationBucketName(bsid))
_ = b.DeleteBucket(getExpirationBucketName(bsid))
return b.DeleteBucket(bsid)
})
if err != nil {
golog.Debugf("Database.Release: %s: %v", sid, err)
}
}
// Close shutdowns the BoltDB connection.