Skip to content

Commit 93f7d29

Browse files
committed
fix: removed dangerous RPC calls
1 parent 641e236 commit 93f7d29

File tree

5 files changed

+0
-193
lines changed

5 files changed

+0
-193
lines changed

src/DIRAC/AccountingSystem/Client/AccountingCLI.py

Lines changed: 0 additions & 108 deletions
Original file line numberDiff line numberDiff line change
@@ -57,67 +57,6 @@ def showTraceback(self):
5757
traceback.print_tb(sys.exc_info()[2])
5858
print("________________________\n")
5959

60-
def do_resetBucketLength(self, args):
61-
"""
62-
Set the bucket Length. Will trigger a recalculation of buckets. Can take a while.
63-
Usage : resetBucketLength <typeName>
64-
<DIRACRoot>/DIRAC/AccountingSystem/Client/Types/<typeName>
65-
should exist and inherit the base type
66-
"""
67-
try:
68-
argList = args.split()
69-
if argList:
70-
typeName = argList[0].strip()
71-
else:
72-
gLogger.error("No type name specified")
73-
return
74-
75-
# Try to import the type
76-
result = self.objectLoader.loadObject(f"DIRAC.AccountingSystem.Client.Types.{typeName}")
77-
if not result["OK"]:
78-
return result
79-
typeClass = result["Value"]
80-
gLogger.info(f"Loaded type {typeClass.__name__}")
81-
typeDef = typeClass().getDefinition()
82-
acClient = DataStoreClient()
83-
retVal = acClient.setBucketsLength(typeDef[0], typeDef[3])
84-
if retVal["OK"]:
85-
gLogger.info("Type registered successfully")
86-
else:
87-
gLogger.error(f"Error: {retVal['Message']}")
88-
except Exception:
89-
self.showTraceback()
90-
91-
def do_regenerateBuckets(self, args):
92-
"""
93-
Regenerate buckets for type. Can take a while.
94-
Usage : regenerateBuckets <typeName>
95-
<DIRACRoot>/DIRAC/AccountingSystem/Client/Types/<typeName>
96-
should exist and inherit the base type
97-
"""
98-
try:
99-
argList = args.split()
100-
if argList:
101-
typeName = argList[0].strip()
102-
else:
103-
gLogger.error("No type name specified")
104-
return
105-
106-
# Try to import the type
107-
result = self.objectLoader.loadObject(f"DIRAC.AccountingSystem.Client.Types.{typeName}")
108-
if not result["OK"]:
109-
return result
110-
typeClass = result["Value"]
111-
gLogger.info(f"Loaded type {typeClass.__name__}")
112-
typeDef = typeClass().getDefinition()
113-
acClient = DataStoreClient()
114-
retVal = acClient.regenerateBuckets(typeDef[0])
115-
if retVal["OK"]:
116-
gLogger.info("Buckets recalculated!")
117-
else:
118-
gLogger.error(f"Error: {retVal['Message']}")
119-
except Exception:
120-
self.showTraceback()
12160

12261
def do_showRegisteredTypes(self, args):
12362
"""
@@ -139,50 +78,3 @@ def do_showRegisteredTypes(self, args):
13978
print(" Value fields:\n %s" % "\n ".join(typeList[2]))
14079
except Exception:
14180
self.showTraceback()
142-
143-
def do_deleteType(self, args):
144-
"""
145-
Delete a registered accounting type.
146-
Usage : deleteType <typeName>
147-
WARN! It will delete all data associated to that type! VERY DANGEROUS!
148-
If you screw it, you'll discover a new dimension of pain and doom! :)
149-
"""
150-
try:
151-
argList = args.split()
152-
if argList:
153-
typeName = argList[0].strip()
154-
else:
155-
gLogger.error("No type name specified")
156-
return
157-
158-
choice = input(
159-
f"Are you completely sure you want to delete type {typeName} and all it's data? yes/no [no]: "
160-
)
161-
choice = choice.lower()
162-
if choice not in ("yes", "y"):
163-
print("Delete aborted")
164-
return
165-
166-
acClient = DataStoreClient()
167-
retVal = acClient.deleteType(typeName)
168-
if not retVal["OK"]:
169-
gLogger.error(f"Error: {retVal['Message']}")
170-
return
171-
print("Hope you meant it, because it's done")
172-
except Exception:
173-
self.showTraceback()
174-
175-
def do_compactBuckets(self, args):
176-
"""
177-
Compact buckets table
178-
Usage : compactBuckets
179-
"""
180-
try:
181-
acClient = DataStoreClient()
182-
retVal = acClient.compactDB()
183-
if not retVal["OK"]:
184-
gLogger.error(f"Error: {retVal['Message']}")
185-
return
186-
gLogger.info("Done")
187-
except Exception:
188-
self.showTraceback()

src/DIRAC/AccountingSystem/Client/DataStoreClient.py

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -122,19 +122,6 @@ def delayedCommit(self):
122122

123123
return S_OK()
124124

125-
def remove(self, register):
126-
"""
127-
Remove a Register from the Accounting DataStore
128-
"""
129-
if not self.__checkBaseType(register.__class__):
130-
return S_ERROR("register is not a valid type (has to inherit from BaseAccountingType")
131-
retVal = register.checkValues()
132-
if not retVal["OK"]:
133-
return retVal
134-
if gConfig.getValue("/LocalSite/DisableAccounting", False):
135-
return S_OK()
136-
return self._getRPC().remove(*register.getValues())
137-
138125

139126
def _sendToFailover(rpcStub):
140127
"""Create a ForwardDISET operation for failover"""

src/DIRAC/AccountingSystem/ConfigTemplate.cfg

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,6 @@ Services
99
Authorization
1010
{
1111
Default = authenticated
12-
compactDB = ServiceAdministrator
13-
deleteType = ServiceAdministrator
14-
registerType = ServiceAdministrator
15-
setBucketsLength = ServiceAdministrator
16-
regenerateBuckets = ServiceAdministrator
1712
}
1813
}
1914
##END

src/DIRAC/AccountingSystem/Service/DataStoreHandler.py

Lines changed: 0 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
from DIRAC import S_ERROR, S_OK
1515
from DIRAC.AccountingSystem.DB.MultiAccountingDB import MultiAccountingDB
1616
from DIRAC.ConfigurationSystem.Client import PathFinder
17-
from DIRAC.Core.Base.Client import Client
1817
from DIRAC.Core.DISET.RequestHandler import RequestHandler, getServiceOption
1918
from DIRAC.Core.Utilities import TimeUtilities
2019
from DIRAC.Core.Utilities.ThreadScheduler import gThreadScheduler
@@ -39,22 +38,6 @@ def initializeHandler(cls, svcInfoDict):
3938
gThreadScheduler.addPeriodicTask(60, cls.__acDB.loadPendingRecords)
4039
return S_OK()
4140

42-
types_setBucketsLength = [str, list]
43-
44-
def export_setBucketsLength(self, typeName, bucketsLength):
45-
"""
46-
Change the buckets Length. (Only for all powerful admins)
47-
"""
48-
return self.__acDB.changeBucketsLength(typeName, bucketsLength)
49-
50-
types_regenerateBuckets = [str]
51-
52-
def export_regenerateBuckets(self, typeName):
53-
"""
54-
Recalculate buckets. (Only for all powerful admins)
55-
"""
56-
return self.__acDB.regenerateBuckets(typeName)
57-
5841
types_getRegisteredTypes = []
5942

6043
def export_getRegisteredTypes(self):
@@ -98,51 +81,4 @@ def export_commitRegisters(self, entriesList):
9881
records.append((entry[0], startTime, endTime, entry[3]))
9982
return self.__acDB.insertRecordBundleThroughQueue(records)
10083

101-
types_compactDB = []
102-
103-
def export_compactDB(self):
104-
"""
105-
Compact the db by grouping buckets
106-
"""
107-
# if we are running workers (not only one service) we can redirect the request to the master
108-
# For more information please read the Administrative guide Accounting part!
109-
# ADVICE: If you want to trigger the bucketing, please make sure the bucketing is not running!!!!
110-
if self.runBucketing:
111-
return self.__acDB.compactBuckets()
112-
113-
return Client(url="Accounting/DataStoreMaster").compactDB()
114-
11584
types_remove = [str, datetime.datetime, datetime.datetime, list]
116-
117-
def export_remove(self, typeName, startTime, endTime, valuesList):
118-
"""
119-
Remove a record for a type
120-
"""
121-
startTime = int(TimeUtilities.toEpoch(startTime))
122-
endTime = int(TimeUtilities.toEpoch(endTime))
123-
return self.__acDB.deleteRecord(typeName, startTime, endTime, valuesList)
124-
125-
types_removeRegisters = [list]
126-
127-
def export_removeRegisters(self, entriesList):
128-
"""
129-
Remove a record for a type
130-
"""
131-
expectedTypes = [str, datetime.datetime, datetime.datetime, list]
132-
for entry in entriesList:
133-
if len(entry) != 4:
134-
return S_ERROR("Invalid records")
135-
for i, en in enumerate(entry):
136-
if not isinstance(en, expectedTypes[i]):
137-
return S_ERROR(f"{i} field in the records should be {expectedTypes[i]}")
138-
ok = 0
139-
for entry in entriesList:
140-
startTime = int(TimeUtilities.toEpoch(entry[1]))
141-
endTime = int(TimeUtilities.toEpoch(entry[2]))
142-
record = entry[3]
143-
result = self.__acDB.deleteRecord(entry[0], startTime, endTime, record)
144-
if not result["OK"]:
145-
return S_OK(ok)
146-
ok += 1
147-
148-
return S_OK(ok)

tests/Integration/AccountingSystem/Test_DataStoreClient.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,3 @@ def test_addAndRemoveStorageOccupancy():
2828
assert res["OK"], res["Message"]
2929
res = gDataStoreClient.commit()
3030
assert res["OK"], res["Message"]
31-
# now removing that record
32-
res = gDataStoreClient.remove(record)
33-
assert res["OK"], res["Message"]

0 commit comments

Comments
 (0)