From 4fd9886a10db5bfb73cc072c17bd2058f535944b Mon Sep 17 00:00:00 2001 From: "Gerasimos (Makis) Maropoulos" <kataras2006@hotmail.com> Date: Sat, 1 Sep 2018 02:06:56 +0300 Subject: [PATCH] go modules and vendoring section explain why not yet, in my opinion let's stick with the current system until gophers get acquainted with the new go modules and how it works - I putted a link to the TOC in order to help them Former-commit-id: 572527152de5808c834546ca1373de716046770e --- .travis.yml | 11 +++--- HISTORY.md | 3 +- _examples/tutorial/url-shortener/store.go | 20 +++++------ sessions/sessiondb/boltdb/database.go | 41 ++++++++++++----------- 4 files changed, 39 insertions(+), 36 deletions(-) diff --git a/.travis.yml b/.travis.yml index 6e6ada55..a1912a50 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,13 +3,14 @@ os: - linux - osx go: - - "go1.9" - - "go1.10" + - 1.9.x + - 1.10.x + - 1.11.x go_import_path: github.com/kataras/iris # we disable test caching via GOCACHE=off -env: - global: - - GOCACHE=off +# env: +# global: +# - GOCACHE=off install: - go get ./... # for iris-contrib/httpexpect, kataras/golog script: diff --git a/HISTORY.md b/HISTORY.md index 2a24d778..d30424b1 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -80,7 +80,8 @@ app.Get("/profile/{name:alphabetical max(255)}", func(ctx iris.Context){ - Rename the vendor `sessions/sessiondb/vendor/...bbolt` from `coreos/bbolt` to `etcd-io/bbolt` and update to v1.3.1, based on [that](https://github.com/etcd-io/bbolt/releases/tag/v1.3.1-etcd.7) - Update the vendor `sessions/sessiondb/vendor/...badger` to v1.5.3 -> More to come, maybe it will be removed eventually. +I believe it is soon to adapt the new [go modules](https://github.com/golang/go/wiki/Modules#table-of-contents) inside Iris, the new `go mod` command may change until go 1.12, it is still an experimental feature. +The [vendor](https://github.com/kataras/iris/tree/v11/vendor) folder will be kept until most the majority of Go developers get acquainted with the new `go modules`. The `go.mod` and `go.sum` files will come at `iris v12` (or `go 1.12`), we could do that on this version as well but I don't want to have half-things, versioning should be passed on import path as well and that is a large breaking change to go with it right now, so it will probably have a new path such as `github.com/kataras/iris/v12` based on a `git tag` like every Iris release (we are lucky here because we used semantic versioning from day zero). No folder re-structure inside the root git repository to split versions will ever happen, so backwards-compatibility will be not enabled by-default although it's easy for anyone to grab any version from older [releases](https://github.com/kataras/iris/releases) or branch and target that. # Sat, 11 August 2018 | v10.7.0 diff --git a/_examples/tutorial/url-shortener/store.go b/_examples/tutorial/url-shortener/store.go index d76413df..f2b78891 100644 --- a/_examples/tutorial/url-shortener/store.go +++ b/_examples/tutorial/url-shortener/store.go @@ -3,7 +3,7 @@ package main import ( "bytes" - "github.com/etcd-io/bbolt" + bolt "github.com/etcd-io/bbolt" ) // Panic panics, change it if you don't want to panic on critical INITIALIZE-ONLY-ERRORS @@ -28,17 +28,17 @@ var ( // Only one table/bucket which contains the urls, so it's not a fully Database, // it works only with single bucket because that all we need. type DB struct { - db *bbolt.DB + db *bolt.DB } var _ Store = &DB{} // openDatabase open a new database connection // and returns its instance. -func openDatabase(stumb string) *bbolt.DB { +func openDatabase(stumb string) *bolt.DB { // Open the data(base) file in the current working directory. // It will be created if it doesn't exist. - db, err := bbolt.Open(stumb, 0600, nil) + db, err := bolt.Open(stumb, 0600, nil) if err != nil { Panic(err) } @@ -48,7 +48,7 @@ func openDatabase(stumb string) *bbolt.DB { tableURLs, } - db.Update(func(tx *bbolt.Tx) (err error) { + db.Update(func(tx *bolt.Tx) (err error) { for _, table := range tables { _, err = tx.CreateBucketIfNotExists(table) if err != nil { @@ -73,7 +73,7 @@ func NewDB(stumb string) *DB { // Set sets a shorten url and its key // Note: Caller is responsible to generate a key. func (d *DB) Set(key string, value string) error { - return d.db.Update(func(tx *bbolt.Tx) error { + return d.db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucketIfNotExists(tableURLs) // Generate ID for the url // Note: we could use that instead of a random string key @@ -106,7 +106,7 @@ func (d *DB) Set(key string, value string) error { // Clear clears all the database entries for the table urls. func (d *DB) Clear() error { - return d.db.Update(func(tx *bbolt.Tx) error { + return d.db.Update(func(tx *bolt.Tx) error { return tx.DeleteBucket(tableURLs) }) } @@ -116,7 +116,7 @@ func (d *DB) Clear() error { // Returns an empty string if not found. func (d *DB) Get(key string) (value string) { keyB := []byte(key) - d.db.Update(func(tx *bbolt.Tx) error { + d.db.Update(func(tx *bolt.Tx) error { b := tx.Bucket(tableURLs) if b == nil { return nil @@ -138,7 +138,7 @@ func (d *DB) Get(key string) (value string) { // GetByValue returns all keys for a specific (original) url value. func (d *DB) GetByValue(value string) (keys []string) { valueB := []byte(value) - d.db.Update(func(tx *bbolt.Tx) error { + d.db.Update(func(tx *bolt.Tx) error { b := tx.Bucket(tableURLs) if b == nil { return nil @@ -159,7 +159,7 @@ func (d *DB) GetByValue(value string) (keys []string) { // Len returns all the "shorted" urls length func (d *DB) Len() (num int) { - d.db.View(func(tx *bbolt.Tx) error { + d.db.View(func(tx *bolt.Tx) error { // Assume bucket exists and has keys b := tx.Bucket(tableURLs) diff --git a/sessions/sessiondb/boltdb/database.go b/sessions/sessiondb/boltdb/database.go index db0ef827..7a27d5cc 100644 --- a/sessions/sessiondb/boltdb/database.go +++ b/sessions/sessiondb/boltdb/database.go @@ -6,10 +6,11 @@ import ( "runtime" "time" - "github.com/etcd-io/bbolt" - "github.com/kataras/golog" "github.com/kataras/iris/core/errors" "github.com/kataras/iris/sessions" + + bolt "github.com/etcd-io/bbolt" + "github.com/kataras/golog" ) // DefaultFileMode used as the default database's "fileMode" @@ -25,7 +26,7 @@ type Database struct { // Service is the underline BoltDB database connection, // it's initialized at `New` or `NewFromDB`. // Can be used to get stats. - Service *bbolt.DB + Service *bolt.DB } var errPathMissing = errors.New("path is required") @@ -51,8 +52,8 @@ func New(path string, fileMode os.FileMode) (*Database, error) { return nil, err } - service, err := bbolt.Open(path, fileMode, - &bbolt.Options{Timeout: 20 * time.Second}, + service, err := bolt.Open(path, fileMode, + &bolt.Options{Timeout: 20 * time.Second}, ) if err != nil { @@ -64,10 +65,10 @@ func New(path string, fileMode os.FileMode) (*Database, error) { } // NewFromDB same as `New` but accepts an already-created custom boltdb connection instead. -func NewFromDB(service *bbolt.DB, bucketName string) (*Database, error) { +func NewFromDB(service *bolt.DB, bucketName string) (*Database, error) { bucket := []byte(bucketName) - service.Update(func(tx *bbolt.Tx) (err error) { + service.Update(func(tx *bolt.Tx) (err error) { _, err = tx.CreateBucketIfNotExists(bucket) return }) @@ -78,15 +79,15 @@ func NewFromDB(service *bbolt.DB, bucketName string) (*Database, error) { return db, db.cleanup() } -func (db *Database) getBucket(tx *bbolt.Tx) *bbolt.Bucket { +func (db *Database) getBucket(tx *bolt.Tx) *bolt.Bucket { return tx.Bucket(db.table) } -func (db *Database) getBucketForSession(tx *bbolt.Tx, sid string) *bbolt.Bucket { +func (db *Database) getBucketForSession(tx *bolt.Tx, sid string) *bolt.Bucket { b := db.getBucket(tx).Bucket([]byte(sid)) if b == nil { // session does not exist, it shouldn't happen, session bucket creation happens once at `Acquire`, - // no need to accept the `bbolt.bucket.CreateBucketIfNotExists`'s performance cost. + // no need to accept the `bolt.bucket.CreateBucketIfNotExists`'s performance cost. golog.Debugf("unreachable session access for '%s'", sid) } @@ -105,7 +106,7 @@ func getExpirationBucketName(bsid []byte) []byte { // Cleanup removes any invalid(have expired) session entries on initialization. func (db *Database) cleanup() error { - return db.Service.Update(func(tx *bbolt.Tx) error { + return db.Service.Update(func(tx *bolt.Tx) error { b := db.getBucket(tx) c := b.Cursor() // loop through all buckets, find one with expiration. @@ -151,7 +152,7 @@ var expirationKey = []byte("exp") // it can be random. // if the return value is LifeTime{} then the session manager sets the life time based on the expiration duration lives in configuration. func (db *Database) Acquire(sid string, expires time.Duration) (lifetime sessions.LifeTime) { bsid := []byte(sid) - err := db.Service.Update(func(tx *bbolt.Tx) (err error) { + err := db.Service.Update(func(tx *bolt.Tx) (err error) { root := db.getBucket(tx) if expires > 0 { // should check or create the expiration bucket. @@ -218,7 +219,7 @@ func (db *Database) OnUpdateExpiration(sid string, newExpires time.Duration) err return err } - err = db.Service.Update(func(tx *bbolt.Tx) error { + err = db.Service.Update(func(tx *bolt.Tx) error { expirationName := getExpirationBucketName([]byte(sid)) root := db.getBucket(tx) b := root.Bucket(expirationName) @@ -250,7 +251,7 @@ func (db *Database) Set(sid string, lifetime sessions.LifeTime, key string, valu return } - err = db.Service.Update(func(tx *bbolt.Tx) error { + err = db.Service.Update(func(tx *bolt.Tx) error { b := db.getBucketForSession(tx, sid) if b == nil { return nil @@ -270,7 +271,7 @@ func (db *Database) Set(sid string, lifetime sessions.LifeTime, key string, valu // Get retrieves a session value based on the key. func (db *Database) Get(sid string, key string) (value interface{}) { - err := db.Service.View(func(tx *bbolt.Tx) error { + err := db.Service.View(func(tx *bolt.Tx) error { b := db.getBucketForSession(tx, sid) if b == nil { return nil @@ -293,7 +294,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 *bbolt.Tx) error { + db.Service.View(func(tx *bolt.Tx) error { b := db.getBucketForSession(tx, sid) if b == nil { return nil @@ -314,7 +315,7 @@ func (db *Database) Visit(sid string, cb func(key string, value interface{})) { // Len returns the length of the session's entries (keys). func (db *Database) Len(sid string) (n int) { - db.Service.View(func(tx *bbolt.Tx) error { + db.Service.View(func(tx *bolt.Tx) error { b := db.getBucketForSession(tx, sid) if b == nil { return nil @@ -329,7 +330,7 @@ func (db *Database) Len(sid string) (n int) { // Delete removes a session key value based on its key. func (db *Database) Delete(sid string, key string) (deleted bool) { - err := db.Service.Update(func(tx *bbolt.Tx) error { + err := db.Service.Update(func(tx *bolt.Tx) error { b := db.getBucketForSession(tx, sid) if b == nil { return sessions.ErrNotFound @@ -343,7 +344,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 *bbolt.Tx) error { + db.Service.Update(func(tx *bolt.Tx) error { b := db.getBucketForSession(tx, sid) if b == nil { return nil @@ -358,7 +359,7 @@ func (db *Database) Clear(sid string) { // 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 *bbolt.Tx) error { + db.Service.Update(func(tx *bolt.Tx) error { // delete the session bucket. b := db.getBucket(tx) bsid := []byte(sid)