This commit is contained in:
Arunima Chaudhuri 2025-01-28 00:32:31 +05:30
parent 3cdc53960c
commit 2a42c17a1f
5 changed files with 45 additions and 11 deletions

View File

@ -83,8 +83,8 @@ class Node:
self.received_gossip = defaultdict(list)
# query methods
self.exponential_growth = False
self.linear_growth = True
self.exponential_growth = True
self.linear_growth = False
self.linear_constant_growth = False
self.hybrid_growth = False
self.exponential_constant_growth = False
@ -92,10 +92,10 @@ class Node:
# query results
self.query_times = []
self.query_total_time = 0
self.query_total_time = None
self.all_original_retries = []
self.query_results = 'success'
self.original_retries_sum = 0
self.query_results = None
self.original_retries_sum = None
# Cache latency values based on horizon level
self.latency_cache = {

View File

@ -24,11 +24,11 @@ class Result:
self.restoreColumnCount = [0] * shape.numberNodes
self.repairedSampleCount = [0] * shape.numberNodes
self.query_times = [[] for _ in range(shape.numberNodes)] # List of empty lists
self.query_total_time = [None] * shape.numberNodes # List of None values, or empty lists if needed
self.all_original_retries = [[] for _ in range(shape.numberNodes)] # List of empty lists
self.query_results = [''] * shape.numberNodes # List of empty strings
self.original_retries_sum = [None] * shape.numberNodes # List of None values
self.query_times = [[] for _ in range(shape.numberNodes)]
self.query_total_time = [None] * shape.numberNodes
self.all_original_retries = [[] for _ in range(shape.numberNodes)]
self.query_results = [''] * shape.numberNodes
self.original_retries_sum = [None] * shape.numberNodes
self.numberNodes = shape.numberNodes

View File

@ -395,17 +395,28 @@ class Simulator:
if not self.validators[i].amIaddedToQueue :
malicious_nodes_not_added_count += 1
valid_rows = set()
valid_columns = set()
for i in range(0,self.shape.numberNodes):
column_ids = []
row_ids = []
for rID in self.validators[i].rowIDs:
row_ids.append(rID)
if not self.validators[i].amImalicious and not self.validators[i].amIproposer:
valid_rows.add(rID)
for cID in self.validators[i].columnIDs:
column_ids.append(cID)
if not self.validators[i].amImalicious and not self.validators[i].amIproposer:
valid_columns.add(cID)
self.logger.debug("List of columnIDs for %d node: %s", i, column_ids, extra=self.format)
self.logger.debug("List of rowIDs for %d node: %s", i, row_ids, extra=self.format)
if len(valid_rows) >= self.shape.nbRowsK or len(valid_columns) >= self.shape.nbColsK:
self.logger.debug("Block available within the non-malicious nodes.", extra=self.format)
else:
self.logger.debug("Block not available within the non-malicious nodes.", extra=self.format)
self.logger.debug("Number of malicious nodes not added to the send queue: %d" % malicious_nodes_not_added_count, extra=self.format)
malicious_nodes_not_added_percentage = (malicious_nodes_not_added_count * 100)/(self.shape.numberNodes)
self.logger.debug("Percentage of malicious nodes not added to the send queue: %d" % malicious_nodes_not_added_percentage, extra=self.format)

View File

@ -205,7 +205,7 @@ class Visualizor:
all_query_times = [time for time in result.query_total_time if time is not None]
plt.boxplot(all_query_times, patch_artist=True, boxprops=dict(facecolor="lightblue"))
plt.title(f"Query Times", fontsize=16)
plt.title(f"Total Query Time for each node", fontsize=16)
plt.ylabel("Query Time (seconds)", fontsize=16)
plt.grid(True, axis='y', color='gray', linestyle='--', linewidth=0.5)
plt.tick_params(axis='both', which='major', labelsize=16)

View File

@ -154,6 +154,29 @@ colsK = range(32, 65, 128)
rowsK = range(32, 65, 128)
def nextShape():
params = {
"cols": cols,
"colsK": colsK,
"rows": rows,
"rowsK": rowsK,
"runs": runs,
"failureModels": failureModels,
"failureRates": failureRates,
"maliciousNodes": maliciousNodes,
"custodyRows": custodyRows,
"custodyCols": custodyCols,
"minCustodyRows": minCustodyRows,
"minCustodyCols": minCustodyCols,
"numberNodes": numberNodes,
"netDegrees": netDegrees,
"bwUplinksProd": bwUplinksProd,
"nodeTypesGroup": nodeTypesGroup,
}
for key, value in params.items():
if not value:
logging.warning(f"The parameter '{key}' is empty. Please assign a value and start the simulation.")
exit(1)
for nbCols, nbColsK, nbRows, nbRowsK, run, fm, fr, mn, chR, chC, minChR, minChC, nn, netDegree, bwUplinkProd, nodeTypes in itertools.product(
cols, colsK, rows, rowsK, runs, failureModels, failureRates, maliciousNodes, custodyRows, custodyCols, minCustodyRows, minCustodyCols, numberNodes, netDegrees, bwUplinksProd, nodeTypesGroup):
# Network Degree has to be an even number