a007db1b79
+ Add a function to the Tools package to provide the local IP address and port + Add a function to the Tools package to provide a time as formated string as yyyyMMdd hhmmss.fff + Improved the ICCC startup message: Now, the message contains the IP address and port of the stared server + Add a new configuration to specific the necessary Ocean servers' port (internally, not the public port) + The template package reports now which version out of the grid FS is used. + The Ocean server is now bound to the correct IP address and port (rule: the local IP address!) + The order of the system shutdown handlers were wrong! + The early ICCC messages problem is now fixed! + Fixed an ICCC bug for the case, that a message does not have any payload! + Also the configuration database uses now the correct mgo MongoDB rules (SetSafe & SetMode)
71 lines
1.6 KiB
Go
71 lines
1.6 KiB
Go
package ICCC
|
|
|
|
import "fmt"
|
|
import "time"
|
|
import "labix.org/v2/mgo/bson"
|
|
import "github.com/SommerEngineering/Ocean/Shutdown"
|
|
import "github.com/SommerEngineering/Ocean/ICCC/Scheme"
|
|
import "github.com/SommerEngineering/Ocean/Log"
|
|
import LM "github.com/SommerEngineering/Ocean/Log/Meta"
|
|
|
|
func InitCacheNow() {
|
|
startCacheTimerLock.Lock()
|
|
defer startCacheTimerLock.Unlock()
|
|
|
|
if cacheTimerRunning {
|
|
return
|
|
}
|
|
|
|
cacheTimerLogic(false)
|
|
}
|
|
|
|
func StartCacheTimer() {
|
|
initCacheTimer()
|
|
}
|
|
|
|
func initCacheTimer() {
|
|
startCacheTimerLock.Lock()
|
|
defer startCacheTimerLock.Unlock()
|
|
|
|
if cacheTimerRunning {
|
|
return
|
|
} else {
|
|
cacheTimerRunning = true
|
|
}
|
|
|
|
go func() {
|
|
for {
|
|
cacheTimerLogic(true)
|
|
}
|
|
}()
|
|
}
|
|
|
|
func cacheTimerLogic(waiting bool) {
|
|
if Shutdown.IsDown() {
|
|
return
|
|
}
|
|
|
|
lastCount := cacheListenerDatabase.Len()
|
|
selection := bson.D{{`IsActive`, true}}
|
|
entriesIterator := collectionListener.Find(selection).Iter()
|
|
entry := Scheme.Listener{}
|
|
|
|
cacheListenerDatabaseLock.Lock()
|
|
cacheListenerDatabase.Init()
|
|
for entriesIterator.Next(&entry) {
|
|
cacheListenerDatabase.PushBack(entry)
|
|
}
|
|
|
|
cacheListenerDatabaseLock.Unlock()
|
|
Log.LogShort(senderName, LM.CategorySYSTEM, LM.LevelINFO, LM.MessageNameEXECUTE, `The listener cache was refreshed with the values from the database.`, fmt.Sprintf(`last count=%d`, lastCount), fmt.Sprintf(`new count=%d`, cacheListenerDatabase.Len()))
|
|
|
|
if waiting {
|
|
nextDuration := time.Duration(5) * time.Minute
|
|
if cacheListenerDatabase.Len() == 0 {
|
|
nextDuration = time.Duration(10) * time.Second
|
|
}
|
|
|
|
time.Sleep(nextDuration)
|
|
}
|
|
}
|