Skip to content

Session.State().Get/Set do not appear to work #324

@verdverm

Description

@verdverm

I tried the following basic get/set with both in-memory and database, neither work as expected and have the same output, notably they both show the state value just after being set, but it never seems to retain after the function return

Caution

none of the state prefixes appear to work

Not sure if I'm doing something wrong, or there is a copy in the implementation which means this never makes it back to storage...?

func sessionGetState(r *runtime.Runtime, c *runtime.Client, m *runtime.Message) {

	var s StatePayload
	if err := json.Unmarshal(m.Payload, &s); err != nil {
		log.Printf("Error unmarshaling 'session.getState' payload: %v", err)
		return
	}

	// lookup session
	resp, err := r.S.Get(r.Ctx, &session.GetRequest{
		AppName:   r.AppName,
		UserID:    c.User,
		SessionID: s.Sid,
	})
	if err != nil {
		...
	}

	v, err := resp.Session.State().Get(s.Key)
	if err != nil {
		...
	}
	s.Val = v

	// fmt.Println("mailing sessions", payload)
	c.Mail("session.getState.resp", s)
}

func sessionPutState(r *runtime.Runtime, c *runtime.Client, m *runtime.Message) {
	var s StatePayload
	if err := json.Unmarshal(m.Payload, &s); err != nil {
		log.Printf("Error unmarshaling 'session.getState' payload: %v", err)
		return
	}

	// lookup session
	resp, err := r.S.Get(r.Ctx, &session.GetRequest{
		AppName:   r.AppName,
		UserID:    c.User,
		SessionID: s.Sid,
	})
	if err != nil {
		...
	}

	err = resp.Session.State().Set(s.Key, s.Val)
	if err != nil {
		...
	}

	fmt.Println("session.state", maps.Collect(resp.Session.State().All()))
}
Received message type: session.state.put
sessionPutState {28b3c4f4-d140-4409-ad0c-56336ad4971c title testing}
State Set 28b3c4f4-d140-4409-ad0c-56336ad4971c title testing
session.state map[title:testing]
Received message type: session.get
sessionGet {"id":"28b3c4f4-d140-4409-ad0c-56336ad4971c"}
Received message type: session.state.put
sessionPutState {28b3c4f4-d140-4409-ad0c-56336ad4971c foo bar}
State Set 28b3c4f4-d140-4409-ad0c-56336ad4971c foo bar
session.state map[foo:bar]
Received message type: session.state.get
Error: session.getState.getState: state key does not exist
Received message type: session.state.put
sessionPutState {28b3c4f4-d140-4409-ad0c-56336ad4971c user:name verdverm}
State Set 28b3c4f4-d140-4409-ad0c-56336ad4971c user:name verdverm
session.state map[user:name:verdverm]
Received message type: session.state.get
Error: session.getState.getState: state key does not exist

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions