-
Notifications
You must be signed in to change notification settings - Fork 21
/
workflowInstanceMap.go
67 lines (52 loc) · 1.33 KB
/
workflowInstanceMap.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package core
import (
"fmt"
"github.com/MG-RAST/AWE/lib/rwmutex"
)
type WorkflowInstanceMap struct {
rwmutex.RWMutex
_map map[string]*WorkflowInstance
}
func NewWorkflowInstancesMap() (wim *WorkflowInstanceMap) {
wim = &WorkflowInstanceMap{}
wim.RWMutex.Init("WorkflowInstancesMap")
wim._map = make(map[string]*WorkflowInstance)
return
}
func (wim *WorkflowInstanceMap) GetWorkflowInstances() (wis []*WorkflowInstance, err error) {
wis = []*WorkflowInstance{}
read_lock, err := wim.RLockNamed("GetWorkflowInstances")
if err != nil {
return
}
defer wim.RUnlockNamed(read_lock)
for i, _ := range wim._map {
wi := wim._map[i]
wis = append(wis, wi)
}
return
}
func (wim *WorkflowInstanceMap) Add(workflow_instance *WorkflowInstance) (err error) {
err = wim.LockNamed("WorkflowInstanceMap/Add")
if err != nil {
return
}
defer wim.Unlock()
id, _ := workflow_instance.GetId(false)
_, ok := wim._map[id]
if ok {
err = fmt.Errorf("(WorkflowInstanceMap/Add) workflow_instance %s already in map", id)
return
}
wim._map[id] = workflow_instance
return
}
func (wim *WorkflowInstanceMap) Get(id string) (workflow_instance *WorkflowInstance, ok bool, err error) {
rlock, err := wim.RLockNamed("WorkflowInstanceMap/Get")
if err != nil {
return
}
defer wim.RUnlockNamed(rlock)
workflow_instance, ok = wim._map[id]
return
}