From 235aab099e043f219a2b1605eeed96a823e4c12d Mon Sep 17 00:00:00 2001 From: Lukasz Wojciechowski Date: Thu, 31 Jul 2014 16:36:13 +0200 Subject: [PATCH] Disconnect all clients from cynara when policy rules change All actions that should be run when cynara policies change are grouped in onPoliciesChanged() function. Change-Id: I30687fc35258b448fcccc2d54955b57d8cbc82af --- src/service/logic/Logic.cpp | 12 +++++++++--- src/service/logic/Logic.h | 1 + 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/service/logic/Logic.cpp b/src/service/logic/Logic.cpp index 739add2..377bcce 100644 --- a/src/service/logic/Logic.cpp +++ b/src/service/logic/Logic.cpp @@ -91,7 +91,7 @@ bool Logic::check(RequestContextPtr context UNUSED, const PolicyKey &key, void Logic::execute(RequestContextPtr context, InsertOrUpdateBucketRequestPtr request) { m_storage->addOrUpdateBucket(request->bucketId(), request->result()); - m_storage->save(); + onPoliciesChanged(); context->returnResponse(context, std::make_shared(CodeResponse::Code::OK, request->sequenceNumber())); @@ -101,7 +101,7 @@ void Logic::execute(RequestContextPtr context, RemoveBucketRequestPtr request) { auto code = CodeResponse::Code::OK; try { m_storage->deleteBucket(request->bucketId()); - m_storage->save(); + onPoliciesChanged(); } catch (const BucketNotExistsException &ex) { code = CodeResponse::Code::NO_BUCKET; } catch (const DefaultBucketDeletionException &ex) { @@ -116,7 +116,7 @@ void Logic::execute(RequestContextPtr context, SetPoliciesRequestPtr request) { try { m_storage->insertPolicies(request->policiesToBeInsertedOrUpdated()); m_storage->deletePolicies(request->policiesToBeRemoved()); - m_storage->save(); + onPoliciesChanged(); } catch (const BucketNotExistsException &ex) { code = CodeResponse::Code::NO_BUCKET; } @@ -124,4 +124,10 @@ void Logic::execute(RequestContextPtr context, SetPoliciesRequestPtr request) { request->sequenceNumber())); } +void Logic::onPoliciesChanged(void) { + m_storage->save(); + m_socketManager->disconnectAllClients(); + //todo remove all saved contexts (if there will be any saved contexts) +} + } // namespace Cynara diff --git a/src/service/logic/Logic.h b/src/service/logic/Logic.h index e21419a..4e8a476 100644 --- a/src/service/logic/Logic.h +++ b/src/service/logic/Logic.h @@ -62,6 +62,7 @@ private: bool check(RequestContextPtr context, const PolicyKey &key, PolicyResult& result); + void onPoliciesChanged(void); }; } // namespace Cynara -- 2.7.4