summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMarkus Grüneis <gimpf@gimpf.org>2014-10-25 17:30:42 +0200
committerMarkus Grüneis <gimpf@gimpf.org>2014-10-25 17:30:49 +0200
commitaa5412b9aafd3f25441afac9ea8a853e15ed225c (patch)
tree3301a09b4231de122eaf0853665449fbe0b41d6b /src
parentupdated default runit script for hub (diff)
hub: Retrieve HubId via Actor
- fixes the problem that a resync would not start due to Append calls from the pipe-sever; this was caused by GetHubId failing due to database is locked error
Diffstat (limited to 'src')
-rw-r--r--src/hub/src/spreadspace.org/sfive/s5srv.go23
-rw-r--r--src/hub/src/spreadspace.org/sfive/s5srvForward.go3
2 files changed, 25 insertions, 1 deletions
diff --git a/src/hub/src/spreadspace.org/sfive/s5srv.go b/src/hub/src/spreadspace.org/sfive/s5srv.go
index 3bfccbe..fd76f1b 100644
--- a/src/hub/src/spreadspace.org/sfive/s5srv.go
+++ b/src/hub/src/spreadspace.org/sfive/s5srv.go
@@ -32,6 +32,15 @@ type getUpdatesToken struct {
response chan getUpdatesResult
}
+type getHubIdResult struct {
+ id string
+ err error
+}
+
+type getHubIdToken struct {
+ response chan getHubIdResult
+}
+
type StatsSinkServer struct {
store sqliteStore
quit chan bool
@@ -41,6 +50,7 @@ type StatsSinkServer struct {
getStatsChan chan queryStatsToken
getUpdatesAfterChan chan getUpdatesAfterToken
getUpdatesChan chan getUpdatesToken
+ getHubIdChan chan getHubIdToken
}
func (self StatsSinkServer) appendActor() {
@@ -79,6 +89,9 @@ func (self StatsSinkServer) appendActor() {
case token := <-self.getUpdatesChan:
values, err := self.store.GetUpdates(token.filter)
token.response <- getUpdatesResult{values, err}
+ case token := <-self.getHubIdChan:
+ storeId, err := self.store.GetStoreId()
+ token.response <- getHubIdResult{storeId, err}
}
}
}
@@ -111,6 +124,14 @@ func (self StatsSinkServer) getStatsInvoke(filter *StatsFilter) (StatsResult, er
return res.stats, res.err
}
+func (self StatsSinkServer) getHubIdInvoke() (string, error) {
+ token := getHubIdToken{response: make(chan getHubIdResult, 1)}
+ defer close(token.response)
+ self.getHubIdChan <- token
+ res := <-token.response
+ return res.id, res.err
+}
+
func (self StatsSinkServer) Close() {
self.quit <- true
<-self.done
@@ -121,6 +142,7 @@ func (self StatsSinkServer) Close() {
close(self.getStatsChan)
close(self.getUpdatesAfterChan)
close(self.getUpdatesChan)
+ close(self.getHubIdChan)
self.store.Close()
}
@@ -139,6 +161,7 @@ func NewServer(mysql bool, dbPath string) (server *StatsSinkServer, err error) {
server.getStatsChan = make(chan queryStatsToken, 5)
server.getUpdatesAfterChan = make(chan getUpdatesAfterToken, 1)
server.getUpdatesChan = make(chan getUpdatesToken, 3)
+ server.getHubIdChan = make(chan getHubIdToken, 1)
go server.appendActor()
return
}
diff --git a/src/hub/src/spreadspace.org/sfive/s5srvForward.go b/src/hub/src/spreadspace.org/sfive/s5srvForward.go
index 2dddf60..49de873 100644
--- a/src/hub/src/spreadspace.org/sfive/s5srvForward.go
+++ b/src/hub/src/spreadspace.org/sfive/s5srvForward.go
@@ -21,7 +21,8 @@ func findMaxId(values []StatisticsData) int {
}
func (self StatsSinkServer) getLastUpdate(baseurl string, client *http.Client) (latestId int, storeId string, err error) {
- storeId, err = self.store.GetStoreId()
+ storeId, err = self.getHubIdInvoke()
+
if err != nil {
s5l.Printf("fwd: failed to get own hubid: %v\n", err)
return