Skip to content

Commit 2583de8

Browse files
committed
[utils,iamclient] Use attr to check main node flag
* change defining if it is main node to checking main node attr instead of comparing to current node ID; * make GetCurrentNodeInfo perform grpc call and get updated node info instead of cached. Signed-off-by: Oleksandr Grytsov <oleksandr_grytsov@epam.com>
1 parent c6a0d37 commit 2583de8

File tree

2 files changed

+43
-48
lines changed

2 files changed

+43
-48
lines changed

utils/iamclient/iamclient.go

+43-46
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,9 @@ type Client struct {
6969
cryptocontext *cryptutils.CryptoContext
7070
insecure bool
7171

72-
nodeID string
73-
systemID string
74-
currentNodeInfo *cloudprotocol.NodeInfo
72+
nodeID string
73+
systemID string
74+
isMainNode bool
7575

7676
publicConnection *grpchelpers.GRPCConn
7777
protectedConnection *grpc.ClientConn
@@ -165,28 +165,42 @@ func New(
165165
return nil, aoserrors.Wrap(err)
166166
}
167167

168-
if !insecure && localClient.isProtectedConnEnabled() {
169-
var ch <-chan *pb.CertInfo
168+
nodeInfo, err := localClient.GetCurrentNodeInfo()
169+
if err != nil {
170+
return nil, aoserrors.Wrap(err)
171+
}
170172

171-
if ch, err = localClient.SubscribeCertChanged(certStorage); err != nil {
173+
localClient.nodeID = nodeInfo.NodeID
174+
localClient.isMainNode = nodeInfo.IsMainNode()
175+
176+
if localClient.isMainNode {
177+
if localClient.systemID, err = localClient.getSystemID(); err != nil {
172178
return nil, aoserrors.Wrap(err)
173179
}
174-
175-
go localClient.processCertChange(ch)
176180
}
177181

178-
var nodeInfo cloudprotocol.NodeInfo
182+
if localClient.isMainNode {
183+
if err = localClient.subscribeNodeInfoChange(); err != nil {
184+
log.Error("Failed subscribe on NodeInfo change")
179185

180-
if nodeInfo, err = localClient.GetCurrentNodeInfo(); err != nil {
181-
return nil, aoserrors.Wrap(err)
186+
return nil, aoserrors.Wrap(err)
187+
}
188+
189+
if err = localClient.subscribeUnitSubjectsChange(); err != nil {
190+
log.Error("Failed subscribe on UnitSubject change")
191+
192+
return nil, aoserrors.Wrap(err)
193+
}
182194
}
183195

184-
localClient.nodeID = nodeInfo.NodeID
196+
if !insecure && localClient.isProtectedConnEnabled() {
197+
var ch <-chan *pb.CertInfo
185198

186-
if localClient.currentNodeInfo.IsMainNode() {
187-
if localClient.systemID, err = localClient.getSystemID(); err != nil {
199+
if ch, err = localClient.SubscribeCertChanged(certStorage); err != nil {
188200
return nil, aoserrors.Wrap(err)
189201
}
202+
203+
go localClient.processCertChange(ch)
190204
}
191205

192206
return localClient, nil
@@ -323,11 +337,19 @@ func (client *Client) InstallCertificates(
323337
// And IAM certificate for the main node should be send in the end. Otherwise IAM client/server
324338
// restart will fail the following certificates to apply.
325339
slices.SortStableFunc(certInfo, func(a, b cloudprotocol.IssuedCertData) int {
326-
if a.NodeID == client.nodeID && a.Type == iamCertType {
340+
if client.isMainNode && a.NodeID == client.nodeID && a.Type == iamCertType {
327341
return 1
328342
}
329343

330-
if b.NodeID == client.nodeID && b.Type == iamCertType {
344+
if client.isMainNode && b.NodeID == client.nodeID && b.Type == iamCertType {
345+
return -1
346+
}
347+
348+
if client.isMainNode && a.NodeID == client.nodeID {
349+
return 1
350+
}
351+
352+
if client.isMainNode && b.NodeID == client.nodeID {
331353
return -1
332354
}
333355

@@ -497,7 +519,7 @@ func (client *Client) Deprovision(nodeID, password string) (err error) {
497519
}
498520
}()
499521

500-
if nodeID == client.GetNodeID() {
522+
if client.isMainNode && nodeID == client.nodeID {
501523
err = aoserrors.New("Can't deprovision main node")
502524
errorInfo = &cloudprotocol.ErrorInfo{
503525
Message: err.Error(),
@@ -681,10 +703,6 @@ func (client *Client) GetCurrentNodeInfo() (cloudprotocol.NodeInfo, error) {
681703
ctx, cancel := context.WithTimeout(context.Background(), iamRequestTimeout)
682704
defer cancel()
683705

684-
if client.currentNodeInfo != nil {
685-
return *client.currentNodeInfo, nil
686-
}
687-
688706
response, err := client.publicService.GetNodeInfo(ctx, &empty.Empty{})
689707
if err != nil {
690708
return cloudprotocol.NodeInfo{}, aoserrors.Wrap(err)
@@ -693,12 +711,9 @@ func (client *Client) GetCurrentNodeInfo() (cloudprotocol.NodeInfo, error) {
693711
log.WithFields(log.Fields{
694712
"nodeID": response.GetNodeId(),
695713
"nodeType": response.GetNodeType(),
696-
}).Debug("Get node Info")
697-
698-
nodeInfo := pbconvert.NodeInfoFromPB(response)
699-
client.currentNodeInfo = &nodeInfo
714+
}).Debug("Get current node Info")
700715

701-
return *client.currentNodeInfo, nil
716+
return pbconvert.NodeInfoFromPB(response), nil
702717
}
703718

704719
// GetUnitSubjects returns unit subjects.
@@ -840,26 +855,6 @@ func (client *Client) openGRPCConnection() (err error) {
840855
client.publicNodesService = pb.NewIAMPublicNodesServiceClient(client.publicConnection)
841856
client.publicPermissionsService = pb.NewIAMPublicPermissionsServiceClient(client.publicConnection)
842857

843-
var nodeInfo cloudprotocol.NodeInfo
844-
845-
if nodeInfo, err = client.GetCurrentNodeInfo(); err != nil {
846-
return aoserrors.Wrap(err)
847-
}
848-
849-
if nodeInfo.IsMainNode() {
850-
if err = client.subscribeNodeInfoChange(); err != nil {
851-
log.Error("Failed subscribe on NodeInfo change")
852-
853-
return aoserrors.Wrap(err)
854-
}
855-
856-
if err = client.subscribeUnitSubjectsChange(); err != nil {
857-
log.Error("Failed subscribe on UnitSubject change")
858-
859-
return aoserrors.Wrap(err)
860-
}
861-
}
862-
863858
if err = client.restoreCertInfoSubs(); err != nil {
864859
log.Error("Failed subscribe on CertInfo change")
865860

@@ -881,6 +876,8 @@ func (client *Client) openGRPCConnection() (err error) {
881876
client.nodesService = pb.NewIAMNodesServiceClient(client.protectedConnection)
882877
client.permissionsService = pb.NewIAMPermissionsServiceClient(client.protectedConnection)
883878

879+
log.Debug("Connected to IAM")
880+
884881
return nil
885882
}
886883

utils/iamclient/iamclient_test.go

-2
Original file line numberDiff line numberDiff line change
@@ -1095,8 +1095,6 @@ func (server *testIAMPublicNodesServiceServer) GetNodeInfo(context context.Conte
10951095
func (server *testIAMPublicNodesServiceServer) SubscribeNodeChanged(
10961096
empty *emptypb.Empty, stream pb.IAMPublicNodesService_SubscribeNodeChangedServer,
10971097
) error {
1098-
log.Error("testIAMPublicNodesServiceServer SubscribeNodeChanged")
1099-
11001098
nodeInfo := <-server.nodeInfo
11011099

11021100
return aoserrors.Wrap(stream.Send(nodeInfo))

0 commit comments

Comments
 (0)