diff --git a/goKMS/kms/peers/etsi14Quantummodule.go b/goKMS/kms/peers/etsi14Quantummodule.go index 902272ed155b60386e6146ef522ebfac4481378e..ea2e46bd8ade4b12f39f1f20a21dd926200f3d35 100644 --- a/goKMS/kms/peers/etsi14Quantummodule.go +++ b/goKMS/kms/peers/etsi14Quantummodule.go @@ -109,49 +109,21 @@ func (qm *ETSI014HTTPQuantumModule) Initialize() error { // start polling keys if qm.master { go func() { - ticker := time.NewTicker(time.Duration(qm.keyFetchInterval) * time.Second) + restartWaitingTime := time.Duration(2) * time.Minute + ticker := time.NewTicker(restartWaitingTime) defer ticker.Stop() - failedAttemps := 0 + restartedAfterWaitingTime := new(int) - // TODO: add context/channel to stop - for range ticker.C { - if failedAttemps == maxFailedKeyRequestAttempts { - log.Errorf("stopped trying to fetch keys from qkd module after %d tries", failedAttemps) + // immediately start with the ticker instead of waiting the defined amount + for ; true; <-ticker.C { + if *restartedAfterWaitingTime == 5 { + log.Fatalf("Stopped retrying to fetch keys after %d attempts waiting %v each time in between.", restartedAfterWaitingTime, restartWaitingTime) break } - if qm.keyStore.Length() < int(qm.maxKeyFillLevel) { - container, err := qm.GetKeys(qm.keyFetchAmount, 256, nil, nil, nil) - if err != nil { - log.Error(err) - failedAttemps++ - continue - } - - keyIds := make([]string, len(container.GetKeys())) - for i, keyItem := range container.GetKeys() { - keyIds[i] = keyItem.GetKeyID() - } - - _, err = qm.kmsClient.KeyIdNotification(context.Background(), - &pbIC.KeyIdNotificationRequest{ - Timestamp: time.Now().Unix(), - KmsId: qm.kmsId, - KeyIds: keyIds, - }) - if err != nil { - log.Error(err) - failedAttemps++ - continue - } - - if err := store.AddETSIKeysToKeystore(qm.keyStore, container.GetKeys()); err != nil { - log.Error(err) - } - - failedAttemps = 0 - } + qm.doKeyFetching(restartedAfterWaitingTime) + *restartedAfterWaitingTime++ } }() } @@ -211,3 +183,54 @@ func (qm *ETSI014HTTPQuantumModule) GetKeyWithIds(keyIds []etsi14ClientGenerated return container, nil } + +func (qm *ETSI014HTTPQuantumModule) doKeyFetching(restartedAfterWaitingTime *int) { + ticker := time.NewTicker(time.Duration(qm.keyFetchInterval) * time.Second) + defer ticker.Stop() + + failedAttemps := 0 + + // TODO: add context/channel to stop + for range ticker.C { + if failedAttemps == maxFailedKeyRequestAttempts { + log.Errorf("stopped trying to fetch keys from qkd module after %d tries", failedAttemps) + break + } + + if qm.keyStore.Length() < int(qm.maxKeyFillLevel) { + container, err := qm.GetKeys(qm.keyFetchAmount, 256, nil, nil, nil) + if err != nil { + log.Error(err) + failedAttemps++ + continue + } + + keyIds := make([]string, len(container.GetKeys())) + for i, keyItem := range container.GetKeys() { + keyIds[i] = keyItem.GetKeyID() + } + + _, err = qm.kmsClient.KeyIdNotification(context.Background(), + &pbIC.KeyIdNotificationRequest{ + Timestamp: time.Now().Unix(), + KmsId: qm.kmsId, + KeyIds: keyIds, + }) + if err != nil { + log.Error(err) + failedAttemps++ + continue + } + + err = store.AddETSIKeysToKeystore(qm.keyStore, container.GetKeys()) + if err != nil { + log.Error(err) + failedAttemps++ + continue + } + + failedAttemps = 0 + *restartedAfterWaitingTime = 0 + } + } +}