mirror of
https://github.com/gofiber/storage.git
synced 2025-10-27 18:30:29 +08:00
Address review comments
This commit is contained in:
18
.github/workflows/test-coherence.yml
vendored
18
.github/workflows/test-coherence.yml
vendored
@@ -23,23 +23,7 @@ jobs:
|
|||||||
- name: Startup Coherence
|
- name: Startup Coherence
|
||||||
run: |
|
run: |
|
||||||
docker run -d -p 1408:1408 -p 30000:30000 ghcr.io/oracle/coherence-ce:22.06.5
|
docker run -d -p 1408:1408 -p 30000:30000 ghcr.io/oracle/coherence-ce:22.06.5
|
||||||
counter=0
|
sleep 30
|
||||||
while :
|
|
||||||
do
|
|
||||||
curl -v -X GET http://localhost:30000/management/coherence/cluster/health/ready > /dev/null 2>&1
|
|
||||||
ret=$?
|
|
||||||
if [ $ret -eq 0 ] ; then
|
|
||||||
break
|
|
||||||
else
|
|
||||||
let counter=counter+1
|
|
||||||
echo "Coherence not ready, counter=$counter"
|
|
||||||
if [ $counter -ge 10 ] ; then
|
|
||||||
echo "Not ready after 60 seconds, exiting"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
sleep 6
|
|
||||||
done
|
|
||||||
- name: Install Go
|
- name: Install Go
|
||||||
uses: actions/setup-go@v4
|
uses: actions/setup-go@v4
|
||||||
with:
|
with:
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
defaultScopeName = "fiber-session-store"
|
defaultScopeName = "default-store"
|
||||||
defaultTimeout = time.Duration(30) * time.Millisecond
|
defaultTimeout = time.Duration(30) * time.Millisecond
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -29,19 +29,23 @@ type Config struct {
|
|||||||
// UseSSL specified if to use SSL or plain text, defaults to false
|
// UseSSL specified if to use SSL or plain text, defaults to false
|
||||||
UseSSL bool
|
UseSSL bool
|
||||||
|
|
||||||
// SessionTimeout is the default session timeout to connect to Coherence, defaults to 30s
|
// Timeout is the default session timeout to connect to Coherence, defaults to 30s
|
||||||
SessionTimeout time.Duration
|
Timeout time.Duration
|
||||||
|
|
||||||
// SessionScope defines a scope allowing for multiple storage sessions
|
// ScopeName defines a scope allowing for multiple storage sessions
|
||||||
SessionScope string
|
ScopeName string
|
||||||
|
|
||||||
|
// Reset indicates if the store should be reset after being created
|
||||||
|
Reset bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// DefaultConfig defines default options.
|
// DefaultConfig defines default options.
|
||||||
var DefaultConfig = Config{
|
var DefaultConfig = Config{
|
||||||
Address: "localhost:1408",
|
Address: "localhost:1408",
|
||||||
UseSSL: false,
|
UseSSL: false,
|
||||||
SessionTimeout: time.Duration(30) * time.Millisecond,
|
Timeout: time.Duration(30) * time.Millisecond,
|
||||||
SessionScope: defaultScopeName,
|
ScopeName: defaultScopeName,
|
||||||
|
Reset: false,
|
||||||
}
|
}
|
||||||
|
|
||||||
// New returns a new [Storage] given a [coherence.Session].
|
// New returns a new [Storage] given a [coherence.Session].
|
||||||
@@ -67,12 +71,12 @@ func New(config ...Config) (*Storage, error) {
|
|||||||
options = append(options, coh.WithPlainText())
|
options = append(options, coh.WithPlainText())
|
||||||
}
|
}
|
||||||
|
|
||||||
if cfg.SessionTimeout != defaultTimeout {
|
if cfg.Timeout != defaultTimeout {
|
||||||
options = append(options, coh.WithReadyTimeout(cfg.SessionTimeout))
|
options = append(options, coh.WithReadyTimeout(cfg.Timeout))
|
||||||
}
|
}
|
||||||
|
|
||||||
if cfg.SessionScope != defaultScopeName {
|
if cfg.ScopeName != defaultScopeName {
|
||||||
scopeName = cfg.SessionScope
|
scopeName = cfg.ScopeName
|
||||||
}
|
}
|
||||||
|
|
||||||
// create the Coherence session
|
// create the Coherence session
|
||||||
@@ -81,7 +85,17 @@ func New(config ...Config) (*Storage, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return newCoherenceStorage(session, scopeName)
|
store, err := newCoherenceStorage(session, scopeName)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// if REset is true then reset the store
|
||||||
|
if cfg.Reset {
|
||||||
|
return store, store.Reset()
|
||||||
|
}
|
||||||
|
|
||||||
|
return store, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// newCoherenceStorage returns a new Coherence [Storage].
|
// newCoherenceStorage returns a new Coherence [Storage].
|
||||||
@@ -126,3 +140,7 @@ func (s *Storage) Close() error {
|
|||||||
s.session.Close()
|
s.session.Close()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Storage) Conn() *coh.Session {
|
||||||
|
return s.namedCache.GetSession()
|
||||||
|
}
|
||||||
|
|||||||
@@ -30,6 +30,8 @@ func Test_Coherence_Set_And_Get(t *testing.T) {
|
|||||||
utils.AssertEqual(t, err, nil)
|
utils.AssertEqual(t, err, nil)
|
||||||
utils.AssertEqual(t, value1, val)
|
utils.AssertEqual(t, value1, val)
|
||||||
|
|
||||||
|
utils.AssertEqual(t, true, testStore.Conn() != nil)
|
||||||
|
|
||||||
utils.AssertEqual(t, testStore.Close(), nil)
|
utils.AssertEqual(t, testStore.Close(), nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -52,6 +54,30 @@ func Test_Coherence_Set_Override(t *testing.T) {
|
|||||||
utils.AssertEqual(t, testStore.Close(), nil)
|
utils.AssertEqual(t, testStore.Close(), nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Test_Coherence_Set_With_Reset(t *testing.T) {
|
||||||
|
var val []byte
|
||||||
|
|
||||||
|
testStore, err := newTestStore(t)
|
||||||
|
utils.AssertEqual(t, err, nil)
|
||||||
|
|
||||||
|
err = testStore.Set(key1, value1, 0)
|
||||||
|
utils.AssertEqual(t, err, nil)
|
||||||
|
|
||||||
|
val, err = testStore.Get(key1)
|
||||||
|
utils.AssertEqual(t, err, nil)
|
||||||
|
utils.AssertEqual(t, value1, val)
|
||||||
|
|
||||||
|
// get a new store but reset it, so the subsequent Get will return nil
|
||||||
|
testStore, err = newTestStore(t, Config{Reset: true})
|
||||||
|
utils.AssertEqual(t, err, nil)
|
||||||
|
|
||||||
|
val, err = testStore.Get(key1)
|
||||||
|
utils.AssertEqual(t, err, nil)
|
||||||
|
utils.AssertEqual(t, true, len(val) == 0)
|
||||||
|
|
||||||
|
utils.AssertEqual(t, testStore.Close(), nil)
|
||||||
|
}
|
||||||
|
|
||||||
func Test_Coherence_Set_With_Expiry(t *testing.T) {
|
func Test_Coherence_Set_With_Expiry(t *testing.T) {
|
||||||
var val []byte
|
var val []byte
|
||||||
|
|
||||||
@@ -144,10 +170,10 @@ func Test_Coherence_With_Scope(t *testing.T) {
|
|||||||
var val []byte
|
var val []byte
|
||||||
|
|
||||||
// create two session stores with different scopes
|
// create two session stores with different scopes
|
||||||
testStore1, err := newTestStore(t, Config{SessionScope: "scope1"})
|
testStore1, err := newTestStore(t, Config{ScopeName: "scope1"})
|
||||||
utils.AssertEqual(t, err, nil)
|
utils.AssertEqual(t, err, nil)
|
||||||
|
|
||||||
testStore2, err := newTestStore(t, Config{SessionScope: "scope2"})
|
testStore2, err := newTestStore(t, Config{ScopeName: "scope2"})
|
||||||
utils.AssertEqual(t, err, nil)
|
utils.AssertEqual(t, err, nil)
|
||||||
|
|
||||||
// ensure we can put the same key with different values in each scope
|
// ensure we can put the same key with different values in each scope
|
||||||
|
|||||||
Reference in New Issue
Block a user