From aa5412b9aafd3f25441afac9ea8a853e15ed225c Mon Sep 17 00:00:00 2001 From: Markus Grüneis Date: Sat, 25 Oct 2014 17:30:42 +0200 Subject: 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 --- src/hub/src/spreadspace.org/sfive/s5srv.go | 23 +++++++++++++++++++++++ src/hub/src/spreadspace.org/sfive/s5srvForward.go | 3 ++- 2 files changed, 25 insertions(+), 1 deletion(-) 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 -- cgit v1.2.3