Skip to content

Conversation

@bertllll
Copy link
Contributor

No description provided.

@cursor
Copy link

cursor bot commented Nov 11, 2025

You have run out of free Bugbot PR reviews for this billing cycle. This will reset on November 14.

To receive reviews on all of your PRs, visit the Cursor dashboard to activate Pro and start your 14-day free trial.

}

impl NewPostingsDebugContainer {
impl NewChargessDebugContainer {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We want single 's' in the Charges.

MSG_ID_INCREMENTER.fetch_add(1, Ordering::Relaxed)
}
fn last_used_id(&self) -> u32 {
MSG_ID_INCREMENTER.load(Ordering::Relaxed) - 1
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is there -1 at the end? Correct me if I'm wrong but the last I'd should be the current value, not current value -1.

let same_id_2 = subject.last_used_id();
let new_id_2 = subject.new_id();

assert_eq!(new_id, same_id_1);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would suggest if you increment the value first and then return it in the new_id method. That way you won't need to use -1 in the load_id method.

Copy link
Collaborator

@utkarshg6 utkarshg6 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Continue at node/src/sub_lib/accountant.rs:136

}

fn last_used_id(&self) -> u32 {
todo!()
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You can write something here, I don't like it empty.

payload_size,
service_rate: self.per_routing_service,
byte_rate: self.per_routing_byte,
service: ServiceProvided {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I dunno why you nested it like that, looks unnecessary, unless there's a sibling field.

pub payload_size: usize,
pub service_rate: u64,
pub byte_rate: u64,
pub trait AccountableServiceWithTraceLog {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This would be additional complexity while searching for logs in the production code. I personally prefer a direct print of log using macros. Introducing a layer of abstraction here apparently can make it harder to search for logs.

fn trace_log_msg(&self, msg_id: u32) -> String;
}

pub trait MessageWithServicesProvided {
Copy link
Collaborator

@utkarshg6 utkarshg6 Nov 17, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Prefer enum based approach here

#[derive(Clone, PartialEq, Eq, Debug, Message)]
pub struct ReportServiceProvidedMessage {
    pub service: ServiceProvided,
    pub service_type: ServiceType,
}

#[derive(Clone, PartialEq, Eq, Debug)]
pub enum ServiceType {
    Exit,
    Routing,
}

impl ReportServiceProvidedMessage {
    pub fn new_exit_service(service: ServiceProvided) -> Self {
        Self {
            service,
            service_type: ServiceType::Exit,
        }
    }
    
    pub fn new_routing_service(service: ServiceProvided) -> Self {
        Self {
            service,
            service_type: ServiceType::Routing,
        }
    }
}

impl ReportServiceProvidedMessage {
    fn services_provided(&self) -> &ServiceProvided {
        &self.service
    }

    fn service_type(&self) -> ServiceType {
        self.service_type
    }
}

pub routing: RoutingServicesConsumed,
}

impl AccountableServiceWithTraceLog for ExitServiceConsumed {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Lines 219...234 could be replaced by a single log message which just prints the service type similar to other values in the trace log message.

pub byte_rate: u64,
}

pub enum ServiceProvidedTraceLogWrapper<'a> {
Copy link
Collaborator

@utkarshg6 utkarshg6 Nov 17, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Again it should be done other way around. You should use the enum ServiceType here. Refer to this comment - https://github.com/MASQ-Project/Node/pull/743/files#r2533460766

let exit_service_msg = ReportExitServiceProvidedMessage {
service: service.clone(),
};
let routing_service_msg = ReportRoutingServiceProvidedMessage { service };
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This test will change slightly. You should consider a test with 2 cases along with a helper function.

Copy link
Collaborator

@utkarshg6 utkarshg6 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Continue at node/src/accountant/logging_utils/accounting_msgs_debug.rs

) -> Option<LoggableStats> {
self.record_new_charges_by_msg_type(new_charges, msg_type);

self.maybe_dump_stats_by_msg_type(log_window_size, msg_type)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd safely remove the suffix _by_msg_type from the fn names.

let mut new_charge_feeds_per_msg =
generate_new_charge_feeds_representing_msgs(log_window_size);
let expected_sorted_stats =
construct_expected_sorted_stats_from_generated_new_charges(&new_charge_feeds_per_msg);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The variable names are less clear and verbose. Kindly change it to something familiar like:

new_charge_feeds_per_msg -> test_msgs
expected_sorted_stats -> expected_stats

let mut subject = AccountingMessageTracker::default();
assert_empty_stats(&subject);
let charge_msg_matching_the_window_size =
new_charge_feeds_per_msg.remove(log_window_size as usize - 1 - 1);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These two -1 are less clear. It's hard to decipher what individual subtractions are trying to achieve. I'd suggest to break this into two steps and use different variable names. It will shed some light on why these subtractions happened.

test_msgs_of_count_window_size_minus_one(
&mut subject,
msg_type,
log_window_size,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also, the use of window size is unclear in this testing fn as whole. I'd like if we can make it clearer.

assert_provided_loggable_stats(result, msg_type, log_window_size, expected_sorted_stats);
assert_empty_stats(&subject);

retest_after_emptied(&mut subject, msg_type);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Optional: There are so many fns being used, I'd converted it into a builder pattern and would implement these fns on the structure. If you're ready for more adventure then only embark on it, otherwise it's totally fine to leave it this way.

Copy link
Collaborator

@utkarshg6 utkarshg6 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Continue at node/src/accountant/mod.rs

fn record_service_provided(&self, service: &ServiceProvided) -> Option<NewCharge> {
let byte_charge = service.byte_rate as u128 * (service.payload_size as u128);
let total_charge = service.service_rate as u128 + byte_charge;
let wallet = &service.paying_wallet;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nicely Done!

}
fn handle_report_service_provided_message<AccountingMessage>(&mut self, msg: AccountingMessage)
where
AccountingMessage: MessageWithServicesProvided,
Copy link
Collaborator

@utkarshg6 utkarshg6 Nov 17, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should go away once you decide to use the structure instead of the trait implementation. The enum based approach will make things easier for you here. You can thank me later.

msg.payload_size,
&msg.paying_wallet,
);
trace_log_wrapper.log_trace(self.logging_kit(MsgIdRequested::New));
Copy link
Collaborator

@utkarshg6 utkarshg6 Nov 17, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This code is worrisome. I think if we had to find the log once we have the log file with us, then at that time, it'll be difficult for us to find this.

This layer of abstraction is the issue, if it wasn't for a use case like logging, I'd appreciate it and here, I'm concerned.

Copy link
Collaborator

@utkarshg6 utkarshg6 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants