Comments (2)
It seems pretty clear that the root cause is i/o timeout error, which cascades to the websocket panic. The example code creates the db (and therefore the underlying websocket) using defaults. As of v0.2.1 there is the option to specify a timeout e.g. db, err := surrealdb.New(url, surrealdb.WithTimeout(3*time.Second))
. This significantly reduces the error rate. We are testing more thoroughly. The underlying problem of the panic
in the websocket implementation remains. We also note that post-v0.2.1 there are changes landed that remove the options parameter on .New(), so initialization will be different in the next release.
from surrealdb.go.
Amazing, thanks for sharing!
cc @timpratim
Attaching the contents of application.go.txt for convenience as well
package main
import (
"github.com/gin-gonic/gin"
"github.com/surrealdb/surrealdb.go"
"net/http"
"os"
)
func newdb() *surrealdb.DB {
//
dbUrl := os.Getenv("SURREALDB_URL")
if dbUrl == "" {
panic("must set SURREALDB_URL. ours looks like \"ws://<host>/rpc\"")
}
db, err := surrealdb.New(dbUrl)
if err != nil {
panic(err)
}
return db
}
func signin(db *surrealdb.DB) {
_, err := db.Signin(map[string]interface{}{
"user": "root",
"pass": "root",
})
if err != nil {
panic(err)
}
}
func use(db *surrealdb.DB) {
_, err := db.Use("test", "test")
if err != nil {
panic(err)
}
}
// from db_test.go
type testUser struct {
surrealdb.Basemodel `table:"test"`
Username string `json:"username,omitempty"`
Password string `json:"password,omitempty"`
ID string `json:"id,omitempty"`
}
func verifyConnection(db *surrealdb.DB) {
// just add a record to a table, then delete it
userData, err := db.Create("users", testUser{
Username: "johnny",
Password: "123",
})
if err != nil {
panic(err)
}
// unmarshal the data into a user struct
var user []testUser
err = surrealdb.Unmarshal(userData, &user)
if err != nil {
panic(err)
}
// Delete the users
_, err = db.Delete("users")
if err != nil {
panic(err)
}
}
func main() {
db := newdb()
signin(db)
use(db)
verifyConnection(db)
// the simplest possible gin server
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "pong",
})
})
r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
}
from surrealdb.go.
Related Issues (20)
- Feature: context.Context Support HOT 6
- Documentation: working with record links HOT 4
- Feature: Move and test `unmarshalMapToStruct(data map[string]interface{}, outStruct interface{})` HOT 2
- Bug: Re-connection to the DB HOT 2
- Bug: Broken Tests for Fetch HOT 5
- Bug: Unhandled errors in websockets can lead to panics HOT 4
- Bug: `Question or idea` Button HOT 2
- surrealdb Auth undefined HOT 1
- Bug: unexpected EOF on TestSurrealDBSuite/gorilla/TestUpdate HOT 1
- Documentation: The README file example is not usable with the latest main branch, neither with the latest version HOT 1
- Feature: Replace Gorilla WS with Nhooyr WS HOT 7
- Bug: The session has expired error when connecting to version 1.3.0 HOT 4
- Bug: stack overflow error in gorilla websocket with db version 1.3.0 HOT 4
- Feature: surrealML for golang
- Documentation: Add Documentation for .Live() func & other stuff related to LIVE queries HOT 6
- Change function does not exist HOT 3
- Feature: Add CBOR support HOT 2
- Bug: UnmarshalRaw panics when unmarshalling object HOT 3
- Feature: UPSERT
- panic: repeated read on failed websocket connection HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from surrealdb.go.